R:mouse()如何知道要归类的变量?

时间:2018-03-29 20:37:48

标签: r machine-learning r-mice

我在R中利用可用的Vanderbilt Titanic数据集HERE找到了一些研究机器学习的代码。它是没有现场讲师或其他资源来回答我自己的问题的课程的一部分。这项工作的最终目标是根据其他观察到的数据预测生存。我们已将数据拆分为训练集和测试集,并运行str(training)返回:

> str(training)
'data.frame':   917 obs. of  14 variables:
 $ pclass   : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ...
 $ survived : Factor w/ 2 levels "0","1": 2 2 1 1 2 2 1 2 2 2 ...
 $ name     : chr  "Allen, Miss. Elisabeth Walton" "Allison, Master. Hudson Trevor" "Allison, Miss. Helen Loraine" "Allison, Mrs. Hudson J C (Bessie Waldo Daniels)" ...
 $ sex      : Factor w/ 2 levels "female","male": 1 2 1 1 2 1 2 1 1 1 ...
 $ age      : num  29 0.92 2 25 48 63 71 18 24 26 ...
 $ sibsp    : int  0 1 1 1 0 1 0 1 0 0 ...
 $ parch    : int  0 2 2 2 0 0 0 0 0 0 ...
 $ ticket   : chr  "24160" "113781" "113781" "113781" ...
 $ fare     : num  211.3 151.6 151.6 151.6 26.6 ...
 $ cabin    : chr  "B5" "C22 C26" "C22 C26" "C22 C26" ...
 $ embarked : Factor w/ 4 levels "","C","Q","S": 4 4 4 4 4 4 2 2 2 4 ...
 $ boat     : chr  "2" "11" "" "" ...
 $ body     : int  NA NA NA NA NA NA 22 NA NA NA ...
 $ home.dest: chr  "St Louis, MO" "Montreal, PQ / Chesterville, ON" "Montreal, PQ / Chesterville, ON" "Montreal, PQ / Chesterville, ON" ...

我的问题是双重的。这个过程的第一步是将函数标记并应用于“因子变量”,如下所示:

factor_vars <- c('pclass', 'sex', 'embarked', 'survived')
training[factor_vars] <- lapply(training[factor_vars], function(x) as.factor(x))

我理解此处的factor_vars作业,因为这些变量在调用Factor时会明确标记为str(training)。我的问题是为什么我们运行lapply函数?它似乎只是将因子变量分类为因子。 training[factor_vars] <- lapply(training[factor_vars], function(x) as.factor(x))代码行中究竟发生了什么?

下一步是将缺失的变量age归为一类。

impute_variables <- c('pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'embarked')
mice_model <- mice(training[,impute_variables], method='rf')
  1. 为什么选择特定的变量子集为impute_variables?包含sex但不包括boat等内容的基础是什么?
  2. 为什么我们将mice()函数中的训练数据进行子集化,仅对impute_variables列进行操作?
  3. mice_model返回的输出为:

    iter imp variable 1 1 age 1 2 age 1 3 age 1 4 age 1 5 age 2 1 age 2 2 age 2 3 age 2 4 age 2 5 age 3 1 age 3 2 age 3 3 age 3 4 age 3 5 age 4 1 age 4 2 age 4 3 age 4 4 age 4 5 age 5 1 age 5 2 age 5 3 age 5 4 age 5 5 age

  4. 在上述任何代码中,我们明确告诉mice()函数估算年龄?

1 个答案:

答案 0 :(得分:1)

简短回答:课程讲师通常会给出含糊不清和令人困惑的例子。

长答案:正如LAP所指出的那样,age会确定任何输入它的变量。在这种特殊情况下,泰坦尼克数据集只有一列具有任何缺失值 - #define DISP(f,x) printf(#f"(%g) = %g\n", x, f(x)) 。为什么教练选择在插补中任意包含其他变量是任何人的猜测。他没有在书中解释他为什么会这样做。