在 R 中使用 lm() 拟合固定效应模型,没有单独的截距
Fit a fixed effect model with lm() in R without individual intercepts
我正在研究面板回归并决定切换到 lm()
,因为 plm()
没有很好的 predict()
测试数据函数(以及 linearmodels
Python) 和 lme4
语法对我这个计量经济学新手来说并不直观。
我想使用 lm
并预测未见过的数据。
我的 lm()
方程看起来像这样,作者作为固定效应
fit <- lm(y ~ a + b + factor(author), data = train)
显然,它会打印出数千个单独的系数。如何在 lm()
中构建模型,在不单独打印的情况下对所有作者进行评估?
让我们假设一些具体的数据示例,例如
a <- rnorm(100)
b <- runif(100)
train <- data.frame(a, b,
author = sample(LETTERS[1:10], 100, 1),
y = 3*a + .5*b + rnorm(100))
现在我们做一个固定效应回归,我假设我们不需要任何拦截所以命令是
fit <- lm(y ~ a + b + author - 1, data = train)
公式中的 - 1
部分省略了 Intercpet,而是为每个 author
计算固定效应。没有遗漏基本级别。
打印此模型或其摘要对于示例中的 10 位作者是可行的,但对于您的工作中的数千位作者则不可行。
您只能像这样打印 a
和 b
的系数
> fit$coefficients[c('a', 'b')]
a b
3.02022335 0.09789947
您可以通过 anova
命令查看系数及其 p-values
> anova(fit)
Analysis of Variance Table
Response: y
Df Sum Sq Mean Sq F value Pr(>F)
a 1 1139.90 1139.90 1034.2307 < 2.2e-16 ***
b 1 7.73 7.73 7.0127 0.009591 **
author 10 10.75 1.07 0.9751 0.470812
Residuals 88 96.99 1.10
您甚至可以为系数解构 summary(fit)
或显示调整后的 R²:
> summary(fit)$coefficients[c("a", "b"),]
Estimate Std. Error t value Pr(>|t|)
a 3.02022335 0.09697699 31.1437123 2.679195e-49
b 0.09789947 0.35161039 0.2784317 7.813342e-01
>
> summary(fit)$adj.r.squared
[1] 0.9122033
有关其他值,请参阅 help(summary.lm)
。如果你还想看到作者 F
的系数,即
> fit$coefficients["authorF"]
authorF
0.6174314
我正在研究面板回归并决定切换到 lm()
,因为 plm()
没有很好的 predict()
测试数据函数(以及 linearmodels
Python) 和 lme4
语法对我这个计量经济学新手来说并不直观。
我想使用 lm
并预测未见过的数据。
我的 lm()
方程看起来像这样,作者作为固定效应
fit <- lm(y ~ a + b + factor(author), data = train)
显然,它会打印出数千个单独的系数。如何在 lm()
中构建模型,在不单独打印的情况下对所有作者进行评估?
让我们假设一些具体的数据示例,例如
a <- rnorm(100)
b <- runif(100)
train <- data.frame(a, b,
author = sample(LETTERS[1:10], 100, 1),
y = 3*a + .5*b + rnorm(100))
现在我们做一个固定效应回归,我假设我们不需要任何拦截所以命令是
fit <- lm(y ~ a + b + author - 1, data = train)
公式中的 - 1
部分省略了 Intercpet,而是为每个 author
计算固定效应。没有遗漏基本级别。
打印此模型或其摘要对于示例中的 10 位作者是可行的,但对于您的工作中的数千位作者则不可行。
您只能像这样打印 a
和 b
的系数
> fit$coefficients[c('a', 'b')]
a b
3.02022335 0.09789947
您可以通过 anova
命令查看系数及其 p-values
> anova(fit)
Analysis of Variance Table
Response: y
Df Sum Sq Mean Sq F value Pr(>F)
a 1 1139.90 1139.90 1034.2307 < 2.2e-16 ***
b 1 7.73 7.73 7.0127 0.009591 **
author 10 10.75 1.07 0.9751 0.470812
Residuals 88 96.99 1.10
您甚至可以为系数解构 summary(fit)
或显示调整后的 R²:
> summary(fit)$coefficients[c("a", "b"),]
Estimate Std. Error t value Pr(>|t|)
a 3.02022335 0.09697699 31.1437123 2.679195e-49
b 0.09789947 0.35161039 0.2784317 7.813342e-01
>
> summary(fit)$adj.r.squared
[1] 0.9122033
有关其他值,请参阅 help(summary.lm)
。如果你还想看到作者 F
的系数,即
> fit$coefficients["authorF"]
authorF
0.6174314