一元線性回歸分析
首先介紹回歸分析中最基礎的情況:一元線性回歸分析。它規定模型f函數只能是y=k*x+b的形式,即只使用一個變量x(故稱為一元)的線性形式來預測目標變量y。
6.1.1引例
利用某網站歷次促銷活動中促銷讓利費用和銷售金額的數據(單位是十萬元),將使用該數據集來說明線性回歸分析的應用。
使用如下語句來繪製其散點圖:
cost<-c(1.8,1.2,0.4,0.5,2.5,2.5,1.5,1.2,1.6,1.0,1.5,0.7,1.0,0.8)
sales<-c(104,68,39,43,127,134,87,77,102,65,101,46,52,33)
data<-data.frame(cost=cost,sales=sales)
plot(data,pch=16,xlab="cost促銷讓利費用(十萬元)",ylab="sales 促銷銷量(十萬元)")
sol.lm<-lm(sales~cost,data)
abline(sol.lm,col="red")
由上圖可以看出,促銷讓利費用cost變量和促銷銷量sales變量之間呈直線形式。
6.1.2 一元線性回歸分析的原理及R語言實現
1. 最小二乘法
最小二乘法旨在使獲得的模型最大限度地擬合樣本數據
2.樣本方差和協方差
3. 計算模型的參數k和b
(1)估算參數k和b的典型值
(k<-cov(cost,sales)/cov(cost,cost))#模型參數k
(b<-mean(sales)-k*mean(cost)) #模型參數b
也可使用回歸方程建立函數lm來計算。代碼如下:
(sol.lm<-lm(sales~cost,data))
Call:
lm(formula= sales ~ cost, data = data)
Coefficients:
(Intercept) cost
13.82 48.60
(2)估算參數k和b的取值範圍
在計算得到的回歸模型y=k*x+b中,係數b和k只是一個真實模型的典型估算值,其估算範圍是:
[ki-sd(ki)tα/2(n-2),ki+sd(ki)tα/2(n-2)]
其中,k0表示回歸模型y=k×x+b中的b,k1表示k。sd(ki)是參數的標準差,可以使用summary(sol.lm)$coefficients[,2]直接讀取,代碼如下:
df<-sol.lm$df.residual
alpha=0.05
left<-summary(sol.lm)$coefficients[,1]-summary(sol.lm)$coefficients[,2]*qt(1-alpha/2,df);left
(Intercept) cost
1.667702 40.182861
right<-summary(sol.lm)$coefficients[,1]+summary(sol.lm)$coefficients[,2]*qt(1-alpha/2,df);right
(Intercept) cost
25.97978 57.01138
在上述代碼中,df為自由度,等於樣本數n減去自變量數p,再減1,即為n-2,該自由度可以通過sol.lm$df.residual直接讀取,alpha是置信度,典型取值0.05,left是取值範圍的最小值,right是取值範圍的最大值。
4. 衡量相關程度
(1)相關係數r和判定係數r2
對於引例,可以使用如下代碼來計算相關參數。
(r<-cor(cost,sales)) #相關係數r
(r2<-r^2) #判定係數r2
在lm函產生的結果中也包含了判定係數r的信息。
summary(sol.lm)
Call:
lm(formula= sales ~ cost, data = data)
Residuals:
Min 1Q Median 3Q Max
-19.701 -3.566 1.430 4.873 14.281
Coefficients:
Estimate Std. Error t valuePr(>|t|)
(Intercept) 13.824 5.579 2.478 0.0291 *
cost 48.597 3.862 12.584 2.84e-08 ***
---
Signif.codes: 0 『***』 0.001 『**』 0.01 『*』 0.05『.』 0.1 『 』 1
Residualstandard error: 9.106 on 12 degrees of freedom
MultipleR-squared: 0.9296, Adjusted R-squared: 0.9237
F-statistic:158.4 on 1 and 12 DF, p-value: 2.843e-08
上述的Multiple R-squared就是判定係數r2,該係數也可以使用summary(sol.lm)$r.squared來直接讀取。
(2)修正判定係數adjusted.r2
事實上,判定係數r2在用於多元回歸分析時有一個缺點,自變量越多,判定係數r2越大。為了消除這個缺點,可以引入修正判定係數adjusted.r2的概念。
lm函數產生的結果中也包含了修正判定係數adjusted.r2的信息
summary(sol.lm)
Call:
lm(formula= sales ~ cost, data = data)
Residuals:
Min 1Q Median 3Q Max
-19.701 -3.566 1.430 4.873 14.281
Coefficients:
Estimate Std. Error t valuePr(>|t|)
(Intercept) 13.824 5.579 2.478 0.0291 *
cost 48.597 3.862 12.584 2.84e-08 ***
---
Signif.codes: 0 『***』 0.001 『**』 0.01 『*』 0.05『.』 0.1 『 』 1
Residualstandard error: 9.106 on 12 degrees of freedom
MultipleR-squared: 0.9296, AdjustedR-squared: 0.9237
F-statistic:158.4 on 1 and 12 DF, p-value: 2.843e-08
上述的Adjusted R-squared就是修正判定係數,該係數也可以使用summary(sol.lm)$adj.r.squared來直接讀取。
5. 回歸係數的顯著性檢驗
(1)T檢驗
T檢驗可以檢驗各個模型參數是否等於0,並計算其等於0時的概率。一般來說,當p.value小於0.05,時,可以認定k不會等於0,其模型結果可用並通過了檢驗。
summary(sol.lm)
Call:
lm(formula= sales ~ cost, data = data)
Residuals:
Min 1Q Median 3Q Max
-19.701 -3.566 1.430 4.873 14.281
Coefficients:
Estimate Std. Error t valuePr(>|t|)
(Intercept) 13.824 5.579 2.478 0.0291 *
cost 48.597 3.862 12.584 2.84e-08 ***
---
Signif.codes: 0 『***』 0.001 『**』 0.01 『*』 0.05『.』 0.1 『 』 1
Residualstandard error: 9.106 on 12 degrees of freedom
MultipleR-squared: 0.9296, Adjusted R-squared: 0.9237
F-statistic:158.4 on 1 and 12 DF, p-value: 2.843e-08
也可以使用如下代碼直接讀取結果:
summary(sol.lm)$coefficients[,4]
(Intercept) cost
2.907896e-022.843305e-08
(2) F檢驗
與T檢驗不同,F檢驗用於在整體上檢驗模型參數是否為0,並計算等於0的概率。
summary(sol.lm)
Call:
lm(formula= sales ~ cost, data = data)
Residuals:
Min 1Q Median 3Q Max
-19.701 -3.566 1.430 4.873 14.281
Coefficients:
Estimate Std. Error t valuePr(>|t|)
(Intercept) 13.824 5.579 2.478 0.0291 *
cost 48.597 3.862 12.584 2.84e-08 ***
---
Signif.codes: 0 『***』 0.001 『**』 0.01 『*』 0.05『.』 0.1 『 』 1
Residualstandard error: 9.106 on 12 degrees of freedom
MultipleR-squared: 0.9296, Adjusted R-squared: 0.9237
F-statistic:158.4 on 1 and 12 DF, p-value: 2.843e-08
其值為2.843e-08,遠小於0.05,表示通過了F檢驗。
在summary(sol.lm)中只給出了樣本自由度\自變量自由度以及F值,可以使用如下代碼來直接讀取F檢驗的p-value值。
(f<-summary(sol.lm)$fstatistic[1])
(df1<-summary(sol.lm)$fstatistic[2])
(df2<-summary(sol.lm)$fstatistic[3])
pf(f,df1,df2,lower.tail=F)
value
2.843305e-08
或者
1-pf(f,df1,df2)
value
2.843305e-08
6. 模型誤差(殘差)
回歸模型sol.lm的誤差(殘差residuals),可用於體現樣本點模型預測值與實際數據的差異程度,可通過sol.lm$residuals直接讀取誤差數據。對已一個正確的回歸模型,其誤差要服從正態分布。
shapiro.test(sol.lm$residuals)
Shapiro-Wilknormality test
data: sol.lm$residuals
W= 0.9669, p-value = 0.8329
說明殘差服從正態分布。
殘差的標準誤(Residual standard error)可以從整體上體現一個模型的誤差情況,它可以用於不同模型間性能的對比。
summary(sol.lm)
Call:
lm(formula= sales ~ cost, data = data)
Residuals:
Min 1Q Median 3Q Max
-19.701 -3.566 1.430 4.873 14.281
Coefficients:
Estimate Std. Error t valuePr(>|t|)
(Intercept) 13.824 5.579 2.478 0.0291 *
cost 48.597 3.862 12.584 2.84e-08 ***
---
Signif.codes: 0 『***』 0.001 『**』 0.01 『*』 0.05『.』 0.1 『 』 1
Residual standarderror: 9.106 on 12 degrees of freedom
MultipleR-squared: 0.9296, Adjusted R-squared: 0.9237
F-statistic:158.4 on 1 and 12 DF, p-value: 2.843e-08
也可以使用summary(sol.lm)$sigma直接讀取。
7. 預測
在R語言中,使用predict函數可以方便地計算預測值和取值範圍。
下面的代碼返回原有14個樣本的預測值數據。
predict(sol.lm)
1 2 3 4 5 6 7 8 9 10 11 12 13
101.29856 72.14029 33.26259 38.12230 135.31655135.31655 86.71942 72.14029 91.57914 62.42086 86.71942 47.84173 62.42086
14
52.70144