前言
這篇文章主要用簡單的線性迴歸模型來介紹統計學中一些很重要的概念。比如:置信區間(confidence interval)、t-statistic、p-value、
數據分析之前的幾個重要問題
在提出問題之前,我先介紹一下Advertising數據集。數據集包含了200個不同市場的產品銷售額,每個銷售額對應3種廣告媒體,分別是:TV, radio, 和 newspaper
如果我們能分析出廣告媒體與銷售額之間的關係,我們就可以更好地分配廣告開支並且使銷售額最大化。換句話說:我們的目標是開發出一個基於這3個廣告媒體,準確預測銷售額的模型。
下面,我提出幾個問題,有着這些問題目標,我們的數據分析纔有意義。
- 廣告預算與銷售額之間存在關係嗎?
- 如果存在關係,它們之間的關係有多強?
- 哪個媒體與銷售額之間存在關係?
- 每個媒體對銷售額有多大的影響?
- 我們對未來銷售額的預測有多準確?
這篇文章中,我們假設線性模型是正確的,銷售額之間是不存在協同關係的。在以後的文章中,我會寫這些問題的。
估算線性迴歸係數並評估其準確性
爲了清楚地解釋一些統計學上的概念,在這裏我只用最簡單的線性迴歸,也就是隻有一個變量的模型。定義如下模型:
在用R估算兩個係數之前,我先給出residual sum of squares(RSS)的定義。如下:
least squares方法就是選擇出最好的
adver <- read.csv("Advertising.csv",colClasses=c("NULL",NA,NA,NA,NA)) # 讀取Advertising數據集,跳過第一列
fitadver=lm(Sales~TV,data=adver) # 用線性迴歸fit
coef(fitadver) # 查看估算出的係數
# plot數據點和已經估算出的線,圖形如下
plot(adver$TV, adver$Sales, col="red", xlab='TV', ylab='sales')
abline(fit1)
PS:如果你想保存你的Plots作爲圖片,下面的代碼就行,具體其它的格式請參考Saving Plots in R
dev.copy(png,'myplot.png')
dev.off()
爲了更好地分析數據,下面給大家來點理論知識吧。哈哈!!!
上面我們已經估算出了相應的係數,可是這個係數有多麼準確呢?爲了更好地解釋這個,我先舉個例子。假設我們有一個隨機變量Y,我們想找出它的平均值
我們已經知道把很多數據集上估算的值平均下來會很接近真正的
由上面的公式我們可以看出,其實求的就是
- 上面的
σ2=Var(ϵ) - 爲了使公式嚴格地成立,我們需要假設每個observation的誤差
ϵi 是不相關的
通過上面求出的standard error,我們可以用它來計算confidence intervals.對於
大約有95%的機會真正的
confint(fitadver)
# 輸出結果如下
2.5 % 97.5 %
(Intercept) 6.12971927 7.93546783
TV 0.04223072 0.05284256
從上面的結果我們可以得出,對於
standard error也可以對係數執行hypothesis tests.最普遍的假設是null
hypothesis(
爲了判斷上面的假設是否正確,下面我來介紹一下t-statistic和p-value這兩個概念。爲了拒絕null hypothesis我們需要判斷
上面的公式度量的實際是
下面,我來用具體的R代碼來打印上面模型係數的t-statistic和p-value
summary(fitadver)
# 輸出結果如下
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.032594 0.457843 15.36 <2e-16 ***
TV 0.047537 0.002691 17.67 <2e-16 ***
由於t-statistic的值爲係數和其對應的standard error的比值,而
評估模型的準確性
上面我們已經解釋了估算出的係數的準確性,predictor和response之間是否有關係。下面,我們來解釋一下估算出係數以後,整個模型的準備性到底怎麼樣?此時,你可能會想,只要我們的係數估算的準確,那模型正確率就是100%啊,但事實並非如此。其實我們的數據集來自的模型是這樣的:
因此,我們要從現有的數據集中來評估模型的準確性。下面,我給出residual standard error(RSE)的定義:
實際上,RSE就是
(預測值)偏離真正迴歸線的平均值。
回到我們上面的那個例子中,還是用summary那個R命令,我們就可以打印出求得的RSE爲3.259。
如果預測值非常接近真實值,那麼RSE將會很小,因此我們可以得出模型非常好在擬合了數據。然而,如果一個或多個observations的預測值和真實值相距很遠,那麼RSE會非常大,這表明模型並沒有很好地擬合數據。
RSE是一種絕對的度量關於模型fit數據的不足。由於它的度量是以預測和真實值之間的絕對差異的形式進行的,因此什麼樣的RSE是一個好的RSE不總是清晰的。下面,我來介紹
TSS=∑(yi−y¯)2 ,叫做total sum of squares(TSS)
TSS測量的是關於response的總方差,可以把它當作是在線性迴歸執行前,內在變化性總量。而RSS測量的是在線性迴歸執行後,剩下未解釋的變化性總量。因此,TSS − RSS測量的是通過執行線性迴歸,response中被解釋的變化性總量。
在我們上面的例子中,
多元線性迴歸
現在,我們已經知道了一些統計學的概念。下面,讓我們來完善上面的模型吧。上面我用TV這一個predictor,現在我要用數據集中的所有predictors來構建模型。具體的R代碼如下:
fitall=lm(Sales~.,data=adver)
在我們執行完多元線性迴歸後,你可能會感興趣下面的幾個問題。
一、至少有一個predictors對於預測response是有用的嗎?
答:在只有一個predictor的時候,我們的
H0假設爲β1=0 。那麼現在假設我們有p個predictors,我們要把H0的假設修改爲β1=β2=⋯=βp=0 ,而Ha爲至少有一個βj≠0 。先前我們計算t-statistic,現在我們計算F-statistic,公式如下:
F=(TSS−RSS)/pRSS/(n−p−1)
如果H0 爲true,F-statistic的值接近於1;如果Ha 爲true,F-statistic將大於1.通過R中的summary命令,我們打印出上面模型的F-statistic值爲570.3,遠遠大於1,這表明有很強的現象認爲H0 爲false.也就是說,大的F-statistic表明至少有一個廣告相關於sales.
然而,到底多大的F-statistic可以認爲H0 爲false呢?答案是這取決於n和p的值。當n很大的時候,僅僅是比1大一點的F-statistic都可以認爲H0 爲false;當n很小的時候,則需要一個更大的F-statistic. 前面t-statistic有一個對應的p-value,而對於F-statistic來說,同樣有其對應的p-value,只要給定對應的n和p值,統計軟件都會幫你計算出相應的p-value值。基於這個p-value,我們可以決定是否拒絕H0
對於我們的數據集來說,F-statistic對應的p-value值非常接近於0,因此我們有強烈的跡象表明至少一個廣告與sales是相關聯的。
現在你可能會想,我們可以看每個係數對應的p-value,其中只要有一個值是非常小的,我們就可以說至少有一個predictor是相關於response的。爲什麼要費勁去計算F-statistic呢?這樣的邏輯看似合理,實際上是不對的,尤其是當predictor的數量是非常大的時候。
假設我們有100個predictor,這100個predictor沒有一個與response是相關的。但是,每一個predictor對應的p-value有5%的機會是小於0.05的。也就是說,對於100個predictor而言,我們有5個predictor對應的p-value是小的,即使在我們明知道這100個predictor沒有一個與response是相關的情況下。因此,如果我們想要用單獨的p-value去說明問題的話,那麼會有很大的機率去總結一個錯誤的結論。而F-statistic沒有這樣的弊端,它是獨立於predictor的數量的,即使在
二、哪一個predictor是重要的?
答:我們已經用F-statistic去表明至少有一個變量與response是有關聯的。接下來我們會想,哪個變量是有關聯的呢?這裏我只列出幾個經典方法的名字,有興趣的可以去Google一下具體的做法,在以後的文章我會介紹更好的方法。
1、Forward selection
2、Backward selection
3、Mixed selection
三、模型擬合數據有多好?
答:我們還是看
R2和RSE 這兩個量。
關於R2 有一點應該注意:當更多的變量加入到模型中時,即使是這些變量與response有很弱地關聯,R2 總是會增加。這是因爲加變量使least squares方法更加準確地擬合training data(即使對testing data是沒有必要的),R2 也在training data被計算,因此它一定增加。
關於先前計算RSE的公式這裏我也修正一下:
1n−p−1RSS−−−−−−−−−−−−−√
先前的公式只不過是當p=1時的特例
四、作出的預測有多麼準確?
我們這裏不討論模型是否有偏差,也就是說我們認爲線性模型是正確的。那麼現在就只剩下兩個應該考慮的問題。
- 我們的預測值與真正的
f(X) 有多麼接近? - 我們的預測值
Y^ 與真正的Y 有多麼接近?
在回答這兩個問題之前,我先介紹一點知識。
通常情況下,真正Y與X之間的關係是:
如果你理解我上面說的,confidence interval度量的就是預測值與
下面我用具體的R代碼來演示一下:
new <- data.frame(TV=c(2,3,4),Radio=c(345,23,12), Newspaper=c(45,23,2)) # 我們想要預測的新數據
predict(fitall, new, interval="confidence") # 預測的結果以及相應的confidence interval
# 輸出結果如下
fit lwr upr
1 68.026587 62.584096 73.469078
2 7.388511 6.922937 7.854086
3 5.382233 4.838660 5.925806
predict(fitall, new, interval="prediction") # 預測的結果以及相應的prediction interval
# 輸出結果如下
fit lwr upr
1 68.026587 61.649275 74.403900
2 7.388511 4.032001 10.745022
3 5.382233 2.014018 8.750449
從上面的結果我們也可以看出prediction interval的區間範圍要比confidence interval的區間範圍要寬。
文章開篇問題答案
1題答案如下:
在多元線性迴歸那節,我們計算了F-statistic,它對應的p-value值很小,這表明廣告預算與銷售額之間存在關係。
2題答案如下:
R2 statistics大約爲90%,也就是廣告媒體解釋了銷售額90%的方差。這表明廣告媒體與銷售額之間存在很強的關係。
3題答案如下:
我們可以查看每個predictor對應的p-values值。在多元線性迴歸那節,TV和radio的p-values值是低的,而newspaper不是。這表明只有TV和radio與銷售額之間存在關係。
4題答案如下:
我們看相應係數的置信區間就行了。
5題答案如下:
前面我已經解釋過了,用prediction interval和confidence interval
結尾
有需要數據集的,留言給我,看到之後我發給你。