Множественное вменение отсутствующих значений в R

Я хотел бы использовать вменение для замены отсутствующих значений в моем наборе данных. У меня есть некоторые ограничения, например, я не хочу, чтобы вмененная переменная x1 была меньше суммы двух моих других переменных, скажем, x2 and x3. Я также хочу, чтобы x3 вменялся 0 or 14 or >= 14 and, а x2 - 0 or 16 or >= 16. Я попытался определить эти ограничения в spss, например, для множественного вменения, но в spss я могу определить только максимум и минимум. Есть ли способ определить дополнительное ограничение в spss или вы знаете какой-нибудь пакет R, который позволяет мне определить эти ограничения для вменения отсутствующего значения?

   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

person rose    schedule 10.12.2013    source источник
comment
Это определенно возможно, но для демонстрации ответа потребуются некоторые данные, поэтому, пожалуйста, предоставьте примерные данные.   -  person Thomas    schedule 11.12.2013
comment
у вас есть только целые значения?   -  person agstudy    schedule 11.12.2013
comment
@Томас. Я предоставил примерные данные.   -  person rose    schedule 11.12.2013
comment
Вы имеете в виду, что просто хотите, чтобы значения заполнили эти NA, удовлетворяющие ограничениям, но вы не знаете, каковы эти значения?   -  person xwang    schedule 11.07.2016


Ответы (2)


Если у вас есть только целые значения, вы можете сделать что-то вроде этого:

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
person agstudy    schedule 10.12.2013

Ну, вы, конечно, могли бы сделать это в SPSS с помощью простой логики преобразования, но я бы подумал, что кто-то захочет основывать вменение на распределении известных значений.

person JKP    schedule 12.12.2013