R中缺失值的多重插补

时间:2013-12-10 23:04:25

标签: r spss

我想使用插补来替换数据集中的缺失值。我有一些约束,例如我不希望推算的变量x1小于我的另外两个变量的总和,比如x2 and x3。我还希望x30 or 14 or >= 14 and估算为0 or 16 or >= 16,将{2}归为 x1 =c(21, 50, 31, 15, 36, 82, 14, 14, 19, 18, 16, 36, 583, NA,NA,NA, 50, 52, 26, 24) x2 = c(0, NA, 18,0, 19, 0, NA, 0, 0, 0, 0, 0, 0,NA,NA, NA, 22, NA, 0, 0) x3 = c(0, 0, 0, 0, 0, 54, 0 ,0, 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, 0, 0) dat=data.frame(x1=x1, x2=x2, x3=x3) > dat x1 x2 x3 1 21 0 0 2 50 NA 0 3 31 18 0 4 15 0 0 5 36 19 0 6 82 0 54 7 14 NA 0 8 14 0 0 9 19 0 0 10 18 0 0 11 16 0 0 12 36 0 0 13 583 0 0 14 NA NA NA 15 NA NA NA 16 NA NA NA 17 50 22 NA 18 52 NA 0 19 26 0 0 20 24 0 0 。我试图在spss中定义这些约束,例如对于多重插补,但在spss中我只能定义最大值和最小值。有没有办法在spss中定义furthur约束,或者你知道任何R包,它允许我定义这些约束来估算缺失值吗?

{{1}}

2 个答案:

答案 0 :(得分:0)

如果您只有整数值,则可以执行以下操作:

N <- 5
set.seed(1)
dat <- data.frame(x1 = sample(1:10,N,rep=TRUE),
                    x2 = sample(1:10,N,rep=TRUE),
                    x3 = sample(c(1,NA),N,rep=TRUE))

> dat
  x1 x2 x3
1  3  9  1
2  4 10  1
3  6  7 NA
4 10  7  1
5  3  1 NA
## x3 < sum(x1,x2)
transform(dat,x3 =ifelse(is.na(x3),sample(seq(x1+x2-1),1),x3))
  x1 x2 x3
1  3  9  1
2  4 10  1
3  6  7  3
4 10  7  1
5  3  1  3
## x3 in c(0,14)
transform(dat,x3 =ifelse(is.na(x3),sample(c(0,14),1),x3))
  x1 x2 x3
1  3  9  1
2  4 10  1
3  6  7 14
4 10  7  1
5  3  1 14

答案 1 :(得分:0)

嗯,你当然可以用简单的转换逻辑在SPSS中做到这一点,但我认为人们会希望将估算基于已知值的分布。