使用`ordinal :: clmm`模型对新数据进行预测

时间:2019-07-22 06:28:04

标签: r predict mixed-models ordinal

我有一些重复的方法,顺序响应数据:

dat <- data.frame(
  id = factor(sample(letters[1:5], 50, replace = T)),
  response = factor(sample(1:7, 50, replace = T), ordered = T),
  x1 = runif(n = 50, min = 1, max = 10),
  x2 = runif(n = 50, min = 100, max = 1000)
)

我建立了以下模型:

library(ordinal)

model <- clmm(response ~ x1 + x2 + (1|id), data = dat)

我有一些新数据:

new_dat <- data.frame(
  id = factor(sample(letters[1:5], 5, replace = T)),
  x1 = runif(n = 5, min = 1, max = 10),
  x2 = runif(n = 5, min = 100, max = 1000)
)

我希望能够使用该模型预测dat$response发生的每个new_dat级别的概率,同时还要考虑id

很遗憾,predict()clmm对象无效。 predict()适用于clmm2个对象,但忽略了其中包含的任何随机效果。

我想要实现的类似于使用以下代码在following图3 中完成的操作:

library(ordinal)

fm2 <- clmm2(rating ~ temp + contact, random=judge, data=wine, Hess=TRUE, nAGQ=10)

pred <- function(eta, theta, cat = 1:(length(theta)+1), inv.link = plogis){
Theta <- c(-1e3, theta, 1e3)
sapply(cat, function(j)
inv.link(Theta[j+1] - eta) - inv.link(Theta[j] - eta))
}

mat <- expand.grid(judge = qnorm(0.95) * c(-1, 0, 1) * fm2$stDev,
contact = c(0, fm2$beta[2]),
temp = c(0, fm2$beta[1]))

pred.mat <- pred(eta=rowSums(mat), theta=fm2$Theta)

lab <- paste("contact=", rep(levels(wine$contact), 2), ", ", "temp=", rep(levels(wine$temp), each=2), sep="")

par(mfrow=c(2, 2))

for(k in c(1, 4, 7, 10)) {
plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1),
xlab="Bitterness rating scale", axes=FALSE,
ylab="Probability", main=lab[ceiling(k/3)], las=1)
axis(1); axis(2)
lines(1:5, pred.mat[k+1, ], lty=1)
lines(1:5, pred.mat[k+2, ], lty=3)
legend("topright",
c("avg. judge", "5th %-tile judge", "95th %-tile judge"),
lty=1:3, bty="n")
}

除了我的模型包含多个连续的协变量(与二元因子相反)。

我如何使用模型数据来预测dat$response发生的每个new_dat级别的概率,同时仍然考虑id

非常感谢。

0 个答案:

没有答案