我有一个分类变量
var1
,可以采用 "W"
、"B"
、"A"
、"M"
、"N"
或 "P"
的值。我想估算缺失值,但我知道缺失值不能是"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)
感谢您的帮助,如果您需要更多信息,请告诉我。
我认为以下方法应该有效:
由于您只有 var1 中缺少数据(您确定不存在 W 和 B),因此您无论如何都不需要“W”和“B”情况。
注意:如果其他列中也有缺失数据,方法会有所不同。
我认为 @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)
我和亚历克西娅有同样的问题。但是,我有一个数据集,其中有多个列需要估算,并且其中包含我不希望老鼠用作有效的可估算响应的值(例如,一个人对每个人吸多少支香烟的问题的回答)天被编码为-7,因为他们对较早的项目做出了回应,表明他们不吸烟)。我不希望老鼠将 -7 作为对当前包含 NA 的行/观察值的响应。
因此,如果我从数据集中删除“有多少支香烟?”中包含 -7 的行。列,它可能在我希望估算的不同列中具有 NA。我已经搜索过这个问题的解决方案,但找不到任何东西。我错过了一些明显的东西吗?帮助?谢谢!