Как визуализировать прогноз линейной модели в ggplot вместе с доверительным интервалом?

Предположим, я использую my_df для соответствия линейной модели. После получения оценок я хочу увидеть, насколько хорошо model1 может предсказать n случаев другого набора данных. Я не уверен, что это правильный способ визуализировать это и как я могу добавить связи доверительного интервала на основе оценок модели 1.

#Make up a dataframe and perform a linear model
res <- c(2,3.1,4.5,5.1,6.5,7.1,8.5,9.11,10.1,11.8,12.3) 
predictor1 <- c(4.2, 5.3, 5.68,6.5, 7.77,8.5,9.5, 10.18,11.64,12.15,14.19) 
predictor2 <- c(3.1, 5.2, 6.3,7.1, 9.7,11.5,12.99, 14.5 ,15.5,16.41,17.6)
my_df <- data.frame(res, predictor1, predictor2)

 model1<- lm(res~predictor1+predictor2,data = my_df)
#____Another dataset
response<- c(12.5,13.5,14.65,16.1,16.5,17.22,18.54,21.31,23.61,25.58,26.43) 
x1<- c(14.21, 15.13, 16.25,16.5, 17.37,18.51,19.35, 22.18,23.64,25.12,26.19) 
x2<- c(13.11, 15.22, 16.23,17.41, 18.72,21.5,22.99, 24.35 ,25.15,26.21,28.5)
 observeddata <- data.frame(y, x1, x2)
 #I need to check how model1 predicts the response based on the two new predictors(x1&x2) using the estimates of model1

observeddata$prediction<- predict(model1, newdata = observeddata)

#is this a good way to visulize how good or bad model1 works in case of  second dataset?
 ggplot(data=observeddata, aes(x=prediction,y=response))+ geom_point() 
#How can I add confidence interval in this plot? 
#based on what @alistaire suggested I get something like this in case of my  dataset, am I doing it right?!!!

Шумная лента


person Jack    schedule 18.12.2016    source источник


Ответы (1)


Если вы перевернете оси, вы можете использовать geom_ribbon. Вы можете получить необходимые числа от predict, если скажете, что вам тоже нужен доверительный интервал:

library(ggplot2)

my_df <- data.frame(
    res = c(2,3.1,4.5,5.1,6.5,7.1,8.5,9.11,10.1,11.8,12.3), 
    predictor1 = c(4.2, 5.3, 5.68,6.5, 7.77,8.5,9.5, 10.18,11.64,12.15,14.19), 
    predictor2 = c(3.1, 5.2, 6.3,7.1, 9.7,11.5,12.99, 14.5 ,15.5,16.41,17.6))

model1<- lm(res ~ predictor1 + predictor2, data = my_df)

#____Another dataset
observeddata <- data.frame(
    response = c(12.5,13.5,14.65,16.1,16.5,17.22,18.54,21.31,23.61,25.58,26.43), 
    predictor1 = c(14.21, 15.13, 16.25,16.5, 17.37,18.51,19.35, 22.18,23.64,25.12,26.19), 
    predictor2 = c(13.11, 15.22, 16.23,17.41, 18.72,21.5,22.99, 24.35 ,25.15,26.21,28.5))

# adds 3 columns (fit, lwr, upr), so use `cbind` instead of just adding a column
observeddata <- cbind(observeddata, 
                      predict(model1, newdata = observeddata, interval = 'confidence'))

                            # add extra aesthetics for geom_ribbon
ggplot(data = observeddata, aes(x = response, y = fit, ymin = lwr, ymax = upr)) + 
    geom_point() + 
    geom_ribbon(alpha = .3)    # set opacity so points are visible

Если вы действительно хотите, чтобы ваши топоры были такими, какими они были, добавьте coord_flip.

person alistaire    schedule 18.12.2016
comment
И если большая часть ваших данных находится за пределами темной зоны, вы можете сделать вывод, что модель не очень хорошо предсказывает, верно? Является ли это типичным способом изображения предсказательной способности модели? - person Jack; 18.12.2016
comment
Не совсем. Чтобы определить, является ли это хорошей моделью, вас в конечном итоге заботит ошибка теста. Поскольку вы строите график фактического и прогнозируемого, вы хотите, чтобы этот график выровнялся по линии y = x. Значения R ^ 2 и p помогают указать вам в правильном направлении, как и графики остатка. - person alistaire; 18.12.2016
comment
Спасибо @alistaire за вашу помощь. Я всегда считал, что хорошо работающая модель имеет диаграмму рассеивания соответствия Vs. наблюдается очень близко к линии 1: 1. Очевидно, это неправильный способ оценки предсказательной силы модели, не так ли? - person Jack; 18.12.2016
comment
В некотором смысле это так, потому что это означает, что ваши остатки невелики. Однако часто бывает полезно иметь число, чтобы сказать вам, насколько оно близко, то есть RMSE. Как узнать, хороша ли моя модель, - это большой вопрос, но, возможно, она лучше подходит для CrossValidated. - person alistaire; 18.12.2016