我有以下数据框和拟合模型:
goyo <- data.frame(
Grade <- c(8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8),
a <- c(NA, 0, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 1, 1, NA, 1, NA, 1, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
b <- c(0, NA, NA, NA, NA, NA, NA, NA, 0, NA, NA, NA, NA, 0, NA, NA, NA, 1, NA, NA, 1, NA, 0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)
)
goyo$Grade <- factor(goyo$Grade)
glm(reformulate(c("Grade"), "a"), family=binomial, data = goyo)
glm(reformulate(c("Grade"), "b"), family=binomial, data = goyo)
当我使用“b”列运行拟合模型时,出现错误:
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
看起来和层数有关。然而,两列看起来几乎相同,我不明白它们之间有什么区别,导致它们给出不同的结果。
glm(b ~ Grade)
根据删除缺失内容
> goyo[complete.cases(goyo[c('Grade', 'b')]), ]
Grade a b
1 8 NA 0
9 8 NA 0
14 8 1 0
18 8 1 1
21 8 NA 1
23 8 NA 0
并且不能对等级应用对比,这解释了
> glm(reformulate(c("Grade"), "b"), family=binomial, data = goyo)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels