【问题标题】:Use multinomial regression to create a scoring formula使用多项回归创建评分公式
【发布时间】:2018-10-18 16:44:19
【问题描述】:

我正在尝试使用多项回归构建评分模型。

其中一些数据来自数据库,而目标值unconditional 来自评估并具有 3 种潜在模式。我尝试了多项式和有序逻辑回归,发现多项式给出了更好的结果

我的目标是建立一个分数以在我的数据库中使用,这将有助于预测unconditional 用于我的数据库中注册的任何新案例。

下面是一个可重现的例子:

testdata <- as.data.frame(cbind(
  dependency.cat <- c('Low dependency <30%', 'High dependency >60%', 'High dependency >60%', 'Average dependency 30-60%', 'Average dependency 30-60%', 'High dependency >60%', 'Average dependency 30-60%', 'Average dependency 30-60%', 'Average dependency 30-60%', 'Average dependency 30-60%', 'Average dependency 30-60%', 'Average dependency 30-60%', 'Average dependency 30-60%', 'High dependency >60%', 'Low dependency <30%', 'High dependency >60%', 'Average dependency 30-60%', 'Average dependency 30-60%', 'Average dependency 30-60%', 'Low dependency <30%', 'High dependency >60%', 'Average dependency 30-60%', 'Average dependency 30-60%', 'Low dependency <30%', 'Low dependency <30%', 'Low dependency <30%', 'Average dependency 30-60%', 'High dependency >60%', 'High dependency >60%', 'High dependency >60%', 'High dependency >60%', 'Average dependency 30-60%', 'Average dependency 30-60%', 'High dependency >60%', 'High dependency >60%', 'High dependency >60%', 'High dependency >60%', 'High dependency >60%', 'Average dependency 30-60%'),
  case.size <- c('Case size 1', 'Case size 4-5', 'Case size 2', 'Case size 4-5', 'Case size 2', 'Case size 6 or more', 'Case size 2', 'Case size 2', 'Case size 3', 'Case size 6 or more', 'Case size 3', 'Case size 6 or more', 'Case size 2', 'Case size 4-5', 'Case size 1', 'Case size 6 or more', 'Case size 3', 'Case size 4-5', 'Case size 6 or more', 'Case size 4-5', 'Case size 4-5', 'Case size 4-5', 'Case size 3', 'Case size 1', 'Case size 1', 'Case size 1', 'Case size 6 or more', 'Case size 6 or more', 'Case size 4-5', 'Case size 4-5', 'Case size 4-5', 'Case size 2', 'Case size 4-5', 'Case size 6 or more', 'Case size 6 or more', 'Case size 6 or more', 'Case size 3', 'Case size 4-5', 'Case size 2'),
  gender <- c('Male', 'Female', 'Female', 'Female', 'Female', 'Female', 'Female', 'Male', 'Female', 'Female', 'Female', 'Male', 'Female', 'Female', 'Male', 'Male', 'Male', 'Female', 'Female', 'Male', 'Female', 'Female', 'Female', 'Male', 'Male', 'Male', 'Female', 'Male', 'Female', 'Male', 'Male', 'Female', 'Female', 'Male', 'Female', 'Female', 'Female', 'Female', 'Male'),
  has.baby <- c('No', 'No', 'No', 'No', 'Yes', 'Yes', 'No', 'No', 'No', 'No', 'No', 'Yes', 'Yes', 'Yes', 'No', 'No', 'No', 'Yes', 'No', 'No', 'No', 'No', 'No', 'No', 'No', 'No', 'No', 'Yes', 'Yes', 'Yes', 'No', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'No', 'No'),
  able.to.work <- c('Yes', 'Yes', 'No', 'Yes', 'No', 'Yes', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'No', 'No', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'No', 'No', 'Yes', 'Yes'),
  arrivalyear <- c('2012', '2017', '2013', '2014', '2012', '2015', '2012', '2017', '2012', '2013', '2014', '2015', '2015', '2014', '2017', '2015', '2012', '2013', '2014', '2012', '2013', '2013', '2012', '2013', '2016', '2013', '2012', '2015', '2015', '2017', '2016', '2012', '2015', '2017', '2012', '2016', '2016', '2016', '2013'),
  unconditionnal <- c('OK', 'OK', 'OK', 'OK', 'OK', 'OK', 'OK', 'OK', 'OK', 'OK', 'OK', 'NotOK', 'OK', 'OK', 'Average', 'NotOK', 'Average', 'OK', 'NotOK', 'OK', 'OK', 'OK', 'OK', 'OK', 'NotOK', 'NotOK', 'OK', 'Average', 'OK', 'OK', 'Average', 'OK', 'OK', 'NotOK', 'OK', 'OK', 'OK', 'OK', 'OK')))

names(testdata) <- c("dependency.cat" ,"case.size" ,"gender" ,"has.baby" ,"able.to.work" ,"arrivalyear" ,"unconditionnal")

library(nnet)
model <- multinom(unconditionnal ~ ., data = testdata, trace = FALSE)
testdata$unconditionnal.predicted <- predict(model, testdata)
testdata <- cbind(testdata, predict(model, testdata, type ="p"))

如果这是一个简单的逻辑回归,我可以使用截止点,然后使用截距和术语来构建评分公式,但在这里我迷失了,因为我支持预测 unconditionnal.predicted 然后继续另一方在每个类别中的 3 个概率predict(model, testdata, type ="p")

如何对多项回归进行逆向工程以开发评分公式? 看起来像......

score = dependency.cat --- case.size --- gender -- has.baby -- able.to.work -- arrivalyear  
   if score > X then OK
  if score < Z then NotOK

也许我的想法没有意义?如果不是,我应该使用什么方法?

谢谢

我看到了https://stats.stackexchange.com/questions/76513/how-to-find-cutoff-values-in-multinomial-regression,但对我没有帮助...

【问题讨论】:

  • 在一个简单的逻辑回归中,你有一个二元结果,所以probability of one outcome1 - probability of the other outcome。为什么不将AverageNotOK 组合在一起,以便将问题转换为简单的逻辑回归问题?或者您可以采用完全相同的方法(多项式),最后只保留OK 的概率并使用截止点来预测OKOther
  • 你不能选择最高预测作为“赢家”吗?三向可能性不可能有一个单一的“分数”。

标签: r regression multinomial nnet


【解决方案1】:

您可以找到每一行的最大概率并获得它们的列名。这是代码

library(nnet)
model <- multinom(unconditionnal ~ ., data = testdata, trace = FALSE)
p <- predict(model, type="probs", newdata = testdata[,-7])
table(testdata$unconditionnal,colnames(p)[apply(p,1,which.max)])

效果还不错

            Average NotOK OK
 Average       4     0  0
 NotOK         0     6  0
 OK            0     1 28

希望对你有帮助。

最好的。

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    相关资源
    最近更新 更多