我对多个插补中的互动术语有疑问。我的理解是,插补模型应该包括在后面的分析中使用的所有信息,包括变量的任何变换或交互(Amelia用户指南也做出这个陈述)。但是,当我在插补中包含互动字词int=x1*x2
时,int
的估算值不等于x1*x2
。例如,当我有一个二进制变量x2
和一个连续变量x1
时,int
为零时x2
应为零。对于int
的推算值,情况并非如此。那么如何处理多个插补中的交互?下面是一些说明问题的示例代码。
library("Amelia")
n = 100
p.na = 0.1
n.na = ceiling(n*p.na)
set.seed(12345)
# create data
df = data.frame(
'x1' = rnorm(n),
'x2' = rbinom(n,1,0.5),
'int'= NA
)
df$x1[sample(1:100,n.na)]=NA
df$x1[sample(1:100,n.na)]=NA
df$int = with(df,x1*x2)
# impute
df.mi = amelia(df,m=2,noms=c("x2"))
# comparison
round(cbind(df,df.mi$imputations[[1]])[1:10,],2)
cbind(
'df' = with(df,int==x1*x2),
'df.mi' = with(df.mi$imputations[[1]],int==x1*x2))
一些输出(第6行是上面讨论的int!=x1*x2
)
DF DF (imputed)
x1 x2 int x1 x2 int
1 0.59 1 0.59 0.59 1 0.59
2 0.71 1 0.71 0.71 1 0.71
3 -0.11 0 0.00 -0.11 0 0.00
4 -0.45 1 -0.45 -0.45 1 -0.45
5 0.61 1 0.61 0.61 1 0.61
6 NA 1 NA 0.24 1 0.48
7 0.63 0 0.00 0.63 0 0.00
8 -0.28 0 0.00 -0.28 0 0.00
9 -0.28 1 -0.28 -0.28 1 -0.28
10 -0.92 1 -0.92 -0.92 1 -0.92
答案 0 :(得分:2)
我认为,在任何情况下,您都会向Amelia提供信息,即int是转换的结果,x1 * x2。因此它将其视为一个简单的变量。 但您可以在插补数据中执行后转换,如下所示:
df.mi = transform(df.mi, int = x2*x1)
与原始数据相比,您会得到以下结果:
mm <- cbind(df,df.mi$imputations$imp1)
mm[mm$x2==0 & is.na(mm$int),]
x1 x2 int x1 x2 int
45 NA 0 NA 0.3144084 0 0
49 NA 0 NA -1.1741704 0 0
76 NA 0 NA -0.2018450 0 0
编辑我认为使用mice
包得到更好的结果:
“算法通过以下方式计算不完整的列(目标列) 在给定的其他列中生成“似是而非的”合成值 数据“。
使用您的数据,当x2等于0时,我将原始data.frame与所有插补数据集进行比较。
library(mice)
rr <- mice(df)
mm1 <- cbind(df,do.call(cbind,lapply(1:5,function(i)complete(rr , i))))
mm1[mm1$x2==0 & is.na(mm1$int),]
x1 x2 int x1 x2 int x1 x2 int x1 x2 int x1 x2 int x1 x2 int
20 NA 0 NA 0.5168547 0 -0.162311 0.6203798 0 0.0000000 0.8881394 0 0.0000000 0.9371405 0 0.8248701 0.5855288 0 0.0000000
23 NA 0 NA 0.5168547 0 0.000000 0.4911883 0 0.0000000 -1.8323773 0 0.0000000 0.5855288 0 0.0000000 0.5855288 0 0.0000000
31 NA 0 NA 0.5168547 0 0.000000 0.1495920 0 -0.3240866 2.3305120 0 1.6324456 1.1207127 0 0.8544517 0.5674033 0 0.0000000
60 NA 0 NA 0.5365237 0 0.000000 0.2542712 0 0.0000000 1.5934885 0 0.9371405 0.7094660 0 0.5168547 0.2542712 0 -0.3079534