我正在尝试将累积链接混合模型与ordinal
包相匹配,但是我不了解有关获得预测概率的内容。我使用ordinal
包中的以下示例:
library(ordinal)
data(soup)
## More manageable data set:
dat <- subset(soup, as.numeric(as.character(RESP)) <= 24)
dat$RESP <- dat$RESP[drop=TRUE]
m1 <- clmm2(SURENESS ~ PROD, random = RESP, data = dat, link="logistic", Hess = TRUE,doFit=T)
summary(m1)
str(dat)
现在我正在尝试预测新数据集的概率
newdata1=data.frame(PROD=factor(c("Ref", "Ref")), SURENESS=factor(c("6","6")))
与
predict(m1, newdata=newdata1)
但是我收到以下错误
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
为什么我收到此错误? predict.clmm2()
的语法中有什么错误吗?通常哪个概率确实预测.clmm2()输出? Pr(J<j)
或Pr(J=j)
?有人可以向我指出有关使用R专门拟合分类(序数)序数混合模型的信息(网站,书籍)材料。从我在文献和网络中的搜索中,大多数研究人员都使用SAS来拟合这些模型。
答案 0 :(得分:2)
你没有说你纠正了什么,但是当我使用它时,我没有得到任何错误:
newdata1=data.frame(PROD=factor(c("Test", "Test"), levels=levels(dat$PROD)),
SURENESS=factor(c("1","1")) )
predict(m1, newdata=newdata1)
带有newdata参数的predict.clmm2的输出没有多大意义,除非您将所有因子级别对齐,以便它们与输入数据保持一致:
> newdata1=data.frame(
PROD=factor(c("Ref", "Test"), levels=levels(dat$PROD)),
SURENESS=factor(c("1","1")) )
> predict(m1, newdata=newdata1)
[1] 1 1 1 1 1 1 1 1 1 1 1 1
不是很有趣。该预测是针对仅具有一个等级的结果而具有处于该等级的概率为1。 (一个空洞的预测。)但重建原始有序结果的结构更有意义:
> newdata1=data.frame(
PROD=factor(c("Ref", "Test"), levels=levels(dat$PROD)),
SURENESS=factor(c("1","1"), levels=levels(dat$SURENESS)) , )
> predict(m1, newdata=newdata1)
[1] 0.20336975 0.03875713
您可以通过汇总各个级别的所有预测来回答评论中的问题:
> sapply(as.character(1:6), function(x){ newdata1=data.frame(PROD=factor(c("Ref", "Test"), levels=levels(dat$PROD)), SURENESS=factor(c(x,x), levels=levels(dat$SURENESS)) );predict(m1, newdata=newdata1)})
1 2 3 4 5 6
[1,] 0.20336975 0.24282083 0.10997039 0.07010327 0.1553313 0.2184045
[2,] 0.03875713 0.07412618 0.05232823 0.04405965 0.1518367 0.6388921
> out <- .Last.value
> rowSums(out)
[1] 1 1
概率为Pr(J=j|X=x & Random=all)
。