Logisti c регрессия в R, когда результатом является доля данных с более чем двумя категориями? - PullRequest
1 голос
/ 07 марта 2020

Допустим, у меня есть демографические данные c по различным классам и доля учащихся в классе, которые являются черными, белыми и т.д. c. Я пытаюсь создать регрессию для определения характеристик класса, которые прогнозируют долю каждой группы в классе. Я чувствовал, что может быть некоторая адаптация регрессии полиномиальной логистики c, которая будет работать, но я не могу понять, как это будет.

Пример данных:

dfexample <- data.frame(
     subject = c('English', 'English', 'Math', 'Science'),
     enrollment = c(100,200,50,70),
     white = c(0.5,0.5,0.6,0.7),
     black = c(0.25,0.20, 0.10, 0.25),
     hispanic = c(0.25, 0.30, 0.30, 0.05),
     classid = c('1a','3f','4d','5a')
)

dfexample
  subject enrollment white black hispanic classid
1 English        100   0.5  0.25     0.25      1a
2 English        200   0.5  0.20     0.30      3f
3    Math         50   0.6  0.10     0.30      4d
4 Science         70   0.7  0.25     0.05      5a

В этом фиктивный сценарий Я бы хотел создать модель для пропорции учащихся разных рас / этнических групп в зависимости от предмета и размера класса.

Я думал об использовании регрессии logisti c для прогнозирования дробей, но это, кажется, работает только тогда, когда результат является двоичным (например, True или False).

Если не в состоянии сделать это, другой альтернативой, которую я думал, было сделать несколько регрессий logisti c (белый против небелого ; черный против черного; испани c против нониспани c). Однако этот подход, по-видимому, отсутствовал, и оставил ли он меня открытым для множественной ошибки тестирования?

Спасибо.

1 Ответ

1 голос
/ 07 марта 2020

Используя библиотеку Caret , вы можете легко выполнить эту задачу.

Сначала объявите импорт и определите ваш набор данных.

library(caret)
library(dplyr)

dfexample <- data.frame(
       subject = c('English', 'English', 'Math', 'Science'),
       enrollment = c(100,200,50,70),
       white = c(0.5,0.5,0.6,0.7),
       black = c(0.25,0.20, 0.10, 0.25),
       hispanic = c(0.25, 0.30, 0.30, 0.05),
       classid = c('1a','3f','4d','5a')
   );
# replicating data frame rows to make our example works    
dfexample = dfexample[rep(seq_len(nrow(dfexample)), each = 20), ]

Затем определите поезд и набор тестов:

trainIndex <- createDataPartition(dfexample$classid, p = .6, 
                                  list = FALSE, 
                                  times = 1)
dataTrain <- dfexample[ trainIndex,]
dataTest  <- dfexample[-trainIndex,]

После этого запустите вашу модель. Если вам нужно протестировать другие модели, взгляните на эту ссылку и проверьте доступные методы модели. Затем измените свойство метода, как показано в приведенном ниже коде.

modelFit <- train(classid ~ subject + enrollment + white + black + hispanic, data = dataTrain, 
                  method = "LogitBoost",  
                  #method = "gbm",  
                  verbose = FALSE
)

print(modelFit)

Наконец, сгенерируйте матрицу путаницы и проанализируйте прогнозы:

predictions <- predict(modelFit, newdata = dataTest)

cm = confusionMatrix(predictions, dataTest$classid)

print(cm)

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

...