R:mice()如何知道要插补哪个变量?
我在R中发现了一些利用范德比尔特泰坦尼克号数据集研究机器学习的代码。这是课堂的一部分,没有现场讲师或其他资源来回答我自己的问题。这个练习的最终目标是根据其他观察数据预测生存率。我们将数据分为训练集和测试集,运行R:mice()如何知道要插补哪个变量?,r,machine-learning,r-mice,R,Machine Learning,R Mice,我在R中发现了一些利用范德比尔特泰坦尼克号数据集研究机器学习的代码。这是课堂的一部分,没有现场讲师或其他资源来回答我自己的问题。这个练习的最终目标是根据其他观察数据预测生存率。我们将数据分为训练集和测试集,运行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
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" ...
我的问题有两方面。该过程的第一步是标记“因子变量”并将其应用于函数,如下所示:
插补变量
?什么是包含诸如sex
而不是boat
之类内容的基础mice()
函数中对训练数据进行子集设置,使其仅作用于impute\u变量
列mices\u model
返回的输出为:
iter imp变量
1岁
12岁
13岁
14岁
15岁
21岁
2岁
2.3岁
2.4岁
2.5岁
3.1岁
3.2岁
3岁
3.4岁
35岁
4.1岁
4.2岁
4.3岁
4岁
4.5岁
5.1岁
5.2岁
5.3岁
5.4岁
5岁
在上述任何代码中,我们在哪里明确地告诉了
mices()
函数来估算年龄 简短回答:本课程的讲师通常会给出模棱两可、令人困惑的例子
长答案:正如拉普所指出的,
mices()
会输入任何变量。在这个特殊的例子中,泰坦尼克号数据集只有一列缺少任何值-age
。为什么讲师选择在插补中任意包含其他变量,这是任何人的猜测。他没有在书中解释他为什么这么做。据我所知,mices()
使用子集来插补每个包含变量中的所有NA
。这是我一直在思考的理论,但是为什么mices\u模型本身只显示age
变量上的插补?我如何将这个问题标记为关闭?你是对的,在这个数据集中,年龄是唯一缺少值的变量。我想我还是想知道为什么一些值被选择来插补其他值。。。特别是如果只有一个变量需要插补。老实说,这门课很垃圾,我遇到过几个模棱两可、不清楚的例子,就像这样只要接受你自己的答案,就可以了。谢谢。为了证实这一点,我在pclass
列中运行了一个替换来填充一些NA
值,mices()
同时填充了这两个值。谢谢你对一个新手这么好!如果在插补变量中只包含年龄
,那么小鼠
是否给出了不同的答案?是的。它给出了一个错误,数据应该是矩阵或数据帧。插补至少需要包含1个其他变量mice()
既使用impute_变量来插补缺失值,也在插补它们自己的缺失值。
factor_vars <- c('pclass', 'sex', 'embarked', 'survived')
training[factor_vars] <- lapply(training[factor_vars], function(x) as.factor(x))
impute_variables <- c('pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'embarked')
mice_model <- mice(training[,impute_variables], method='rf')