gpt4 book ai didi

r - 使用模型平均累积链接混合模型进行概率预测,该模型在 ordinal 包中安装了 clmm

转载 作者:行者123 更新时间:2023-12-04 14:01:11 25 4
gpt4 key购买 nike

我发现predict函数目前未在使用 clmm 拟合的累积链接混合模型中实现函数在 ordinal R 包。虽然 predictclmm2 实现在同一个包里,我选择了申请clmm相反,因为后者允许多个随机效应。另外,我还装了几个clmm模型并使用 model.avg 执行模型平均函数在 MuMIn包裹。理想情况下,我想使用平均模型来预测概率。然而,虽然MuMIn支持 clmm模型,predict也不适用于普通模型。

有没有办法破解predict函数,以便该函数不仅可以从 clmm 预测概率模型,但也使用来自 clmm 的模型平均系数进行预测(即“平均”类的对象)?例如:

require(ordinal)
require(MuMIn)

mm1 <- clmm(SURENESS ~ PROD + (1|RESP) + (1|RESP:PROD), data = soup,
link = "probit", threshold = "equidistant")

## test random effect:
mm2 <- clmm(SURENESS ~ PROD + (1|RESP) + (1|RESP:PROD), data = soup,
link = "logistic", threshold = "equidistant")

#create a model selection object
mm.sel<-model.sel(mm1,mm2)

##perform a model average
mm.avg<-model.avg(mm.sel)


#create new data and predict
new.data<-soup

##predict with indivindual model
predict(mm1, new.data)

我收到以下错误消息:
在 UseMethod("predict") 中:
没有适用于 predict 的方法应用于类“clmm”的对象
 ##predict with model average
predict(mm.avg, new.data)

返回另一个错误:
predict.averaging(mm.avg, new.data) 中的错误:
predict对于模型 'mm1' 和 'mm2' 导致错误

最佳答案

我找到了一个潜在的解决方案(粘贴在下面),但无法为我的数据工作。
解决方法在这里:https://gist.github.com/mainambui/c803aaf857e54a5c9089ea05f91473bc
我认为问题在于我使用的系数数量,但没有足够的经验来弄清楚。希望这可以帮助某人。
这是我使用的模型和新数据,尽管它实际上是模型平均版本。虽然相同的预测。

ma10 <- clmm(Location3 ~ Sex * Grass3 + Sex * Forb3 + (1|Tag_ID), data = 
IP_all_dunes)
ma_1 <- model.avg(ma10, ma8, ma5)##top 3 models
new_ma<- data.frame(Sex = c("m","f","m","f","m","f","m","f"),
Grass3 = c("1","1","1","1","0","0","0","0"),
Forb3 = c("0","0","1","1","0","0","1","1"))


# Arguments:
# - model = a clmm model
# - modelAvg = a clmm model average (object of class averaging)
# - newdata = a dataframe of new data to apply the model to
# Returns a dataframe of predicted probabilities for each row and response level
fake.predict.clmm <- function(modelAvg, newdata) {
# Actual prediction function
pred <- function(eta, theta, cat = 1:(length(theta) + 1), inv.link = plogis) {
Theta <- c(-1000, theta, 1000)
sapply(cat, function(j) inv.link(Theta[j + 1] - eta) - inv.link(Theta[j] -
eta))
}

# Multiply each row by the coefficients
#coefs <- c(model$beta, unlist(model$ST))##turn off if a model average is used
beta <- modelAvg$coefficients[2,3:12]
coefs <- c(beta, unlist(modelAvg$ST))

xbetas <- sweep(newdata, MARGIN=2, coefs, `*`)

# Make predictions
Theta<-modelAvg$coefficients[2,1:2]
#pred.mat <- data.frame(pred(eta=rowSums(xbetas), theta=model$Theta))
pred.mat <- data.frame(pred(eta=rowSums(xbetas), theta=Theta))
#colnames(pred.mat) <- levels(model$model[,1])
a<-attr(modelAvg, "modelList")
colnames(pred.mat) <- levels(a[[1]]$model[,1])

pred.mat
}

关于r - 使用模型平均累积链接混合模型进行概率预测,该模型在 ordinal 包中安装了 clmm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42150143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com