原始数据在来自小鼠的汇总评估中的作用(R包)?

时间:2018-08-17 16:42:04

标签: r missing-data imputation r-mice

我想知道当使用R中的mouses包获取估算数据时,原始数据集的作用是什么。我需要先估算数据,然后计算一些其他变量,然后再将长数据集转回as.mids对象。我注意到,在计算我的附加变量(以下代码中的“总计”)时,我是否使用na.rm=TRUE是否会受到估计的影响,并且根据我的理解,应该不会。这是一个可重现的示例:

# Add required package 
 require(mice)

# Impute data and compute summary with na.rm=T 
 imp1 <- mice(nhanes, seed = 123) 
 com1 <- complete(imp1, "long", include = TRUE) 
 head(com1) 
 com1$total <- rowSums(com1[4:6],na.rm=T)
 imp2 <- as.mids(com1)

# Fit model with data using na.rm=T 
 fit <- with(imp2, lm(bmi ~ age)) 
 round(summary(pool(fit)), 2)

请注意,我的变量“总计”是3个变量的rowSums,我使用了na.rm=TRUE。但是,由于仅原始数据集(在长数据集中由变量“ .imp”表示包含NA值),所以该额外的代码位仅应与原始数据相关。删除na.rm=TRUE表示这是不正确:

# Impute data and compute summary without na.rm=T 
 imp3 <- mice(nhanes, seed = 123) 
 com2 <- complete(imp3, "long", include = TRUE) 
 head(com2) 
 com2$total <- rowSums(com2[4:6]) 
 imp4 <- as.mids(com2)

# Fit model with data without using na.rm=T 
fit2 <- with(imp4, lm(bmi ~ age)) 
round(summary(pool(fit2)), 2)

同样,请注意,省略na.rm=TRUE会导致不同的估计。唯一的区别是,当变量.imp等于零(即原始数据集)时,变量“总计”现在具有NA值。

我想念什么?我本以为只有推算数据会影响合并的估计,而我只是证明原始数据集中的值确实会影响(即来自.imp = 0的值)。原始数据集在从小鼠收集汇总估计值中起什么作用?

注意:为清晰起见而编辑

1 个答案:

答案 0 :(得分:0)

我可以想象原始(原始)数据不起作用。根据{{​​1}}帮助页面,仅需要指示丢失的数据在哪里。我运行了您的脚本,发现创建as.mids时出错。您调用对象imp2,该对象应为com。校正后,两种方法的结果完全相同:

com1

结果:

# Add required package 
require(mice)

# Impute data and compute summary with na.rm=T 
imp1 <- mice(nhanes, seed = 123) 
com1 <- complete(imp1, "long", include = TRUE) 
head(com1) 
com1$total <- rowSums(com1[4:6],na.rm=T)
imp2 <- as.mids(com1)

# Fit model with data using na.rm=T 
fit <- with(imp2, lm(bmi ~ age)) 

# Impute data and compute summary without na.rm=T 
imp3 <- mice(nhanes, seed = 123) 
com2 <- complete(imp3, "long", include = TRUE) 
head(com2) 
com2$total <- rowSums(com2[4:6]) 
imp4 <- as.mids(com2)

# Fit model with data without using na.rm=T 
fit2 <- with(imp4, lm(bmi ~ age)) 

简而言之,我认为不同的结果可能是由于您的代码错误所致。我使用了> round(summary(pool(fit)), 2) estimate std.error statistic df p.value (Intercept) 29.76 1.86 15.98 18.61 0.00 age -1.73 0.95 -1.83 19.50 0.08 > round(summary(pool(fit2)), 2) estimate std.error statistic df p.value (Intercept) 29.76 1.86 15.98 18.61 0.00 age -1.73 0.95 -1.83 19.50 0.08