【发布时间】:2016-11-07 19:01:03
【问题描述】:
我发现predict 和survey 包中的svyglm 对象存在一些奇怪的行为。如果predict 中的新数据有一个级别的因子/字符,它会吐出错误:
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
如果我将单级变量作为模型的预测变量,则此错误是有道理的,但对于 newdata,我看不到问题所在。
使用常规的glm 可以正常工作。
MRE:
library(survey)
data(api)
dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc)
svymodel <- svyglm(api00~sch.wide,design=dstrat)
# errors
predict(svymodel, data.frame(sch.wide=rep("No",10)))
regmodel <- glm(api00~sch.wide,data=apistrat)
# works
predict(regmodel,data.frame(sch.wide=rep("No",10)))
我发现如果我破解因子的级别,它会起作用,但这不是必需的:
svymodel <- svyglm(api00~sch.wide,design=dstrat)
predict(svymodel, data.frame(sch.wide=factor(rep("No",10),
levels = c("No","random phrase"))))
是我误解了什么还是survey 包有问题?
【问题讨论】:
标签: r linear-regression survey