使用 mitools 和调查包在 R 中运行 NSCH 数据汇总统计时的 NA 值

问题描述 投票:0回答:1

我第一次在 R 中处理 NSCH 数据。我找到了以下资源,这非常有帮助(谢谢!)。

https://github.com/ajdamico/asdfree/blob/master/nsch.Rmd

我完全遵循 github 存储库中的上述代码来导入、设置和重塑数据以及创建调查设计。它运行得很好。当我开始尝试计算其他变量的汇总统计数据时,我才开始进行修改。尽管示例中的变量生成汇总统计数据(例如年龄、贫困水平),但我正在为我尝试为其生成汇总统计数据的其他变量生成 NA。

我尝试复制下面的示例代码来获取数字变量 ace5 之一的汇总统计信息。

#Calculate the mean (average) of a linear variable, overall and by groups:
#example code below
MIcombine( with( nsch_design , svymean( ~ sc_age_years ) ) )

#My code
MIcombine( with( nsch_design , svymean( ~ ace5 ) ) )

年龄算不错:

results
<dbl>
se
<dbl>
sc_age_years    8.839863    0.04435024

但是,我得到 ace5 的 NA 值。

results
<dbl>
se
<dbl>
ace5    NA  NA      

我还尝试将 ace5 转换为因子变量,然后计算调查总数:

nsch_design <-
    update(
        nsch_design ,
ace5f = factor(
      ifelse(ace5 == 1, "Yes", ifelse(ace5 == 2, "No", NA)),
      levels = c("Yes", "No")
        )
)

MIcombine( with( nsch_design , svytotal( ~ ace5f ) ) )

results
<dbl>
se
<dbl>
ace5fYes    NA  NaN     
ace5fNo NA  NaN 

该语法也会产生 NA。我已经尝试了数据集中其他一些数值变量(例如空腔)的语法,并且仍在生成 NA。

有谁知道为什么我在尝试计算这些变量的汇总统计数据时会得到 NA 值?

(我不确定如何使用大型、复杂、多重插补数据集生成最小可重复的示例,但欢迎建议)。

r na summary survey
1个回答
0
投票

na.rm
帮助页面上显示的
?svymean
选项是否可以为您提供所需的行为? 谢谢!!

# fails
MIcombine( with( nsch_design , svymean( ~ ace5 ) ) )

# works but gives wrong answer since it's averaging ones and twos
MIcombine( with( nsch_design , svymean( ~ ace5 , na.rm = TRUE ) ) )

# works
MIcombine( with( nsch_design , svymean( ~ factor( ace5 ) , na.rm = TRUE ) ) )

# works
MIcombine( with( nsch_design , svymean( ~ as.numeric( ace5 == 1 ) , na.rm = TRUE ) ) )

# works
MIcombine( with( subset( nsch_design , !is.na( ace5 ) ) , svymean( ~ as.numeric( ace5 == 1 ) ) ) )

# works but wrong!  incorrectly includes missings in the denominator
MIcombine( with( nsch_design , svymean( ~ as.numeric( ace5 %in% 1 ) ) ) )
© www.soinside.com 2019 - 2024. All rights reserved.