R小鼠插补

R小鼠插补,r,imputation,r-mice,R,Imputation,R Mice,这是我的样本数据,我希望: A.对于时间=1,使用v1-v3使用鼠标插补v4-v8 v4是连续的,v5是分类的,v6-v8是二进制的 B.在时间=1的插补值插补后,我想用前一个值填充后面的NA值。因此,如果时间1-4的变量是:NA,NA,0,1,时间1的插补值是1,那么它可能是:1-1-0-1 我试图: data=data.frame("student"=c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5), "time"=c(1,2,3,4,1,2,3,4,1,

这是我的样本数据,我希望:

A.对于时间=1,使用v1-v3使用鼠标插补v4-v8 v4是连续的,v5是分类的,v6-v8是二进制的

B.在时间=1的插补值插补后,我想用前一个值填充后面的NA值。因此,如果时间1-4的变量是:NA,NA,0,1,时间1的插补值是1,那么它可能是:1-1-0-1

我试图:

data=data.frame("student"=c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5),
"time"=c(1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4),
"v1"=c(16,12,14,12,17,16,12,12,13,12,16,16,10,10,14,17,17,12,10,11),
"v2"=c(1,1,3,2,2,2,3,1,2,1,2,1,3,1,1,2,3,3,1,2),
"v3"=c(4,1,4,4,2,2,2,2,1,3,2,3,1,2,2,1,4,1,1,4),
"v4"=c(NA,27,NA,42,40,48,45,25,29,NA,NA,27,NA,NA,NA,NA,NA,NA,44,39),
"v5"=c(NA,1,NA,NA,1,3,3,2,NA,NA,NA,1,NA,NA,NA,NA,3,2,4,1),
"v6"=c(NA,0,1,NA,1,NA,1,NA,0,NA,1,1,NA,NA,NA,NA,0,0,NA,0),
"v7"=c(0,1,1,NA,0,1,1,0,1,0,NA,0,NA,NA,NA,NA,0,1,NA,1),
"v8"=c(1,NA,0,1,0,0,NA,1,1,NA,0,0,NA,NA,NA,NA,1,0,NA,1))
A.对于时间=1,使用v1-v3使用鼠标插补v4-v8 v4是连续的,v5是分类的,v6-v8是二进制的

首先,变量v5-v6必须转换为因子:

dataNEW <- mice(data[,data$time == 1],m=5,maxit=50,meth='pmm',seed=500)

你真的试过什么吗?@Edward谢谢一堆我加了我的简单尝试谢谢谢谢谢谢谢谢!是否有一个data.table解决方案而不是tidy?假设我们只想估算时间1的值,而不考虑其他所有内容,我想知道是否有data.table解决方案!
data$v5 <- factor(data$v5)
data$v6 <- factor(data$v6)
data$v7 <- factor(data$v7)
data$v8 <- factor(data$v8)
Pred_Matrix <- 1 - diag(ncol(data))
Pred_Matrix[,c(1:2, 6:10)] <- 0
impA <- mice(subset(data, subset = time==1), pred = Pred_Matrix, m = 1)
library(dplyr)
library(tidyr)  # Needed for the fill function

mice::complete(impA) %>%
  rbind(subset(data, subset=time!=1)) %>%
  arrange(student, time) %>%
  group_by(student) %>%
  fill(v4:v8)
# A tibble: 20 x 10
# Groups:   student [5]
   student  time    v1    v2    v3    v4 v5    v6    v7    v8   
     <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <fct> <fct> <fct> <fct>
 1       1     1    16     1     4    40 2     1     0     1    
 2       1     2    12     1     1    27 1     0     1     1    
 3       1     3    14     3     4    27 1     1     1     0    
 4       1     4    12     2     4    42 1     1     1     1    
 5       2     1    17     2     2    40 1     1     0     0    
 6       2     2    16     2     2    48 3     1     1     0    
 7       2     3    12     3     2    45 3     1     1     0   
 8       2     4    12     1     2    25 2     1     0     1    
 9       3     1    13     2     1    29 1     0     1     1    
10       3     2    12     1     3    29 1     0     0     1    
11       3     3    16     2     2    29 1     1     0     0    
12       3     4    16     1     3    27 1     1     0     0    
13       4     1    10     3     1    40 1     0     0     0    
14       4     2    10     1     2    40 1     0     0     0    
15       4     3    14     1     2    40 1     0     0     0    
16       4     4    17     2     1    40 1     0     0     0    
17       5     1    17     3     4    40 3     0     0     1    
18       5     2    12     3     1    40 2     0     1     0    
19       5     3    10     1     1    44 4     0     1     0    
20       5     4    11     2     4    39 1     0     1     1
data=data.frame("student"=c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5),
                "time"=c(1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4),
                "v1"=c(16,12,14,12,17,16,12,12,13,12,16,16,10,10,14,17,17,12,10,11),
                "v2"=c(1,1,3,2,2,2,3,1,2,1,2,1,3,1,1,2,3,3,1,2),
                "v3"=c(4,1,4,4,2,2,2,2,1,3,2,3,1,2,2,1,4,1,1,4),
                "v4"=c(NA,27,NA,42,40,48,45,25,29,NA,NA,27,NA,NA,NA,NA,NA,NA,44,39),
                "v5"=c(2,1,NA,NA,1,3,3,2,NA,NA,NA,1,NA,NA,NA,NA,3,2,4,1),
                "v6"=c(NA,0,1,NA,1,NA,1,NA,0,NA,1,1,NA,NA,NA,NA,0,0,NA,0),
                "v7"=c(0,1,1,NA,0,1,1,0,1,0,NA,0,NA,NA,NA,NA,0,1,NA,1),
                "v8"=c(1,NA,0,1,0,0,NA,1,1,NA,0,0,NA,NA,NA,NA,1,0,NA,1))