Predict.lm() в R - как получить непостоянные полосы прогноза вокруг установленных значений
Итак, в настоящее время я пытаюсь сделать доверительный интервал для линейной модели. Я узнал, что для этого должен использовать pred.liz(), но у меня есть несколько проблем, которые действительно понимают функцию, и мне не нравятся функции, не зная, что происходит. Я нашел несколько советов по этому вопросу, но только с соответствующим R-кодом, никаких реальных объяснений.
Это сама функция:
## S3 method for class 'lm'
predict(object, newdata, se.fit = FALSE, scale = NULL, df = Inf,
interval = c("none", "confidence", "prediction"),
level = 0.95, type = c("response", "terms"),
terms = NULL, na.action = na.pass,
pred.var = res.var/weights, weights = 1, ...)
Теперь, что мне трудно понять:
1) newdata
An optional data frame in which to look for variables
with which to predict. If omitted, the fitted values are used.
-
Кажется, что для этого используются новые данные, но я не могу понять, почему. Для расчета доверительного интервала мне, очевидно, нужны данные, для которых этот интервал (например, # наблюдений, среднее значение x и т.д.), Поэтому не может быть того, что подразумевается под ним. Но тогда: что это значит?
2) interval
Type of interval calculation.
-
ладно.. но что такое "нет"?
3a) type
Type of prediction (response or model term).
3b) terms
If type="terms", which terms (default is all terms)
-
3a: Могу ли я этим получить доверительный интервал для одной конкретной переменной в моей модели? И если да, то для чего тогда 3b? Если я могу указать термин в 3a, это не имеет смысла делать это снова в 3b.. поэтому, я думаю, я снова ошибаюсь, но я не могу понять, почему.
Я думаю, некоторые из вас могут подумать: почему бы просто не попробовать это? И я бы (даже если бы это могло бы не решить все здесь), но я прямо сейчас не знаю, как это сделать. Поскольку я не сейчас, для чего нужны newdata, я не знаю, как его использовать, и если я попытаюсь, я не получу правильный доверительный интервал. Как-то очень важно, как вы выбираете эти данные, но я просто не понимаю!
EDIT: Я хочу добавить, что мое намерение - понять, как работает sched.lm. Под этим я подразумеваю, что не понимаю, работает ли это так, как я думаю. То есть он вычисляет y-hat (предсказанные значения), а затем использует добавление/вычитание для каждой границы upr/lwr интервала для вычисления нескольких точек данных (тогда выглядит как доверительная линия)? Тогда я бы предпочел, почему необходимо иметь такую же длину в newdata, что и в линейной модели.
Ответы
Ответ 1
Составьте некоторые данные:
d <- data.frame(x=c(1,4,5,7),
y=c(0.8,4.2,4.7,8))
Установите модель:
lm1 <- lm(y~x,data=d)
Интервалы доверия и прогнозирования с исходными значениями x:
p_conf1 <- predict(lm1,interval="confidence")
p_pred1 <- predict(lm1,interval="prediction")
Conf. и пред. интервалы с новыми значениями x (экстраполяция и более мелкие/равномерные интервалы, чем исходные данные):
nd <- data.frame(x=seq(0,8,length=51))
p_conf2 <- predict(lm1,interval="confidence",newdata=nd)
p_pred2 <- predict(lm1,interval="prediction",newdata=nd)
Сплоть все вместе:
par(las=1,bty="l") ## cosmetics
plot(y~x,data=d,ylim=c(-5,12),xlim=c(0,8)) ## data
abline(lm1) ## fit
matlines(d$x,p_conf1[,c("lwr","upr")],col=2,lty=1,type="b",pch="+")
matlines(d$x,p_pred1[,c("lwr","upr")],col=2,lty=2,type="b",pch=1)
matlines(nd$x,p_conf2[,c("lwr","upr")],col=4,lty=1,type="b",pch="+")
matlines(nd$x,p_pred2[,c("lwr","upr")],col=4,lty=2,type="b",pch=1)
![введите описание изображения здесь]()
Использование новых данных позволяет экстраполяцию за пределы исходных данных; Кроме того, если исходные данные имеют рассеянное или неравномерное расстояние, интервалы прогнозирования (которые не являются прямыми линиями) могут быть недостаточно аппроксимированы линейной интерполяцией между исходными значениями х...
Я не совсем уверен, что вы подразумеваете под "доверительным интервалом для одной конкретной переменной в моей модели"; если вам нужны доверительные интервалы для параметра, то вы должны использовать confint
. Если вы хотите предсказания изменений, основанные только на некоторых изменениях параметров (игнорируя неопределенность из-за других параметров), вы действительно хотите использовать type="terms"
.
interval="none"
(по умолчанию) просто говорит R не беспокоить вычисление любых интервалов уверенности или прогноза и возвращать только предсказанные значения.