如何遍历R中的分类变量

时间:2019-06-06 08:16:50

标签: r categorical-data

我在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

数据中有三个类别(第一,第二和第三)。 crew字段中有一个class级别,但似乎没有出现在数据中。因此,第二类和第三类的两个零必须表示第一类。

问题是:

  

查找泰坦尼克号事件中所有可能病例的存活概率。按生存概率对它们进行排序。尽可能使过程自动化。

基于模型的系数,我编写了以下代码:

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 个答案:

答案 0 :(得分:1)

我会这样:

一些数据:

ng-pattern="vm.data.password"

创建模型:

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")

因此,如果您是一个有钱的女婴,您可能很容易幸免于泰坦尼克号。