Прогнозирование стандартных ошибок прогноза

Я новичок в R, из мира Stata. Я только что запустил линейную модель (примерно со 100 переменными, каждая с 500 точками данных или около того), например:

RegModel.3 <- lm(ordercount~timecount2+timecount4 .... expeditedrop, data=Dataset)

Теперь я хочу найти стандартную ошибку прогноза, как функция stdf в stata, для каждого из подогнанных значений.

Я пробовал следующий код:

predict(RegModel.3$fitted.values, new, se.fit=TRUE)

Но я получаю следующую ошибку:

Error in UseMethod("predict") : no applicable method for 'predict' applied to an object of class "c('double', 'numeric')"

Что я делаю неправильно? Кроме того, как мне экспортировать вывод с помощью команды write.csv аналогично тому, как я написал коэффициенты:

write.csv(RegModel.3$coefficients, file='results.csv')

Спасибо!


person Bryan    schedule 07.12.2012    source источник


Ответы (1)


Воспроизводимый пример, взятый из ?lm:

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2,10,20, labels=c("Ctl","Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)


pp <- predict(lm.D9, interval="prediction",se.fit=TRUE)

(см. ?predict.lm для справки) и

write.csv(cbind(pp$fit,stderr=pp$se.fit),file="predintervals.csv")

должен сделать это. (В этом случае все стандартные ошибки одинаковы, потому что есть один категориальный предиктор и нет непрерывного предиктора...)

PS: По возможности лучше использовать стандартные средства доступа, такие как coef() для извлечения коэффициентов или fitted() для извлечения подходящих значений, чем проникать внутрь объекта с помощью $. Попробуйте methods(class="lm"), чтобы узнать, какие средства доступа доступны.

изменить: иллюстрация того, что общий подход все еще работает с большой проблемой:

set.seed(101)
X <- matrix(runif(101*500),nrow=500)
prednames <- paste0("predictor",1:100)
X2 <- setNames(as.data.frame(X),
               c("response",prednames))
form <- reformulate(paste(prednames,collapse="+"),response="response")
fit1 <- lm(form,data=X2)
pp <- predict(fit1,interval="predict",se.fit=TRUE)
person Ben Bolker    schedule 07.12.2012
comment
Когда я использую предсказать(), я получаю следующую ошибку: Ошибка в предсказании. получить это? - person Bryan; 07.12.2012
comment
@ user1884063, пожалуйста, опубликуйте воспроизводимый пример - person Glen_b; 07.12.2012
comment
RegModel.3 является результатом линейной регрессии, созданной RegModel.3 ‹- lm(orders~timecount и т. д.) – всего с использованием 100 или около того переменных с примерно 500 наблюдениями каждая. - person Bryan; 08.12.2012
comment
мы знаем, но если это так, то он должен (?) работать. Я только что добавил пример, который показывает, как этот подход работает для проблемы размером с вашу. Итак, как указано выше, нам как минимум нужно увидеть str(RegModel.3) (что может помочь нам диагностировать проблему) или, что предпочтительнее, воспроизводимый пример, как запросил @Glen_b (пожалуйста, прочтите связанный ответ!) - person Ben Bolker; 08.12.2012