为阶乘变量 NAs 输入 NAs 并将它们转换为虚拟变量

Imputing NAs for factorial variables NAs & Converting them to dummy variables

我有一个数据框,其中一些变量(列)是阶乘的,而对于某些记录我有缺失值(NA)。

问题是:

  1. 阶乘变量中 replacing\imputing NA 的正确方法是什么?

    例如具有 4 个级别的 VarX {"A"、"B"、"C"、"D"} - 替换 NA 的首选值是什么? A\B\C\D?也许只有 0?也许用这个变量观察的多数水平来估算?

  2. 如何根据对 1 的回答实施此类插补?

  3. 解决 1 和 2 后,我将使用以下内容为阶乘变量创建虚拟变量:

    is.fact <- sapply(my_data, is.factor)
    my_data.dummy_vars <- dummy.data.frame(my_data[, is.fact], sep = ".")
    

    之后,如何用提取到 my_data.dummy_vars 中的虚拟变量替换 my_data 中的所有阶乘变量?

我的用例是之后计算主成分(这需要所有变量都有数值,因此是虚拟变量)

谢谢

虚拟变量是指零和一吗?这就是我的结构:

# first building a fake data frame
x <- 1:10
y <- as.factor(c("A","A","B","B","C","C",NA,"A","B","C"))
df <- data.frame(x,y)

# creating dummy variables 
df$dummy_A <- 1*(y=="A")
df$dummy_B <- 1*(y=="B")
df$dummy_c <- 1*(y=="C")

# did it work?
df
    x    y dummy_A dummy_B dummy_c
1   1    A       1       0       0
2   2    A       1       0       0
3   3    B       0       1       0
4   4    B       0       1       0
5   5    C       0       0       1
6   6    C       0       0       1
7   7 <NA>      NA      NA      NA
8   8    A       1       0       0
9   9    B       0       1       0
10 10    C       0       0       1

感谢您阐明您的意图 - 这真的很有帮助!以下是我的想法:

  1. 输入缺失数据是一个非常重要的问题,对于交叉验证的优秀人员来说可能是个好问题。这是一个只能由您(主题专家)在项目上下文中真正解决的问题。一个大问题是缺失值是随机缺失的,还是作为其他一些变量的函数缺失的,以及这些是观察到的还是未观察到的。如果您得出结论认为它们作为其他(观察到的)变量的函数而缺失,您甚至可以考虑使用基于模型的方法,也许使用 GLM。到目前为止最简单的方法(如果你没有很多缺失值)就是用 mydata2 <- mydata[!is.na(TheFactorInQuestion),] 之类的东西删除这些行我再说一遍,缺失数据的插补是一个不平凡的问题,应该在上下文中仔细考虑。也许一个好的方法是尝试一些插补方法,看看你的推论是否(以及如何)发生变化。如果它们没有(很大)改变,您就会知道您不必担心。

  2. 删除行可以用一个相当简单的 mydata2 <- mydata[!is.na(TheFactorInQuestion),] 来完成。如果您进行任何其他形式的插补(从某种意义上说,"making up" 数据),我主张在得出结论认为这是正确的决定之前,要仔细考虑一下。当然,也有可能。

  3. 使用 cbind 连接两个 data.frames 非常简单,类似于 my_data2 <- cbind(my_data, my_data.dummy_vars)。如果您需要删除包含因子数据的列,my_data3 <- my_data2[,-5] 例如,如果因子数据在第 5 列中。