用R語言 做回歸分析


使用R做回歸分析整體上是比較常規的一類數據分析內容,下面我們具體的了解用R語言做回歸分析的過程。

首先,我們先構造一個分析的數據集

x<-data.frame(y=c(102,115,124,135,148,156,162,176,183,195),
              var1=runif(10,min=1,max=50),
              var2=runif(10,min=100,max=200),
              var3=c(235,321,412,511,654,745,821,932,1020,1123))

接下來,我們進行簡單的一元回歸分析,選擇y作為因變量,var1作為自變量。

一元線性回歸的簡單原理:假設有關系y=c+bx+e,其中c+bx 是y隨x變化的部分,e是隨機誤差。可以很容易的用函數lm()求出回歸參數b,c並作相應的假設檢驗。

model<-lm(y~var1,data=x)
summary(model)

Call:
lm(formula = x$y ~ x$var1 + 1)

Residuals:
Min 1Q Median 3Q Max
-47.630 -18.654 -3.089 21.889 52.326

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 168.4453 15.2812 11.023 1.96e-09 ***
x$var1 -0.4947 0.4747 -1.042 0.311

Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 30.98 on 18 degrees of freedom
Multiple R-squared: 0.05692, Adjusted R-squared: 0.004525
F-statistic: 1.086 on 1 and 18 DF, p-value: 0.3111

從回歸的結果來看,p值為0.311,變量var1不不顯著,正常情況下p值小於0.05則認為有高的顯著性水平。
另外,R方位0.05692 距離1太遠,說明兩者之間不存在相關性。

我們進一步也對,y和var3做線性回歸分析

model<-lm(y~var3,data=x)
summary(model)

Call:
lm(formula = y ~ var3, data = x)

Residuals:
Min 1Q Median 3Q Max
-3.0805 -0.9080 0.6566 1.0255 2.1451

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 81.431990 1.399442 58.19 8.45e-12 ***
var3 0.100632 0.001902 52.92 1.80e-11 ***

Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.73 on 8 degrees of freedom
Multiple R-squared: 0.9972, Adjusted R-squared: 0.9968
F-statistic: 2801 on 1 and 8 DF, p-value: 1.802e-11

從結果來看,常數項和var3的顯著性水平都非常理想,同事R方達到0.99,整個模型的擬合度很高,可以說明兩者間存在強的線性相關。

接下來,我們可以利用這個模型做些預測

pre<-data.frame(var3=c(56,36))
predict(model,pre,interval="prediction",level=0.95)

   fit      lwr      upr

1 87.06737 82.07491 92.05983
2 85.05474 80.01387 90.09560

以上是預測結果

接下來,我們進一步了解下多元線性回歸,多元線性回歸是在y與多個自變量之間建立模型,尋找他們之間的線性關系。

在多元回歸分析過程中,由於我們不知道因變量和那幾個自變量之間存在線性關系,如果一個一個的檢驗,整個過程將變得非常繁瑣。
好在R中有自動進行逐步回歸的函數,我們只要根據函數運行結果,選擇合適模型,並檢驗各項參數就可以了。

接下來,看下具體的步驟,還是以之前的數據集作為分析樣本,我們來了解下,如何進行逐步回歸分析

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

Call:
lm(formula = y ~ ., data = x)

Residuals:
Min 1Q Median 3Q Max
-2.6684 -1.0831 0.5114 1.1158 2.3292

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 83.620109 5.047503 16.567 3.08e-06 ***
var1 -0.028906 0.057383 -0.504 0.632
var2 -0.009072 0.027438 -0.331 0.752
var3 0.100484 0.002414 41.621 1.29e-08 ***

Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.936 on 6 degrees of freedom
Multiple R-squared: 0.9973, Adjusted R-squared: 0.996
F-statistic: 745.2 on 3 and 6 DF, p-value: 4.191e-08

這里我們對y與所有自變量進行回歸的結果來看,var1和var2的效果不顯著,var3的顯著性水平較高,說明這個模型並不是最優解。

mstep<-step(model)

Start: AIC=16.11
y ~ var1 + var2 + var3

   Df Sum of Sq    RSS    AIC
  • var2 1 0.4 22.9 14.286
  • var1 1 1.0 23.4 14.520
    22.5 16.105
  • var3 1 6493.5 6516.0 70.794

Step: AIC=14.29
y ~ var1 + var3

   Df Sum of Sq    RSS    AIC
  • var1 1 1.0 23.9 12.727
    22.9 14.286
  • var3 1 8136.6 8159.5 71.044

Step: AIC=12.73
y ~ var3

   Df Sum of Sq    RSS    AIC

23.9 12.727

  • var3 1 8378.5 8402.4 69.337

從結果的AIC現象來看,最后一個只有y和var3進行回歸時,AIC值最小,(注:逐步回歸過程中,AIC值越小,說明模型的擬合度越好)

依據這個信息我們就可以建立模型model<-lm(y~var3,data=x)

當然,由於數據集的相對比較簡單的關系,這里逐步回歸的結果比較明顯,現實的情況可能更為復雜,需要我們進行進一步的檢驗以及手動剔除參數等操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM