我第一次在 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 值?
(我不确定如何使用大型、复杂、多重插补数据集生成最小可重复的示例,但欢迎建议)。
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 ) ) ) )