作者: afenxi来源: afenxi时间:2016-12-12 13:42:46
摘要:数据分析网整理自tbkken的《R语言入门25招》,一招招技能带你走进R语言。
问题
需要计算回归分析中的一些关键统计量,例如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 1Q Median 3Q Max
-3.3965 -0.9472 -0.4708 1.3730 3.1283
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.4222 1.4036 1.013 0.32029
u 1.0359 0.2811 3.685 0.00106 **
v 0.9217 0.3787 2.434 0.02211 *
w 0.7261 0.3652 1.988 0.05744 .
---
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, Adjusted R-squared: 0.4402
F-statistic: 8.603 on 3 and 26 DF, p-value: 0.0003915
上面的摘要显示了估计的系数。显示了关键的统计量,例如R2、F统计量。还显示了估计的σ,即残差的标准差。
还有一些抽取其他重要的信息的专用函数:
模型系数(点估计)
代码 1
2
3 > coef(m)
(Intercept) u v w
1.4222050 1.0358725 0.9217432 0.7260653
模型系数的置信区间
代码 1
2
3
4
5
6 > confint(m)
2.5 % 97.5 %
(Intercept) -1.46302727 4.307437
u 0.45805053 1.613694
v 0.14332834 1.700158
w -0.02466125 1.476792
模型残差
代码 1
2
3
4
5
6
7
8
9
10
11 > resid(m)
1 2 3 4 5 6
-1.41440465 1.55535335 -0.71853222 -2.22308948 -0.60201283 -0.96217874
7 8 9 10 11 12
-1.52877080 0.12587924 -0.03313637 0.34017869 1.28200521 -0.90242817
13 14 15 16 17 18
2.04481731 1.13630451 -1.19766679 -0.60210494 1.79964497 1.25941264
19 20 21 22 23 24
-2.03323530 1.40337142 -1.25605632 -0.84860707 -0.47307439 -0.76335244
25 26 27 28 29 30
2.16275214 1.53483429 1.65085364 -3.39647629 -0.46853750 3.12825629
残差平方和:
代码 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
Df Sum Sq Mean Sq F value Pr(>F)
u 1 27.916 27.9165 10.5658 0.003178 **
v 1 29.830 29.8299 11.2900 0.002416 **
w 1 10.442 10.4423 3.9522 0.057436 .
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))