问题
需要计算回归分析中的一些关键统计量,例如R2、F值、系数的置信区间、残差、ANOVA表等等。
解决方案
首先把回归模型保存到变量中:
代码 | |
1 | > m <- lm(y ~ u + v + w) |
然后就可以用各种函数从模型中获得所需的统计量或信息:
anova(m): ANOVA表
coefficients(m): 模型的系数
coef(m): 跟coefficients(m)一样
confint(m): 回归系数的置信区间
deviance(m): 残差平方和
effects(m): 正交效应向量(Vector of orthogonal effects )
fitted(m): 拟合的Y值向量Vector of fitted y values
residuals(m): 模型残差Model residuals
resid(m): 跟residuals(m)一样
summary(m):关键统计量,例如R2、F统计量和残差标准差(σ)
vcov(m):主参数的协防差矩阵
讨论
在我最初使用R的时候,在文档中看到说lm函数适用于做线性回归的。所以我使用了这个函数,得到了第21招中的输出:
代码 | |
1
2 3 4 5 | > lm(y ~ u + v + w)
Call: lm(formula = y ~ u + v + w) Coefficients: (Intercept) 1.4222 u 1.0359 v 0.9217 w 0.7261 |
太坑爹了!这根SAS之类的软件输出的结果相比,简直是一无是处。R2呢?系数的可信区间呢?还有F统计量,它的P值,和ANOVA表呢?其实,这些数据都有,只管向R要就是了。有些统计软件会一股脑儿地输出所有的统计量,而R只会输出最简单的统计量。然后你可以根据具体情况自行查询其他统计量。
lm函数会返回一个模型对象。可以用赋值操作符(<-)将这个模型保存到变量中。这个例子就像模型对象保存到了变量m中:
代码 | |
1 | > m <- lm(y ~ u + v + w) |
然后可以用各种函数从模型对象中抽取所需的信息。其中最重要的函数是summary:
代码 | |
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | > summary(m)
Call: lm(formula = y ~ u + v + w) Residuals: Min -3.3965 -0.9472 -0.4708 1.3730 3.1283 Coefficients: (Intercept) u v w — Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 1.625 on 26 degrees of freedom Multiple R-squared: 0.4981, F-statistic: 8.603 on 3 and 26 DF, p-value: 0.0003915 |
上面的摘要显示了估计的系数。显示了关键的统计量,例如R2、F统计量。还显示了估计的σ,即残差的标准差。
还有一些抽取其他重要的信息的专用函数:
模型系数(点估计)
代码 | |
1
2 3 | > coef(m)
(Intercept) u |
模型系数的置信区间
代码 | |
1
2 3 4 5 6 | > confint(m)
(Intercept) -1.46302727 4.307437 u v w |
模型残差
代码 | |
1
2 3 4 5 6 7 8 9 10 11 | > resid(m)
1 -1.41440465 1.55535335 -0.71853222 -2.22308948 -0.60201283 -0.96217874 7 -1.52877080 0.12587924 -0.03313637 0.34017869 1.28200521 -0.90242817 13 2.04481731 1.13630451 -1.19766679 -0.60210494 1.79964497 1.25941264 19 -2.03323530 1.40337142 -1.25605632 -0.84860707 -0.47307439 -0.76335244 25 2.16275214 |
残差平方和:
代码 | |
1
2 | > deviance(m)
[1] 68.69616 |
ANOVA表
代码 | |
1
2 3 4 5 6 7 8 9 10 | > anova(m)
Analysis of Variance Table Response: y u v w Residuals 26 68.696 2.6422 — Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 |
如果觉得把模型保存到变量中很麻烦,也可以只用一行代码:
代码 | |
1 | > summary(lm(y ~ u + v + w)) |
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。