線性回歸的主要目的是根據(jù)一個或多個預(yù)測變量(自變量)預(yù)測一個結(jié)果值。本文會討論如何使用R來預(yù)測新觀測值的結(jié)果毒嫡。你也將學習如何展示置信區(qū)間和預(yù)測的區(qū)間。
構(gòu)建線性回歸
我們首先構(gòu)建一個基于汽車速度預(yù)測剎車距離的線性回歸模型。
# Load the data
data("cars", package = "datasets")
# Build the model
model <- lm(dist ~ speed, data = cars)
model
#>
#> Call:
#> lm(formula = dist ~ speed, data = cars)
#>
#> Coefficients:
#> (Intercept) speed
#> -17.58 3.93
因此線性模型公式可以寫作: dist = -17.579 + 3.932*speed
.
公式中兩個變量的單位需要注意
新數(shù)據(jù)集的預(yù)測
使用上面的模型舞吭,我們可以為一個新的速度值預(yù)測剎車距離。
首先創(chuàng)建一個新的數(shù)據(jù)框析珊,它必須包含新的數(shù)據(jù)值羡鸥,比如3個新的速度值,變量名要保持一致:
new.speeds <- data.frame(
speed = c(12, 19, 24)
)
通過R函數(shù)predict()
忠寻,我們可以進行新剎車距離的預(yù)測:
predict(model, newdata = new.speeds)
#> 1 2 3
#> 29.6 57.1 76.8
置信區(qū)間
置信區(qū)間反應(yīng)了均值預(yù)測的不確定性惧浴。想要展示預(yù)測均值的95%置信區(qū)間,指定選項interval = "confidence"
:
predict(model, newdata = new.speeds, interval = "confidence")
#> fit lwr upr
#> 1 29.6 24.4 34.8
#> 2 57.1 51.8 62.4
#> 3 76.8 68.4 85.2
輸出包含下面一些列:
-
fit
: 預(yù)測的均值 -
lwr
和upr
: 預(yù)測均值的下邊界與上邊界奕剃,默認是95%置信區(qū)間
該如何解釋呢衷旅?例如,速度為19時的95%置信區(qū)間是 (51.83, 62.44)纵朋。這意味著根據(jù)我們的模型芜茵,一個以19 mph速度行駛的汽車,它的剎車距離平均水平在 51.83到62.44 ft范圍內(nèi)倡蝙。
預(yù)測區(qū)間
預(yù)測區(qū)間給出了單個值得不確定性九串。跟計算置信區(qū)間方式相同,我們可以用一下代碼計算預(yù)測區(qū)間:
predict(model, newdata = new.speeds, interval = "prediction")
#> fit lwr upr
#> 1 29.6 -1.75 61.0
#> 2 57.1 25.76 88.5
#> 3 76.8 44.75 108.8
跟速度為19關(guān)聯(lián)的95%預(yù)測區(qū)間是(25.76, 88.51)寺鸥。這意味著猪钮,根據(jù)我們的模型,95%的以19 mph速度行駛的車的剎車距離在25.76和88.51之間胆建。
注意預(yù)測區(qū)間非常依賴殘差服從正態(tài)分布的假設(shè)烤低。因此,如果你確定手里的數(shù)據(jù)基本滿足這個假設(shè)才能使用它笆载。
預(yù)測區(qū)間或置信區(qū)間扑馁?
一個預(yù)測區(qū)間反映了單個數(shù)值的不確定性涯呻,而一個置信區(qū)間反映了預(yù)測均值的不確定性。因此腻要,一般而言复罐,對同樣的值,預(yù)測區(qū)間的范圍都比置信區(qū)間大雄家。
我們應(yīng)該使用哪一種呢效诅?這個問題的答案依賴分析的語境和目的。通常講趟济,我們隊特定的單個預(yù)測感興趣乱投,這時候預(yù)測區(qū)間會比較合適。在你該使用預(yù)測區(qū)間時卻使用了置信區(qū)間會極大地低估給定預(yù)測值的不確定性(P. Bruce and Bruce 2017)顷编。
下面的R代碼創(chuàng)建一個散點圖戚炫,并帶有:
- 藍色的回歸線
- 灰色的置信區(qū)間
- 紅色的預(yù)測區(qū)間
# 0. Build linear model
data("cars", package = "datasets")
model <- lm(dist ~ speed, data = cars)
# 1. Add predictions
pred.int <- predict(model, interval = "prediction")
#> Warning in predict.lm(model, interval = "prediction"): predictions on current data refer to _future_ responses
mydata <- cbind(cars, pred.int)
# 2. Regression line + confidence intervals
library("ggplot2")
p <- ggplot(mydata, aes(speed, dist)) +
geom_point() +
stat_smooth(method = lm)
# 3. Add prediction intervals
p + geom_line(aes(y = lwr), color = "red", linetype = "dashed")+
geom_line(aes(y = upr), color = "red", linetype = "dashed")
參考文獻
Bruce, Peter, and Andrew Bruce. 2017. Practical Statistics for Data Scientists. O’Reilly Media.
文章作者 王詩翔
上次更新 2018-09-30
許可協(xié)議 CC BY-NC-ND 4.0