R で予測区間を作成する方法
線形回帰モデルは、次の 2 つのことに役立ちます。
(1) 1 つ以上の予測変数と応答変数の間の関係を定量化します。
(2)モデルを使用して将来の値を予測します。
(2)に関しては、回帰モデルを使用して将来の値を予測する場合、多くの場合、正確な値と、可能性の高い値の範囲を含む区間の両方を予測したいと考えます。この間隔は、予測間隔と呼ばれます。
たとえば、学習時間を予測変数として、試験のスコアを応答変数として使用して、単純な線形回帰モデルを当てはめるとします。このモデルを使用すると、6 時間勉強した生徒は試験で91 点を獲得すると予測できます。
ただし、この予測には不確実性があるため、6 時間勉強した生徒が85 ~ 97点の試験スコアを獲得する確率が 95% であることを示す予測区間を作成できます。この値の範囲は 95% 予測間隔として知られており、多くの場合、正確な予測値を知ることよりも役立ちます。
R で予測区間を作成する方法
R で予測区間を作成する方法を説明するために、いくつかの異なる車の特性に関する情報が含まれる組み込みのmtcarsデータセットを使用します。
#view first six rows of mtcars head(mtcars) # mpg cyl disp hp drat wt qsec vs am gear carb #Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 #Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 #Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 #Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
まず、予測変数としてdispを使用し、応答変数としてmpg を使用して単純な線形回帰モデルを近似します。
#fit simple linear regression model model <- lm(mpg ~ disp, data = mtcars) #view summary of fitted model summary(model) #Call: #lm(formula = mpg ~ availability, data = mtcars) # #Residuals: # Min 1Q Median 3Q Max #-4.8922 -2.2022 -0.9631 1.6272 7.2305 # #Coefficients: #Estimate Std. Error t value Pr(>|t|) #(Intercept) 29.599855 1.229720 24.070 < 2e-16 *** #disp -0.041215 0.004712 -8.747 9.38e-10 *** #--- #Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # #Residual standard error: 3.251 on 30 degrees of freedom #Multiple R-squared: 0.7183, Adjusted R-squared: 0.709 #F-statistic: 76.51 on 1 and 30 DF, p-value: 9.38e-10
次に、適合回帰モデルを使用して、 dispの 3 つの新しい値に基づいてmpgの値を予測します。
#create data frame with three new values for avail new_disp <- data.frame(disp= c(150, 200, 250)) #use the fitted model to predict the value for mpg based on the three new values #for avail predict(model, newdata = new_disp) #1 2 3 #23.41759 21.35683 19.29607
これらの値を解釈する方法は次のとおりです。
- EPAが 150 の新車の場合、 mpgは23.41759になると予想されます。
- EPAが 200 の新車の場合、 mpgは21.35683になると予想されます。
- EPAが 250 の新車の場合、 mpgは19.29607になると予想されます。
次に、近似回帰モデルを使用して、これらの予測値の周囲の予測区間を作成します。
#create prediction intervals around the predicted values predict(model, newdata = new_disp, interval = " predict ") # fit lwr upr #1 23.41759 16.62968 30.20549 #2 21.35683 14.60704 28.10662 #3 19.29607 12.55021 26.04194
これらの値を解釈する方法は次のとおりです。
- EPAが 150 の車の 95% mpg予測間隔は、 16.62968 ~ 30.20549です。
- EPAが 200 の自動車の 95% mpg予測間隔は、 14.60704 ~ 28.10662です。
- EPAが 250 の車の 95% mpg予測間隔は、 12.55021 ~ 26.04194です。
デフォルトでは、R は 95% の予測間隔を使用します。ただし、 levelコマンドを使用して、これを必要に応じて変更できます。たとえば、次のコードは、99% の予測区間を作成する方法を示しています。
#create 99% prediction intervals around the predicted values predict(model, newdata = new_disp, interval = " predict ", level = 0.99 ) # fit lwr upr #1 23.41759 14.27742 32.55775 #2 21.35683 12.26799 30.44567 #3 19.29607 10.21252 28.37963
99% 予測間隔は 95% 予測間隔よりも広いことに注意してください。間隔が広いほど、予測値が含まれる可能性が高くなるため、これは理にかなっています。
R で予測区間を視覚化する方法
次のコードは、次の機能を備えたグラフを作成する方法を示しています。
- 可用性とmpgのデータポイントの散布図
- 近似回帰直線の青い線
- 灰色の信頼帯
- 赤い予測バンド
#define dataset data <- mtcars[, c("mpg", "disp")] #create simple linear regression model model <- lm(mpg ~ disp, data = mtcars) #use model to create prediction intervals predictions <- predict(model, interval = " predict ") #create dataset that contains original data along with prediction intervals all_data <- cbind(data, predictions) #load ggplot2 library library(ggplot2) #createplot ggplot(all_data, aes(x = disp, y = mpg)) + #define x and y axis variables geom_point() + #add scatterplot points stat_smooth(method = lm) + #confidence bands geom_line(aes(y = lwr), col = "coral2", linetype = "dashed") + #lwr pred interval geom_line(aes(y = upr), col = "coral2", linetype = "dashed") #upr pred interval
信頼区間と予測区間をいつ使用するか
予測間隔は、単一の値に関する不確実性を捉えます。信頼区間は、予測平均値周辺の不確実性を捉えます。したがって、同じ値に対する予測区間は常に信頼区間よりも広くなります。
特定の個々の予測に関心がある場合は、予測区間を使用する必要があります。これは、信頼区間では生成される値の範囲が狭すぎるため、区間に真の値が含まれない可能性が高くなるためです。