gpt4 book ai didi

R预测包VS Stata利润率

转载 作者:行者123 更新时间:2023-12-01 20:20:37 26 4
gpt4 key购买 nike

我从 Stata 切换到 R,当我使用预测来计算边际 pred 时,我发现结果不一致,而 Stata 命令 ma​​rgins 将变量值固定为 x。这是示例:

library(dplyr)
library(prediction)

d <- data.frame(x1 = factor(c(1,1,1,2,2,2), levels = c(1, 2)),
x2 = factor(c(1,2,3,1,2,3), levels = c(1, 2, 3)),
x3 = factor(c(1,2,1,2,1,2), levels = c(1, 2)),
y = c(3.1, 2.8, 2.5, 4.3, 4.0, 3.5))

m2 <- lm(y ~ x1 + x2 + x3, d)
summary(m2)

marg2a <- prediction(m2, at = list(x2 = "1"))
marg2b <- prediction(m2, at = list(x1 = "1"))

marg2a %>%
select(x1, fitted) %>%
group_by(x1) %>%
summarise(error = mean(fitted))

marg2b %>%
select(x2, fitted) %>%
group_by(x2) %>%
summarise(error = mean(fitted))

这是结果:

# A tibble: 2 x 2
x1 error
<fctr> <dbl>
1 1 3.133333
2 2 4.266667


# A tibble: 3 x 2
x2 error
<fctr> <dbl>
1 1 3.125
2 2 2.825
3 3 2.425

如果我尝试使用 Stata 的边距复制此内容,结果如下:

regress y i.x1 i.x2 i.x3
margins i.x1, at(x2 == 1)
margins i.x2, at(x1 == 1)


------------------------------------------------------------------------------
| Delta-method
| Margin Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x1 |
1 | 3.125 .0829157 37.69 0.017 2.071456 4.178544
2 | 4.275 .0829157 51.56 0.012 3.221456 5.328544
------------------------------------------------------------------------------

------------------------------------------------------------------------------
| Delta-method
| Margin Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x2 |
1 | 3.125 .0829157 37.69 0.017 2.071456 4.178544
2 | 2.825 .0829157 34.07 0.019 1.771456 3.878544
3 | 2.425 .0829157 29.25 0.022 1.371456 3.478544
------------------------------------------------------------------------------

R 和 Stata 中 x2 的边距是相同的,但是当涉及到 x1 时,存在差异,我不知道为什么。非常感谢任何帮助。谢谢,

P

最佳答案

您的 Stata 和 R 代码不等效。要复制该 Stata 代码,您需要:

> prediction(m2, at = list(x1 = c("1", "2"), x2 = "1"))
Average predictions for 6 observations:
at(x1) at(x2) value
1 1 3.125
2 1 4.275
> prediction(m2, at = list(x2 = c("1", "2", "3"), x1 = "1"))
Average predictions for 6 observations:
at(x2) at(x1) value
1 1 3.125
2 1 2.825
3 1 2.425

这是因为当您说 margins i.x1 时,您要求对数据集的反事实版本进行预测,其中 x1 替换为 1,然后替换为 2,附加约束条件是,在两个反事实中 x2 都保持为 1。在您的第二个 Stata 示例中也发生了同样的事情。

这是由于 Stata 的 margins 命令存在歧义,或者是两个语法表达式获得相同的输出。其中之一是您的代码:

. margins i.x1, at(x2 == 1)

Predictive margins Number of obs = 6
Model VCE : OLS

Expression : Linear prediction, predict()
at : x2 = 1

------------------------------------------------------------------------------
| Delta-method
| Margin Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x1 |
1 | 3.125 .0829156 37.69 0.017 2.071457 4.178543
2 | 4.275 .0829156 51.56 0.012 3.221457 5.328543
------------------------------------------------------------------------------

另一个更明确地说明了上面实际发生的情况:

. margins, at(x1 = (1 2) x2 == 1)

Predictive margins Number of obs = 6
Model VCE : OLS

Expression : Linear prediction, predict()

1._at : x1 = 1
x2 = 1

2._at : x1 = 2
x2 = 1

------------------------------------------------------------------------------
| Delta-method
| Margin Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
_at |
1 | 3.125 .0829156 37.69 0.017 2.071457 4.178543
2 | 4.275 .0829156 51.56 0.012 3.221457 5.328543
------------------------------------------------------------------------------

关于R预测包VS Stata利润率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45431946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com