我有一个数据框“H”,其中包含“HHID”,“Village”和结果“O”
Village有5个因素,A,B,C,D,E。然而,其中一个因素仍未使用..比如说有14个参与者从A中招募,20个来自B,25个来自C,15个来自D但是来自E的无(0)。在数据输入期间,在分析期间,因子E未被移除和保留,因为数据输入在SPSS中完成并使用外包输入到R.
直到我收到以下错误时,我才开始运行GEE模型(来自geepack)。
fit <- I(O == 1) ~ Village
fit1.1 <- geeglm(fit, family = binomial, id=HHID, data=H)
Factors not allowed to have unused levels...
我尝试制作数据子集并运行模型但仍然得到相同的错误。
sub <- H[H$Village %in% c("A", "B","C","D"), ]
如果我没有运行错误的模型,这就是我一直在使用的
fit <- I(O == 1) ~ Village
fit1.1 <- geeglm(fit, family = binomial, id=HHID, data=sub)
我不知道如何摆脱这个错误。这在制作子集时基本上是一个错误。
感谢您的帮助。
答案 0 :(得分:3)
您可以使用?droplevels
删除未使用的级别,例如:
f <- factor(LETTERS[1:4], levels=LETTERS[1:5])
f
#[1] A B C D
#Levels: A B C D E
droplevels(f)
#[1] A B C D
#Levels: A B C D
在您的情况下,简单的sub <- droplevels(sub)
应该有用。
答案 1 :(得分:2)
子集的想法不会有帮助,因为没有村庄不在集合中的行[A,B,C,D]。相反,您需要删除Village变量中未使用的级别:
H$Village <- droplevels(H$Village)
请注意,droplevel有一个data.frame方法,因此您可以使用
删除H中所有因子中所有未使用的级别H <- droplevels(H)