You are on page 1of 18

第 10 章 多元線性迴歸

10-1 多元線性迴歸模型
10.1.1 迴歸模型與迴歸方程式

10.1.2 參數的最小平方估計
例 10-1
為分析餐館營業額的影響因素,一家市場調查公司在某城市隨機抽取 25 家餐館,調查得到的有關資
料如下表所示。其中:y=日均營業額(萬元),x1=周邊居民人數(萬人),x2=用餐平均支出(元/人),
x3=周邊居民月平均收入(元),x4=周邊餐館數(個),x5=距市中心距離(km)。建立多元線性迴歸模
型,並解釋各迴歸係數的涵義。

>
example10_1<-read.csv("C:/Users/user/Desktop/example/ch10/example10_1.cs
v")
>
save(example10_1,file="C:/Users/user/Desktop/example/ch10/example10_1.RD
ata")
> load("C:/Users/user/Desktop/example/ch10/example10_1.RData")
> head(example10_1)

# 6 個變數之間的相關圖
> library(corrgram)
>
corrgram(example10_1[2:7],order=TRUE,lower.panel=panel.shade,upper.panel
=panel.pie,text.panel=panel.txt)
x4

x5

x1

x3

x2

> library(car)
# 繪製各變數的散布圖矩陣以了解變數之間的相關程度 變數 x1 與變數 x3 之間
> scatterplotMatrix(example10_1[2:7]) 呈現高度相關

# 利用套件 lmtest 的 lm 函數建構多元線性迴歸模型


> library(lmtest)
> model1<-lm(y~x1+x2+x3+x4+x5,data=example10_1)
> summary(model1)
# 計算迴歸係數的信賴區間
> confint(model1,level=0.95)

# 輸出變異數分析表
> anova(model1)
10-2 適合度和顯著性檢定
10.2.1 模型的適合度

1.多重決定係數

2.估計標準誤差

10.2.2 模型的顯著性檢定

1.線性關係檢定

2.迴歸係數檢定
例 10-2
為分析餐館營業額的影響因素,一家市場調查公司在某城市隨機抽取 25 家餐館,調查得到的有關資
料如下表所示。其中:y=日均營業額(萬元),x1=周邊居民人數(萬人),x2=用餐平均支出(元/人),
x3=周邊居民月平均收入(元),x4=周邊餐館數(個),x5=距市中心距離(km)。對迴歸模型的線性關
係和迴歸係數分別進行顯著性檢定(α=0.05)。

# 線性關係檢定
設定虛無假設與對立假設
H0:β1=β2=β3=β4=β5=0
H1:β1,β2,β3,β4,β5 至少有一個不等於 0
2.835e-07 < 0.05,拒絕 H0
# 迴歸係數檢定
設定虛無假設與對立假設 H0:βi=0、H1:βi≠0
只有 β2 所對應的顯著水準 0.00952 小於 0.05
10.2.3 模型診斷
# 繪製殘差圖
> par(mfrow=c(1,2))
> plot(model1,which=1);plot(model1,which=2)
Residuals vs Fitted Normal Q-Q

3
2 4
20

4
16 2

2
10

Standardized residuals

1
Residuals

0
-10

-1
-20

10
-2

0 20 40 60 -2 -1 0 1 2

Fitted values Theoretical Quantiles

> residualPlots(model1)
# 利用 raintest 函數檢定迴歸模型線性假設
> raintest(y~.,data=example10_1)

> qqnorm(residuals(model1))
> qqline(residuals(model1))

# 利用 shapiro.test 函數檢定迴歸模型殘差常態性假設
> shapiro.test(residuals(model1))

# 利用 durbinWatsonTest 函數檢定迴歸模型殘差獨立性假設
> durbinWatsonTest(model1)
# 利用 bptest 函數檢定迴歸模型殘差均質性假設
> bptest(model1)

# 利用 outlierTest 函數檢定迴歸模型是否有離群值
> outlierTest(model1)

迴歸模型殘差檢定
虛無假設 P-value
線性 模式服從線性 0.316
常態性 殘差服從常態 0.189
獨立性 殘差之間相互獨立 0.450
均質性 殘差變異數一致 0.521
離群值 無顯著離群值 0.063
在 0.05 的顯著水準下,沒有顯著證據可推翻此迴歸模型符合線性、常態性、獨立性、均質性的假設,
同時也沒有明顯的離群值發生。

# 去掉第 2 個點和第 4 個點後的迴歸


> newmodel1<-lm(y~x1+x2+x3+x4+x5,data=example10_1[-c(2,4),])
> summary(newmodel1)
# 去掉第 2 個點和第 4 個點後的迴歸診斷
> par(mfrow=c(1,2))
> plot(newmodel1,which=1);plot(newmodel1,which=2)
Residuals vs Fitted Normal Q-Q
15

2
16 16
22

22
10

1
Standardized residuals
5
Residuals

0
-5

-1
-10

10

10
-2

0 20 40 60 80 -2 -1 0 1 2

Fitted values Theoretical Quantiles

> residualPlots(newmodel1)
10-3 多重共線性及其處理
10.3.1 多重共線性及其識別

1. 多重共線性所產生的問題

2. 多重共線性的識別和處理
# 計算相關係數矩陣並作檢定
> library(psych)
> corr.test(example10_1[3:7],use='complete')
# 計算容忍度和 VIF
> library(car)
> vif(model1)

變數 x1 與變數 x3 的 VIF 值較大,顯示變數間存在高度共線性。

> 1/vif(model1)

10.3.2 變數選擇與逐步迴歸

1. 向前選擇

2. 向後剔除

3. 逐步迴歸
例 10-3
為分析餐館營業額的影響因素,一家市場調查公司在某城市隨機抽取 25 家餐館,調查得到的有關資
料如下表所示。其中:y=日均營業額(萬元),x1=周邊居民人數(萬人),x2=用餐平均支出(元/人),
x3=周邊居民月平均收入(元),x4=周邊餐館數(個),x5=距市中心距離(km)。用逐步迴歸方法建立
迴歸模型。

# 逐步迴歸
> model1<-lm(y~x1+x2+x3+x4+x5,data=example10_1)
> model2<-step(model1)
# 擬合逐步迴歸模型
> model2<-lm(y~x1+x2+x5,data=example10_1)
> summary(model2)

# 逐步迴歸的變異數分析表
> anova(model2)
# 逐步迴歸的診斷
> par(mfrow=c(1,2))
> plot(model2,which=1);plot(model2,which=2)
Residuals vs Fitted Normal Q-Q

3
2 4
20

4 2

16

2
16

Standardized residuals
10
Residuals

1
0

0
-10

-1

0 20 40 60 80 -2 -1 0 1 2

Fitted values Theoretical Quantiles

10-4 相對重要性和模型比較
10.4.1 自變數的相對重要性
例 10-4
為分析餐館營業額的影響因素,一家市場調查公司在某城市隨機抽取 25 家餐館,調查得到的有關資
料如下表所示。其中:y=日均營業額(萬元),x1=周邊居民人數(萬人),x2=用餐平均支出(元/人),
x3=周邊居民月平均收入(元),x4=周邊餐館數(個),x5=距市中心距離(km)。計算標準化迴歸係數,
分析各自變數對預測日均營業額的相對重要性。

# 計算標準化迴歸係數
> model1<-lm(y~x1+x2+x3+x4+x5,data=example10_1)
> library(lm.beta)
> model1.beta<-lm.beta(model1)
> summary(model1.beta)
10.4.2 模型比較
例 10-5
為分析餐館營業額的影響因素,一家市場調查公司在某城市隨機抽取 25 家餐館,調查得到的有關資
料如下表所示。其中:y=日均營業額(萬元),x1=周邊居民人數(萬人),x2=用餐平均支出(元/人),
x3=周邊居民月平均收入(元),x4=周邊餐館數(個),x5=距市中心距離(km)。對逐步迴歸模型與含
有 5 個自變數的迴歸模型進行比較。

設定虛無假設與對立假設
H0:β3=β4=0
H1:β3,β4 至少有一個不等於 0
# 用 anova 對逐步迴歸模型與含有 5 個自變數的迴歸模型進行比較
> model1<-lm(y~x1+x2+x3+x4+x5,data=example10_1)
> model2<-lm(y~x1+x2+x5,data=example10_1)
> anova(model2,model1)

0.6121 > 0.05,接受 H0。

# 用 AIC 準則對逐步迴歸模型與含有 5 個自變數的迴歸模型進行比較


> model1<-lm(y~x1+x2+x3+x4+x5,data=example10_1)
> model2<-lm(y~x1+x2+x5,data=example10_1)
> AIC(model2,model1)
10-5 利用迴歸方程式進行預測
例 10-6
為分析餐館營業額的影響因素,一家市場調查公司在某城市隨機抽取 25 家餐館,調查得到的有關資
料如下表所示。其中:y=日均營業額(萬元),x1=周邊居民人數(萬人),x2=用餐平均支出(元/人),
x3=周邊居民月平均收入(元),x4=周邊餐館數(個),x5=距市中心距離(km)。對逐步迴歸方程式求
日均營業額 95%的信賴區間和預測區間,以及周邊居民人數為 50 萬人、用餐平均支出為 100 元/人、
距市中心距離為 10km 時日均營業額的點預測值、信賴區間和預測區間。

# 計算點預測值(pre)、信賴區間(con_int)和預測區間(pre_int)
> model2<-lm(y~x1+x2+x5,data=example10_1)
> x<-example10_1[,c(3,4,7)]
> pre<-predict(model2)
> res<-residuals(model2)
> zre<-rstandard(model2)
> con_int<-predict(model2,x,interval='confidence',level=0.95)
> pre_int<-predict(model2,x,interval='prediction',level=0.95)
> mysummary<-data.frame(營業額=example10_1$y,點預測值=pre,殘差=res,標準化殘差
=zre,信賴下限= con_int[,2],信賴上限=con_int[,3],預測下限=pre_int[,2],預測上限
=pre_int[,3])
> round(mysummary,3)
# 計算 x1=50,x2=100,x5=10 時,日均營業額的點預測值、信賴區間和預測區間(新值預測)
> x0<-data.frame(x1=50,x2=100,x5=10)
> predict(model2,newdata=x0)

> predict(model2,data.frame(x1=50,x2=100,x5=10),interval='confidence',
level=0.95)

> predict(model2,data.frame(x1=50,x2=100,x5=10),interval='prediction',
level=0.95)

10-6 虛擬變數迴歸
10.6.1 在模型中引入虛擬變數

10.6.2 含有一個虛擬變數的迴歸
例 10-7
為分析餐館營業額的影響因素,一家市場調查公司在某城市隨機抽取 25 家餐館,調查得到的有關資
料如下表所示。其中:y=日均營業額(萬元),x1=用餐平均支出(元/人),x2=交通方便程度(方便、
不方便)。建立以下兩個模型,並比較引入虛擬變數和不引入虛擬變數對迴歸結果的影響。
(1) 日均營業額與用餐平均支出的一元迴歸模型。
(2) 日均營業額與用餐平均支出和交通方便程度的二元迴歸模型。

>
example10_7<-read.csv("C:/Users/user/Desktop/example/ch10/example10_7.cs
v")
>
save(example10_7,file="C:/Users/user/Desktop/example/ch10/example10_7.RD
ata")
> load("C:/Users/user/Desktop/example/ch10/example10_7.RData")
> head(example10_7)
# 建立一元迴歸模型
> model_s<-lm(日均營業額~用餐平均支出,data=example10_7)
> summary(model_s)

# 變異數分析表
> anova(model_s)

# 日均營業額與用餐平均支出和交通方便程度的二元迴歸
> model_dummy<-lm(日均營業額~用餐平均支出+交通方便程度,data=example10_7)
> summary(model_dummy)

# 變異數分析表
> anova(model_dummy)
# 預測值和預測殘差
> pre_model_dummy<-model_dummy$fitted.values
> res_model_dummy<-model_dummy$residuals
> mysummary<-data.frame(example10_7,點預測值=pre_model_dummy,殘差
=res_model_dummy)
> mysummary

設定虛無假設與對立假設 H0:β2=0、H1:β2≠0
# 用 anova 對只含有用餐平均支出一個變數和增加交通方便程度虛擬變數的迴歸模型進行比較
> anova(model_s,model_dummy)

0.009889 < 0.05,拒絕 H0。

# 用 AIC 準則對只含有用餐平均支出一個變數和增加交通方便程度虛擬變數的迴歸模型進行比較
> AIC(model_s,model_dummy)

You might also like