2016-11-07 1 views
3

predictsurvey 패키지의 svyglm 개체로 이상한 동작을 발견했습니다. '나는 모델에 대한 예측으로 한 수준 변수를 넣는 경우svyglm을 사용하여 예측하기

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
contrasts can be applied only to factors with 2 or more levels 

이 오류는 의미가 있지만, newData에 대한 나는 돈 : predict에 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 패키지에 문제가 있습니까?

답변

4

newdata에 요인을 넣지 않습니다. 당신은 문자를 입력하고 있습니다. 같은 레벨 집합을 가진 모형을 (적합하지 않은 문구가 아닌) 모델에 맞추는 요소로 넣어야합니다 - 그것이 설계 매트릭스가 의미있는 유일한 방법입니다.

predict(svymodel, data.frame(sch.wide=factor(rep("No",10),levels=c("No","Yes")))) 

predict.lm

가 장착 된 개체에서 요인 수준을 회복 (I이 2002 년의 주위에있는 기억하지 않지만, 내가 잘못 될 수도 있습니다). 이 방법을 사용하여 자동화 할 수 있습니다.

및 그 패키지에 대해 수행 할 작업 목록에 추가하겠습니다.

+0

교수님 감사합니다 Lumley. – Carl

+3

그리고 r-forge를 기반으로하는 버전 3.31-5는'$ xlevels'를'predict.svyglm'에 추가합니다. –

관련 문제