我有一个类别变量var1,它可以采用W,B,A,M,N或P的值。我想使用R中的mouses包来推算一些NA,但我知道缺少的值不能为“ W”或“ B”,因为那些人说它们不属于该类别。我想归因于var1,但强迫小鼠只选择B或W以外的所有东西。
以下是供您使用的示例代码:
df=data.frame(age=c(24,37,58,65,70,84, 56, 36, 48,23,15),
var1 =c("B","W", NA, "A",NA, "P","N", NA, "M",NA, "B"),
var1categ=c(0,0, 1, 1, 1,1,1,1,1,1, 0),
ht = c(156, 169, 180, 175, 168, 165, 171, 158, 160, 175, 160))
imp=mice(df, remove_collinear = FALSE)
感谢您的帮助,如果您需要更多信息,请告诉我。
答案 0 :(得分:1)
我认为以下方法应该有效:
由于var1中仅缺少数据(确保没有W和B出现),因此无论如何都不需要“ W”和“ B”的情况。
注意:如果其他列中也缺少数据,则方法会有所不同。
答案 1 :(得分:1)
我认为@ stats0007是正确的,但是您必须在所有m个估算数据集中重新插入已删除的行(在您的情况下,是所有5个估算数据集)。使用您的示例,这就是我的方法。
首先删除所有“ W”和“ B”的情况,并存储在单独的data.frame中。
df=data.frame(age=c(24,37,58,65,70,84, 56, 36, 48,23,15),
var1 =c("B","W", NA, "A",NA, "P","N", NA, "M",NA, "B"),
var1categ=c(0,0, 1, 1, 1,1,1,1,1,1, 0),
ht = c(156, 169, 180, 175, 168, 165, 171, 158, 160, 175, 160))
df[which(df$var1 != "B" & df$var1 != "W" | is.na(df$var1)),] # Keep rows not containing B and W
df3 <- df[df$var1 %in% c("B","W"),] # Store deleted rows
接下来,在不删除这些个案的情况下估算数据。记录的事件是因为您的变量之一现在是常量。
library(mice)
imp=mice(df2, remove_collinear = FALSE)
最后,将删除的案例重新插入每个估算的数据集1:5中。也许有更好的方法,但是for循环可以工作。
# Create an empty data frame
data <- data.frame()
# For each imputation 1:5
for(i in unique(comp_imp$.imp)){
# Create a .imp variable and .id variable in the dataset with the deleted rows
df3$.imp <- i
df3$.id <- (max(comp_imp$.id)+1):(max(comp_imp$.id)+nrow(df3))
df3 <- df3[,c(5,6,1:4)]
# Bind the new rows to the imputed dataset
df_temp <- rbind(comp_imp[comp_imp$.imp == i,],df3)
data <- rbind(data, df_temp)
}
data
现在包含所有估算值以及原始的“ B”和“ W”观察值。您可以将其转换回mids
对象,以在mice
包中进一步使用。
# Transform into a mids object for further use
imp_tot <- as.mids(data)