【问题标题】:interactions terms in multiple imputations (Amelia or other mi packages)多重插补中的交互项(Amelia 或其他 mi 包)
【发布时间】:2013-07-13 18:39:18
【问题描述】:

我有一个关于多重插补中的交互项的问题。我的理解是,插补模型应该包括以后分析中使用的所有信息,包括变量的任何转换或交互(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

【问题讨论】:

    标签: r missing-data


    【解决方案1】:

    我认为,在任何情况下,您都会向 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 包可以得到更好的结果:

    "该算法通过以下方式估算一个不完整的列(目标列) 在给定其他列的情况下生成“合理的”合成值 数据。”

    使用您的数据,我将原始 data.frame 与 x2 等于 0 时的所有估算数据集进行比较。

    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
    

    【讨论】:

    • 是的,我能做到。但是当我在插补之后创建交互时,这不是从插补过程中省略了交互项吗? Amelia 手册指出“至少包含与分析模型中将使用的信息一样多的信息至关重要。也就是说,将在分析模型中的任何变量也应该在插补模型中。这包括任何转换或交互将出现在分析模型中的变量的数量。”(第 10 页)如果没有该术语,我会估算一般模式,而忽略例如之间关系的差异。种族群体。
    • @user2503795 我明白你的意思。我还从文档中读到了这一点,但我找不到如何将这些额外信息提供给 Amelia。但是,我要做的是(我不是统计学家)在包含一些缺失之前对数据应用模型,并将其与应用于所有估算数据的相同模型进行比较。
    • @user2503795 我编辑我的答案以使用另一个缺失值包mi
    • @user2503795 您可能还没有为此工作,但我对 Amelia 文档的解释是,您应该在插补中包含交互项进行转换之后使其保持一致,但这种方法(JAV)有很大的偏差。从插补中完全省略交互项可能会更好。有一个名为 scmfcs 的 R 包扩展了 MICE(不是 Amelia),使其在这方面做得更好。要了解更多信息,请查看此处的交互条款部分:stefvanbuuren.name/fimd/sec-knowledge.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 2021-08-10
    • 2021-10-06
    • 2023-04-07
    相关资源
    最近更新 更多