我正在进行面板回归,并决定改用lm(),因为plm()对于测试数据(以及linearmodels中的linearmodels)没有一个很好的predict()函数,对于我来说,作为计量经济学新手,lme4语法是不直观的。
我想使用lm并预测未知的数据。
我的lm()方程看起来像这样,作者是一个固定的效果
fit <- lm(y ~ a + b + factor(author), data = train)很明显它给我打印了数千个系数。如何在lm()中建立一个模型,对所有作者进行评估,而不单独打印?
发布于 2022-03-11 21:32:13
让我们假设一些具体的数据示例。
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))现在我们做一个固定的效果回归,我假设我们不需要任何Intercept,所以命令是
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值。
> 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 2:
> 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 https://stackoverflow.com/questions/71443939
复制相似问题