Як створити інтервал передбачення в r
Модель лінійної регресії може бути корисною для двох речей:
(1) Кількісно визначити зв’язок між однією або декількома змінними предиктора та змінною відповіді.
(2) Використовуйте модель для прогнозування майбутніх цінностей.
Що стосується (2) , коли ми використовуємо регресійну модель для прогнозування майбутніх значень, ми часто хочемо передбачити як точне значення , так і інтервал , що містить діапазон імовірних значень. Цей інтервал називається інтервалом передбачення .
Наприклад, припустімо, що ми використовуємо просту модель лінійної регресії, використовуючи вивчені години як змінну прогностичну величину та оцінки за іспит як змінну відповіді. Використовуючи цю модель, ми могли передбачити, що студент, який навчається 6 годин, отримає 91 бал на іспиті.
Однак, оскільки існує невизначеність навколо цього прогнозу, ми можемо створити інтервал прогнозу, який вказує на 95% ймовірність того, що студент, який навчається протягом 6 годин, отримає оцінку на іспиті від 85 до 97 . Цей діапазон значень відомий як 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
Далі ми використаємо підігнану регресійну модель, щоб передбачити значення mpg на основі трьох нових значень disp .
#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 ми очікуємо, що він матиме 23,41759 миль на галон .
- Для нового автомобіля з EPA 200 ми очікуємо, що він матиме 21,35683 милі на галон .
- Для нового автомобіля з EPA 250 ми очікуємо, що він матиме 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
Спосіб інтерпретації цих значень наступний:
- Інтервал прогнозування 95% миль на галон для автомобіля з EPA 150 знаходиться між 16,62968 і 30,20549 .
- Інтервал прогнозування 95% миль на галлон для автомобіля з EPA 200 знаходиться між 14,60704 і 28,10662 .
- Інтервал прогнозування 95% миль на галон для автомобіля з EPA 250 знаходиться між 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
Наступний код демонструє, як створити діаграму з такими функціями:
- Діаграма розсіювання точок даних для доступності та миль на галон
- Синя лінія для підігнаної лінії регресії
- Сірі смуги довіри
- Червоні смуги передбачення
#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
Коли використовувати довірчий інтервал чи інтервал передбачення
Інтервал передбачення фіксує невизначеність навколо одного значення. Довірчий інтервал фіксує невизначеність навколо прогнозованих середніх значень. Таким чином, інтервал передбачення завжди буде ширшим, ніж довірчий інтервал для того самого значення.
Ви повинні використовувати інтервал передбачення, коли вас цікавлять конкретні окремі передбачення, оскільки довірчий інтервал дасть занадто вузький діапазон значень, що призведе до більшої ймовірності того, що інтервал не міститиме справжнього значення.