R で予測区間を作成する方法


線形回帰モデルは、次の 2 つのことに役立ちます。

(1) 1 つ以上の予測変数と応答変数の間の関係を定量化します。

(2)モデルを使用して将来の値を予測します。

(2)に関しては、回帰モデルを使用して将来の値を予測する場合、多くの場合、正確な値と、可能性の高い値の範囲を含む区間の両方を予測したいと考えます。この間隔は、予測間隔と呼ばれます。

たとえば、学習時間を予測変数として、試験のスコアを応答変数として使用して、単純な線形回帰モデルを当てはめるとします。このモデルを使用すると、6 時間勉強した生徒は試験で91 点を獲得すると予測できます。

ただし、この予測には不確実性があるため、6 時間勉強した生徒が8597点の試験スコアを獲得する確率が 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 の新車の場合、 mpg23.41759になると予想されます。
  • EPAが 200 の新車の場合、 mpg21.35683になると予想されます。
  • EPAが 250 の新車の場合、 mpg19.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.6296830.20549です。
  • EPAが 200 の自動車の 95% mpg予測間隔は、 14.6070428.10662です。
  • EPAが 250 の車の 95% mpg予測間隔は、 12.5502126.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

信頼区間と予測区間をいつ使用するか

予測間隔は、単一の値に関する不確実性を捉えます。信頼区間は、予測平均値周辺の不確実性を捉えます。したがって、同じ値に対する予測区間は常に信頼区間よりも広くなります。

特定の個々の予測に関心がある場合は、予測区間を使用する必要があります。これは、信頼区間では生成される値の範囲が狭すぎるため、区間に真の値が含まれない可能性が高くなるためです。

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です