这充其量只是部分答案,但希望它有所帮助。
鉴于您的回答是有序的,您必须问自己不同类别之间的距离是否因起始位置而异。换句话说。如果您认为 1 和 3 之间的差距不一定与 2 和 4 之间的差距相同,那么使用累积链接模型(例如 logit 或 probit)是最佳选择。我建议您阅读 Christensen (2013) 的教程和额外信息,ordinal以帮助您一路走好。
为什么人们更喜欢 lmer() 可能与良好的统计数据或计量经济学关系不大,而更多地与习惯和方法制度化有关。我从经验中知道,在大多数人使用 GLS 或 OLS 时提出 CLM 模型可能是不明智的,不是因为 CLM 不是更好的模型,而是因为您基本上是在告诉您的读者社区“到目前为止,您伙计们错了”这不是那么容易接受的。
通常会进行居中和标准化,因为人们认为这会减轻对共线性等的具体担忧。关于这是否属实,到处都有很多争论,但在我看来(对数转换也是如此),您正在减少方差并更改数据,如果您对此有理论动机,这只是一个好主意,如果没有,请使用实际数据并更改您的模型。
至于 logit 与 probit 的选择。差别一般不大。我将再次以数据为指导。您可以按以下方式开始:
# Finding the best matching link function
links <- c("logit", "probit", "cloglog", "loglog", "cauchit")
sapply(links, function(link){
clm(formula, data=df, link=link)$logLik})
# See which one fits best
# Finding the best threshold function
thresholds <- c("symmetric", "flexible", "equidistant")
sapply(thresholds, function(threshold){
clm(formula, data=df, link="select best fitting link function",threshold=threshold)$logLik
})
这将为您提供取决于模型的数据之间的最佳拟合(最低对数似然)。一般来说,如果你有很多“极端”值(即在你的情况下最坏和最好),概率会更好,因为它与正态分布相关,而正态分布的尾部比逻辑分布(logit)更胖。
最后,这里有一些简单的代码,可以让您很好地了解您的模型(和 X 变量)如何让您预测响应变量。此代码将绘制模型中正确响应的发生率和错误预测的数量(以及它们的错误程度)。
pred. <- predict(FORMULA, type = "class")$fit
plot(df$RESPONSE,pred.,type="p", pch=15,cex = sqrt(table(df$RESPONSE,pred.))/5)
# YOU WILL SEE THIS PLOT IS NOT THAT USEFUL
results <- data.frame(cbind(as.numeric(as.character(df$RESPONSE)),as.numeric(as.character(pred.)),as.numeric(as.character(df$RESPONSE))-as.numeric(as.character(pred.))))
sum(results[,3]) # THIS WILL GIVE YOU A FAST IDEA ABOUT WHETHER YOU OVERESTIMATE (LARGE POSITIVE VALUE, OR UNDERESTIMATE, THE ACTUAL RESPONSE
results$dum <- 1
tmp <- data.frame(with(results, tapply(dum, results[,3],sum)))
tmp$z <- seq(min(results[,3]),max(results[,3]),by=1)
plot(tmp$z,tmp[,1], type="h", xlab ="Deviation from correct prediction",ylab="Number of Predictions")
让我知道你的想法!
西蒙