2016年11月20日 星期日

【R】Linear Regression 練習

       在統計學中,線性回歸 (Linear Regression) 是利用最小平方法(OLS, Ordinary Least Squares),對一個或多個自變數和應變數進行線性關係的建模,簡單的模型函數如下




        其中x是自變數(Independent variables), y是應變數(Dependent variables), 這條線性方程式所代表的意涵即是觀察x的變動會造成y如何變動的關係,所以b代表的即是常數項,以及不同x帶給y影響程度地權數。


        以下我們從中華民國統計資訊網(www.stat.gov.tw),抓來台灣1981~2015年CPI指數的歷史資料,並用R來做個簡單的線性回歸建模。



➤第一步:讀取資料
我們先將資料整理成csv的格式方便讀取,並將資料檔存放於指定的資料夾(建議資料夾的路徑都是英文的比較不會出問題XD),我們用R將資料讀入,並簡單的跑出散步圖。


setwd("D:/Data analysis/R/Blog/linear")
cpi = read.csv("PR0101A2Ac.csv",header = TRUE)
with(cpi,{plot(year,cpi)}




➤第二步:建立線性回歸模型



接著我們以cpi 為應變數,year為自變數來建立線性回歸模型,就是我們想要建立一個像以上這樣的線性方程式。
cpilm =lm(cpi~year,cpi)
cpilm
summary(cpilm)
Coefficients:
(Intercept) year
-2724.117 1.405
Residuals:
Min 1Q Median 3Q Max
-5.1779 -1.5702 -0.8694 1.2684 5.8513
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.724e+03 9.733e+01 -27.99 <2e-16 ***
year 1.405e+00 4.872e-02 28.84 <2e-16 ***
---
Signif. codes: 0 ?**?0.001 ?*?0.01 ??0.05 ??0.1 ??1
Residual standard error: 2.911 on 33 degrees of freedom
Multiple R-squared: 0.9618, Adjusted R-squared: 0.9607
F-statistic: 831.9 on 1 and 33 DF, p-value: < 2.2e-16
從結果可以看出我們的線性回歸式為cpi= -2724.117+1.405*year, 並且在Summary裡可以看到這個模型的R-squared 相當的高,表示這個線性模型具有相當好的解釋能力。我們將這條線性方程式畫在資料分布圖上來看看,似乎還蠻有模有樣的。


➤第三步:預測
完成此線性回歸建模之後呢,建模的目的就是要來預測!以下我們來用此簡易的線性回歸模型預測一下2016年的CPI指數為何。
cpi2016 = cpilm$coefficients[[1]] + cpilm$coefficients[[2]]*2016
cpi2016
 
[1] 108.5606
上面是直接用數學計算的方式直接將2016數字帶入,並計算得到結果,我們也可以用預測的方式,直接預測2016~2020年的CPI,這樣就不用一個一個丟進去公式計算啦~
data201620 = data.frame(year = 2016:2020)
cpii201620 = predict(cpilm, newdata = data201620)
style = c(rep(1,35),rep(2,5))
plot(c(cpi$cpi,cpii201620),xaxt="n",ylab="CPI",xlab="",pch=style,col=style)
axis(1,at=1:40,las = 3,labels = c(1981:2020))
我們順便將預測的結果畫在圖上,結果發現我國的CPI年年高升阿...不過用這樣的一個資料來進行線性建模其實是有問題的,因為用西元年來預測CPI當然是會年年高升啊! 故在這邊就只是當作R的線性建模簡單練習囉~