R语言线性回归
程序员文章站
2022-07-14 19:46:12
...
线性回归模型
线性回归模型的计算
#lm()可以完成多元线性回归函数的估计,回归系统与回归方程的检验的工作
#summary()函数,返回列表内容
#X1表示体重,x2表示年龄,Y表示对应体重与年龄下的血压
blood<-data.frame(
X1=c(76.0, 91.5, 85.5, 82.5, 79.0, 80.5, 74.5,
79.0, 85.0, 76.5, 82.0, 95.0, 92.5),
X2=c(50, 20, 20, 30, 30, 50, 60, 50, 40, 55,
40, 40, 20),
Y= c(120, 141, 124, 126, 117, 125, 123, 125,
132, 123, 132, 155, 147)
)
lm.sol<-lm(Y ~ 1+X1+X2, data=blood)#1表示常数项
summary(lm.sol)
call:
lm(formula = Y ~ 1 + X1 + X2, data = blood)
Residuals:
Min 1Q Median 3Q Max
-4.0404 -1.0183 0.4640 0.6908 4.3274
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -62.96336 16.99976 -3.704 0.004083 **
X1 2.13656 0.17534 12.185 2.53e-07 ***
X2 0.40022 0.08321 4.810 0.000713 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.854 on 10 degrees of freedom
Multiple R-squared: 0.9461, Adjusted R-squared: 0.9354
F-statistic: 87.84 on 2 and 10 DF, p-value: 4.531e-07
总结
1.call:为函数所使用的模型
2.residuals:残差,列出了最小值,1/4,中位数,3/4,最大值。
3.coefficients:系数,Estimate表示估计值(截距,x1,x2系数),3.1.std.error表示各个估计值的标准差
3.2.t value表示t统计值
3.3.Pr(>|t|)表示对应统计量的p值
3.4.Signif. codes:显著性检测,p值在那个区间就用对应的星号表
4.Residal standard error表示残差的标准差,*度为n-p-1
5.Multiple R-Squared 表示相关系数的平方,R^2
6.Adjusted R-Squared 表示修正相关系数平方,这个值小于R^2,其目的是不要轻易做出自变量与因变量相关的判断。消除了R平方对自变量个数的依赖。
7.F-statistic 表示F统计量,*度为(p,n-p-1),p-value表示F统计量对应的p值
Y = -62.96 +2.136*X1 + 0.4002*X2
预测区间与置信区间
#在R中使用predict()函数来计算y0的估计值,预测区间和E(y0)的置信区
间。
#置信区间估计(confidence interval estimate):利用估计的回归方程,对于自变量 x 的一个给定值 x0 ,求出因变量 y 的平均值的估计区间。
#预测区间估计(prediction interval estimate):利用估计的回归方程,对于自变量 x 的一个给定值 x0 ,求出因变量 y 的一个个别值的估计区间。
## 一元回归估计
x为含碳量,y为合金强度
x<-c(0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16,
0.17, 0.18, 0.20, 0.21, 0.23)
y<-c(42.0, 43.5, 45.0, 45.5, 45.0, 47.5, 49.0,
53.0, 50.0, 55.0, 55.0, 60.0)
lm.sol<-lm(y ~ 1+x)
summary(lm.sol)
## 计算预测值, 并绘图
new <- data.frame(x = seq(0.10, 0.24, by=0.01))#生成x的横坐标
pp<-predict(lm.sol, new, interval="prediction")
#3行15列(fit lwr upr)
pc<-predict(lm.sol, new, interval="confidence")
#3行15列(fit lwr upr)
par(mai=c(0.8, 0.8, 0.2, 0.2))
#这句程序?
matplot(new$x, cbind(pp, pc[,-1]), type="l",
xlab="X", ylab="Y", lty=c(1,5,5,2,2),
col=c("blue", "red", "red", "brown", "brown"),
lwd=2)
#new$x为方向上的15个值,pp与pc的fit值相同,故去除相同一列,cbine表示y方向上的值
points(x,y, cex=1.4, pch=21, col="red", bg="orange")
#增加出x,y的点图
legend(0.1, 63,
c("Points", "Fitted", "Prediction", "Confidence"),
pch=c(19, NA, NA, NA), lty=c(NA, 1,5,2),
col=c("orange", "blue", "red", "brow")
)
#增加标签
下一篇: Cpp获取当前时间字符串