Я хочу делать прогнозы на основе объекта glm обзора R, который содержит естественный сплайн в формуле. возьмите пример с домашней страницы пакета опросов:
library(survey)
data(api)
dclus2 <-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=apiclus2)
m <- svyglm(api00 ~ ell + meals + avg.ed, design = dclus2)
я изменил последнюю переменную на avg.ed. Теперь я хочу сделать следующее:
m2 <- svyglm(api00 ~ ell + meals + ns(avg.ed,4), design = dclus2)
то есть я хочу кубический сплайн на avg.ed. Я получаю ошибку, если хочу сделать прогноз из модели m2 для некоторых новых данных:
n <- data.frame(meals=2,ell=2,avg.ed=3)
predict(m1,newdata=n,type="response")
predict(m2,newdata=n,type="response") # error
кажется, predict.svyglm
не понимает, что ns
это то, что есть (т.е. объект класса "ns"), когда делает прогноз. Из исходного кода кажется, что он делает
mm %*% coef(object)
(где mm
— матрица модели) для получения прогноза — он не использует predict.glm
, и я подозреваю, что для этого есть веская причина. Мне просто было интересно, есть ли умное решение для этого, прежде чем я начну взламывать. Спасибо.
predict.svyglm
? :)x <- apiclus2 ; x[ , paste0( 'avg.ed.ns' , 1:4 ) ] <- ns( x$avg.ed, 4 ) ; dclus2 <-svydesign(id=~dnum+snum, fpc=~fpc1+fpc2, data=x)
- person Anthony Damico   schedule 15.05.2013