Используйте полиномиальную регрессию для создания формулы оценки - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь построить модель оценки, используя полиномиальную регрессию.

Некоторые из этих данных взяты из базы данных, а целевое значение 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, но это не помогло мне ...

1 Ответ

0 голосов
/ 11 декабря 2018

Вы можете найти наибольшую вероятность для каждой строки и получить имена их столбцов.Вот код

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

Надеюсь, это поможет.

Лучший.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...