gpt4 book ai didi

r - 将预测与 svyglm 结合使用

转载 作者:行者123 更新时间:2023-12-04 10:07:06 25 4
gpt4 key购买 nike

我发现 predict 有一些奇怪的行为和 svyglm来自 survey 的对象包裹。如果您的新数据在 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这工作正常。

雷:
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 的问题吗?包裹?

最佳答案

您没有考虑 newdata ;你要输入一个字符串。你应该输入一个与用于拟合模型的因子具有相同级别的因子(不是一些随机短语)——这是设计矩阵有意义的唯一方式。

predict(svymodel, data.frame(sch.wide=factor(rep("No",10),levels=c("No","Yes"))))
predict.lm从拟合对象中恢复因子水平(我不记得这是在 2002 年左右,但我可能错了)。您可以使用这种方法来自动化:
predict(svymodel, data.frame(sch.wide=factor(rep("No",10),levels=svymodel$xlevels$sch.wide)))

我会把它放在包裹里要做的事情的 list 上。

关于r - 将预测与 svyglm 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40472586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com