Предсказание R svyglm с функцией сплайна

Я хочу делать прогнозы на основе объекта 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, и я подозреваю, что для этого есть веская причина. Мне просто было интересно, есть ли умное решение для этого, прежде чем я начну взламывать. Спасибо.


person Florian Oswald    schedule 15.05.2013    source источник
comment
не могли бы вы разделить их до 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
comment
бинго. Спасибо! это было достаточно легко...   -  person Florian Oswald    schedule 15.05.2013
comment
Я хотел бы принять изменения, которые вы вносили, но я сказал, что мне нужна репутация 2K, прежде чем я смогу это сделать.   -  person Florian Oswald    schedule 17.05.2013