R语言线性回归总结

R语言是一种十分方便的统计学编程语言,本文主要介绍通过R语言进行线性回归,并列举了几个R语言在线性回归中的应用。


那么接下来是干货时间 QAQ


线性回归计算分为以下几点

一、判断是否符合线性回归,并求出回归方程
lm.sol + summary(lm.sol)计算各项的Pr值(即t检验的p值),
Pr< 0.05表示该项系数与t检验默认值(mu=0)之间存在显著差异(即系数显著不为零),此时符合回归,Estimate对应的值为该项系数

二、预测

lm.pred<-predict(lm.sol, data.frame(x = 0.16), interval="prediction", level=0.95)

For example
输出的三个值分别为预估值,区间下限和区间上限

三、查找偏差值

y.res<-resid(lm.sol)
plot(y.res)```

四、逐步回归

lm.step<-step(lm.sol)
drop1(lm.step) #查看每项的AIC
summary(lm.step)

五、画拟合曲线

x<-seq(min(X1), max(X1), len=200)
y<-predict(lm2.sol, data.frame(X1=x))
plot(Y~X1); lines(x,y)```
六、残差图

y.res<-resid(lm.sol)
y.rst<-rstandard(lm.sol) #标准化
y.fit<-predict(lm.sol)
#普通残差图
plot(y.res~y.fit)
#标准化残差图
plot(y.rst~y.fit)

漏斗形->异方差 && 无规律—>同方差(正常情况)

x<-scan()
5.1 1907 3.5 1287 7.1 2700 6.2 2373 8.8 3260 7.8 3000 4.5 1947 5.6 2273 8.0 3113 6.4 2493

dim(x)<-c(2,10)
x<-t(x)
colnames(x)<-c("X","Y")
x<-as.data.frame(x)
plot(x$X,x$Y)

(1)
呈线性关系

lm.sol<-lm(Y~X,data=x)
summary(lm.sol)

(2 & 3)
y=364.18x+140.95
回归数据的显著性检验是指看Pr值是否<0.05,Pr<0.05时为显著的
X的系数显著,常数项系数不显著
abline(lm.sol)

(4)
已知其中部分数据,预测剩余值用predict
predict(lm对象,新数据的data.frame ,interval=”prediction”)

new<-data.frame(X=7)
lm.pred<-predict(lm.sol,new,interval="prediction")

#Y(7)= 2690.227, [2454.971,2925.484]


(1)

x<-scan()
0.4 52 158 64 0.4 23 163 60 3.1 19 37 71 0.6 34 157 61 4.7 24 59 54 1.7 65 123 77 9.4 44 46 81
10.1 31 117 93 11.6 29 173 93 12.6 58 112 51 10.9 37 111 76 23.1 46 114 96 23.1 50 134 77
21.6 44 73 93 23.1 56 168 95 1.9 36 143 54 26.8 58 202 168 29.9 51 124 99

dim(x)<-c(4,18)
x<-t(x)
colnames(x)<-c("x1","x2","x3","y")
x<-data.frame(x)
lm.sol<-lm(y~x1+x2+x3,data=x)
summary(lm.sol)

(2)
Pr<0.05表示显著
x1和常数项显著,其他不显著
(3)
lm.step<-step(lm.sol)

#x2被删去
summary(lm.step)

lm.final<-lm(y~x1,data = x)
summary(lm.final)

p<0.05
可以,y = 1.84x + 59.25


(1)

x<-scan()
1 0.6 1 1.6 1 0.5 1 1.2 2 2.0 2 1.3 2 2.5 3 2.2 3 2.4 3 1.2 4 3.5 4 4.1 4 5.1 5 5.7 6 3.4
6 9.7 6 8.6 7 4.0 7 5.5 7 10.5 8 17.5 8 13.4 8 4.5 9 30.4 11 12.4 12 13.4 12 26.2 12 7.4

dim(x)<-c(2,28)
x<-t(x)
colnames(x)<-c("x","y")
x<-data.frame(x)
plot(x$x,x$y)
lm.sol<-lm(y~x,data=x)
summary(lm.sol)

abline(lm.sol)

(2)
Pr的值为T检验的P值,F-statistic的p-value表示F检验的p值,两者都是< 0.05时通过
Pr常数项>0.05,x的< 0.05,故常数项没通过t检验,x项通过了
F-statistic的p-value< 0.05,通过了F检验
(3)

y.res<-resid(lm.sol); y.fit<-predict(lm.sol)
plot(y.res~y.fit)
y.rst<-rstandard(lm.sol)
plot(y.rst~y.fit)

喇叭形,异方差的
(4)

lm2<-lm(y~x,data=x)
lm2_sq<-update(lm2,sqrt(.)~.)
summary(lm2_sq)

R-squared还较小,但残差明显变小了(0.7206)


toothpaste<-data.frame(
X1=c(-0.05, 0.25,0.60,0, 0.25,0.20, 0.15,0.05,-0.15, 0.15,
0.20, 0.10,0.40,0.45,0.35,0.30, 0.50,0.50, 0.40,-0.05,
-0.05,-0.10,0.20,0.10,0.50,0.60,-0.05,0, 0.05, 0.55),
X2=c( 5.50,6.75,7.25,5.50,7.00,6.50,6.75,5.25,5.25,6.00,
6.50,6.25,7.00,6.90,6.80,6.80,7.10,7.00,6.80,6.50,
6.25,6.00,6.50,7.00,6.80,6.80,6.50,5.75,5.80,6.80),
Y =c( 7.38,8.51,9.52,7.50,9.33,8.28,8.75,7.87,7.10,8.00,
7.89,8.15,9.10,8.86,8.90,8.87,9.26,9.00,8.75,7.95,
7.65,7.27,8.00,8.50,8.75,9.21,8.27,7.67,7.93,9.26)
)
lm.sol<-lm(Y~X1+X2,data = toothpaste)
summary(lm.sol)

– To Be Continued –

<meta http-equiv="refresh" content="0.5">