有多种预测序数和分类变量的方法。
我不明白的是这种区别的重要性。是否有一个简单的示例可以弄清楚如果我下订单会出什么问题?在什么情况下没关系?例如,如果自变量也都是分类/有序的,是否会有区别?
这个相关问题集中在自变量的类型上。在这里,我要问结果变量。
编辑: 我知道使用订单结构可以减少模型参数的数量,但是我仍然没有真正确信。
这是一个示例(摘自有序逻辑回归的介绍,据我所知,序数逻辑回归的性能并不比多项式逻辑回归好:
library(nnet)
library(MASS)
gradapply <- read.csv(url("http://www.ats.ucla.edu/stat/r/dae/ologit.csv"), colClasses=c("factor", "factor", "factor", "numeric"))
ordered_result <- function() {
train_rows <- sample(nrow(gradapply), round(nrow(gradapply)*0.9))
train_data <- gradapply[train_rows,]
test_data <- gradapply[setdiff(1:nrow(gradapply), train_rows),]
m <- polr(apply~pared+gpa, data=train_data)
pred <- predict(m, test_data)
return(sum(pred==test_data$apply))
}
multinomial_result <- function() {
train_rows <- sample(nrow(gradapply), round(nrow(gradapply)*0.9))
train_data <- gradapply[train_rows,]
test_data <- gradapply[setdiff(1:nrow(gradapply), train_rows),]
m <- multinom(apply~pared+gpa, data=train_data)
pred <- predict(m, test_data)
return(sum(pred==test_data$apply))
}
n <- 100
polr_res <- replicate(n, ordered_result())
multinom_res <- replicate(n, multinomial_result())
boxplot(data.frame(polr=polr_res, multinom=multinom_res))
该图显示了两种算法的正确猜测数(共40个)的分布。
Edit2:当我使用以下评分方法时
return(sum(abs(as.numeric(pred)-as.numeric(test_data$apply)))
并惩罚“非常错误”的预测,polr看起来仍然很糟糕,即上面的图变化不大。
1
您的示例使用了不连续的不正确评分规则,该规则通常不是比较预测集的良好基础(它是任意的,并且缺乏功效和准确性)。
—
Frank Harrell
我假设您可能必须将输出变量强制为
—
朱巴卜'16
ordered factor
,这将改善结果:gradapply$apply <-factor(gradapply$apply, levels= c('unlikely', 'somewhat likely', 'very likely') , ordered = TRUE)
但这没什么区别。如果您看一下准确性,则两者非常相似。但是,准确度并不是一个单独依靠的好指标。