我正在尝试使用多项式回归建立评分模型。
其中一些数据来自数据库,而目标值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
和然后在另一方面,每个类别predict(model, testdata, type ="p")
中有3个概率。
我如何对多项式回归进行逆向工程以建立评分公式? 看起来像...
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,但并没有帮助我...
答案 0 :(得分:0)
您可以找到每一行的最大概率,并获取它们的列名。这是代码
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
希望有帮助。
最好。