版权声明:博客授权, 请联系我, 微信: yijiaobani, 备注: 姓名+ 单位 https://blog.csdn.net/yijiaobani/article/details/78881266
用矩阵的方法计算回归分析参数
1.1 数据来源:来源R语言默认的数据集women
这是一个描述女性身高和体重的数据,我们以height为X变量(自变量),以weight为Y变量(因变量),进行模型的计算。
计算方法参考:https://stats.idre.ucla.edu/r/library/r-library-matrices-and-matrix-computations-in-r/
1.2 查看数据
data(women) head(women)
height | weight |
---|
58 | 115 |
59 | 117 |
60 | 120 |
61 | 123 |
62 | 126 |
63 | 129 |
1.3 理论模型
$ y = X\beta + \epsilon,\ E(\epsilon) = 0 ,\ Cov(\epsilon) = \sigma^2I_n \
回归系数估计: \widehat{\beta} = (X’X)^{-1}X’y \
拟合值:\widehat{y} = X\beta \
残差估计: \widehat{\epsilon}= y - \widehat{y} \
残差的平方:\sigma^2 = \sum{\widehat{\epsilon}^2}$
2.1 构建X矩阵
X <- as.matrix(cbind(1, women$height)) n <- dim(X)[1] p <- dim(X)[2] head(X)
2.2 构建y矩阵
y <- matrix(women$weight,,1) head(y)
2.3 计算 β 参数
第一种方法,是直接根据公式计算:
beta.hat <- solve(t(X) %*% X) %*% t(X) %*% y beta.hat
第二种方法,是用crossprod函数,在计算大数据时有优势
beta.hat1 <- solve(crossprod(X), crossprod(X,y)) # solve(A,B) == solve(A)%*%B beta.hat1
2.4 计算拟合值Fitted_value
y.hat <- X %*% beta.hat round(y.hat[1:5, 1],3) # 拟合值 y[1:5, 1] #原始值
- 112.583
- 116.033
- 119.483
- 122.933
- 126.383
- 115
- 117
- 120
- 123
- 126
plot(y.hat,y)
2.5 计算残差值(residual)
residual <- y - y.hat head(residual)
2.41666667 |
0.96666667 |
0.51666667 |
0.06666667 |
-0.38333333 |
-0.83333333 |
2.6 计算残差方差组分(残差的方差)
sigma2 <- sum((y - y.hat)^2)/(n - p) sigma2
2.32564102564103
2.7 计算方差协方差矩阵(var.beta)
v <- solve(t(X) %*% X) * sigma2 v
35.247305 | -0.539880952 |
-0.539881 | 0.008305861 |
2.8 计算参数的标准误
#standard errors of the parameter estimates sqrt(diag(v))
- 5.93694404890295
- 0.0911364954662
2.9 对参数进行T检验,计算T值
t.values <- beta.hat/sqrt(diag(v)) t.values
2.10 根据T值,计算p值
2 * (1 - pt(abs(t.values), n - p))
3. 用lm函数和矩阵得到的结果对比
3.1 对比参数估计
mod <- lm(weight ~ height,data=women) summary(mod)$coef
| Estimate | Std. Error | t value | Pr(>|t|) |
---|
(Intercept) | -87.51667 | 5.9369440 | -14.74103 | 1.711082e-09 |
---|
height | 3.45000 | 0.0911365 | 37.85531 | 1.090973e-14 |
---|
beta.hat
3.2 拟合值
head(fitted(mod))
- 1
- 112.583333333333
- 2
- 116.033333333333
- 3
- 119.483333333333
- 4
- 122.933333333333
- 5
- 126.383333333333
- 6
- 129.833333333333
head(y.hat)
112.5833 |
116.0333 |
119.4833 |
122.9333 |
126.3833 |
129.8333 |
3.3 残差值
head(residuals(mod))
- 1
- 2.41666666666676
- 2
- 0.966666666666627
- 3
- 0.516666666666641
- 4
- 0.0666666666666444
- 5
- -0.383333333333353
- 6
- -0.833333333333348
head(residual)
2.41666667 |
0.96666667 |
0.51666667 |
0.06666667 |
-0.38333333 |
-0.83333333 |
summary(mod)
Call: lm(formula = weight ~ height, data = women) Residuals: Min 1Q Median 3Q Max -1.7333 -1.1333 -0.3833 0.7417 3.1167 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -87.51667 5.93694 -14.74 1.71e-09 *** height 3.45000 0.09114 37.85 1.09e-14 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 1.525 on 13 degrees of freedom Multiple R-squared: 0.991, Adjusted R-squared: 0.9903 F-statistic: 1433 on 1 and 13 DF, p-value: 1.091e-14
sigma2
2.32564102564103
sqrt(sigma2)
1.52500525429948