gpt4 book ai didi

r - MissForest 不会归咎于我的分类变量

转载 作者:行者123 更新时间:2023-12-04 10:19:48 32 4
gpt4 key购买 nike

我不是一个有经验的编码员,过去几周刚刚开始学习 R,以帮助完成一些与我的博士相关的工作。这是问题:
我一直在尝试使用 R 中的 missForest 包将缺失值归入数据集中许多小时,但没有成功。下面是我在伪造数据集上遇到的问题的代表性示例。
数据集包含分类的数值。导入后,我使用以下代码将类设置为“因子”


data <- read.csv("~Data.csv", colClasses = c(rep('factor',3)))

>data
a b c
1 2 3
4 5
7 8 9
为了验证类设置是否正确,我运行:
missForest::varClass(data) 
返回:
[1] "factor" "factor" "factor"
然后我尝试插补和查看数据,但我得到了原始数据集,但数据点仍然缺失,而不是插入了插补值。
    data.imp <- missForest(data)
data.imp$ximp

a b c
1 2 3
4 5
7 8 9
上面的示例显示了我如何导入数据并将其转换为因子并尝试估算丢失的数据。下面的例子是一个可重现的例子,它产生了同样的问题。
下面的例子应该可以在 R 中重现
我使用的是 R 版本 3.5.3 (2019-03-11)
#install and load the missForest package and library
install.packages("missForest")
library(missForest)
#create the test data frame with a missing value in column c
a <- c("1","4","7")
b <- c("2","5","8")
c <- c("3","","9")
data.test <- data.frame(a,b,c)
#print the data
data.test
#view the class of the data to ensure it is "factor"
missForest::varClass(data.test)
#create the imputed data frame using missForest
data.test.imp <- missForest(data.test)
#print the imputed data frame
data.test.imp$ximp
上面的代码返回以下内容,但 c 列中的值仍然缺失
> data.test
a b c
1 1 2 3
2 4 5
3 7 8 9
> missForest::varClass(data.test)
[1] "factor" "factor" "factor"
> data.test.imp <- missForest(data.test)
missForest iteration 1 in progress...done!
missForest iteration 2 in progress...done!
> data.test.imp$ximp
a b c
1 1 2 3
2 4 5
3 7 8 9
如果我将所有数据转换为数字,它会将值插补到缺失的数据点中,尽管这些插补值是小数并且我的所有数据都是整数,但它仍然有效......
我使用的真实数据集要大得多,但我遇到了完全相同的问题。
此外,如果我使用 iris 数据集按照missForest 手册中的示例进行操作,则一切正常。但是,如果我从 UCI 存储库下载相同的数据集并手动删除分类数据点并尝试运行相同的代码,则它不起作用。
我确定我遗漏了一些小东西,但是经过数小时的尝试解决这个问题后,我被卡住了。

最佳答案

这似乎真的是一个小问题。在您的 data.test您有需要编码为缺失的空字符串。

你可以用 str 测试一下:

str(data.test)
# 'data.frame': 3 obs. of 3 variables:
# $ a: Factor w/ 3 levels "1","4","7": 1 2 3
# $ b: Factor w/ 3 levels "2","5","8": 1 2 3
# $ c: Factor w/ 3 levels "","3","9": 2 1 3

你看,变量的水平 c包含 ""这也被编码为一个类别。

你可以很容易地解决这个问题
data.test[data.test == ""] <- NA
data.test
# a b c
# 1 1 2 3
# 2 4 5 <NA>
# 3 7 8 9

现在, missForest作品:
data.test.imp <- missForest::missForest(data.test)
data.test.imp$ximp
# a b c
# 1 1 2 3
# 2 4 5 9
# 3 7 8 9

关于r - MissForest 不会归咎于我的分类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60910025/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com