Как перебрать категориальные переменные в r - PullRequest
0 голосов
/ 06 июня 2019

Я поместил модель логистической регрессии в набор данных titanic, который состоит из нескольких категориальных переменных.

surv.glm= glm(survived ~ class + age + sex, data=titanic, family=binomial)


Coefficients:
   (Intercept)  class2nd class  class3rd class       ageadults          sexman  
         3.062          -1.011          -1.766          -1.056          -2.369  

часть данных:

class       age     sex survived
1st class   adults  man yes
1st class   adults  man yes

Есть три класса (1-й2-й и 3-й) в данных.В поле class есть уровень crew, но, похоже, он не отображается в данных.Итак, два нуля для 2-го и 3-го классов должны указывать 1-й класс.

Вопрос:

Найти вероятность выживания для всех возможных случаев в титаническом инциденте.Сортируйте их по вероятности выживания.Автоматизируйте процесс настолько, насколько это возможно.

На основе коэффициентов модели я написал этот код:

predict_surv = function(class_2nd, class_3th, age_adult,sex_man) {
  surv=3.062-1.011*class_2nd-1.766*class_3th-1.056*age_adult-2.369*sex_man 
  odd = exp(surv)
  p = odd / (1 + odd)
  return(p)
}

i <- 1
for (class2nd in c(0,1))
  for (class3th in c(0,1))
    for (adult in c(0,1))
      for (sex in c(0,1)) {
        pr[[i]] = predict_surv(class2nd,class3th,adult,sex)
        i <- i+1
      }
pr = sort(pr,decreasing = T)
print(pr)

Это работает, но я хотел бы напечатать фактическую этикеткудля каждой комбинации категориальных переменных в выводе.Как я могу сделать это в эффективном и стандартном решении с R?

1 Ответ

1 голос
/ 06 июня 2019

Я бы поступил так:

Некоторые данные:

library(titanic)
titanic_comp <- titanic_train[complete.cases(titanic_train),]

создать модель:

model <- glm(Survived ~ Pclass + Age + Sex,
             data = titanic_comp,
             family = binomial)

создать все возможные комбинации

new.data <- expand.grid(Pclass = unique(titanic_train$Pclass),
                        Age = unique(titanic_train$Age),
                        Sex = unique(titanic_train$Sex))

предсказать все возможные комбинации

new.data$prob <- predict(model, new.data, "response")

сортировать

new.data[order(new.data$prob, decreasing = TRUE),]

head(new.data[order(new.data$prob, decreasing = TRUE),])
    Pclass  Age    Sex      prob
521      1 0.42 female 0.9770664
515      1 0.67 female 0.9768586
494      1 0.75 female 0.9767917
377      1 0.83 female 0.9767247
473      1 0.92 female 0.9766490
437      1 1.00 female 0.9765815

Так что, если бы вы были богатой девочкой, вы могли бы легко выжить на Титанике.

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