【发布时间】:2020-10-22 03:11:40
【问题描述】:
------短篇小说--------
我想对数据集中的所有变量运行 svymean(假设它们都是数字)。我从这里的指南中提取了这个叙述:https://stylizeddata.com/how-to-use-survey-weights-in-r/
我知道我可以对所有变量运行 svymean,如下所示:
svymean(~age+gender, ageDesign, na.rm = TRUE)
但是,我的真实数据集有 500 个变量长(它们都是数字),我需要更有效地同时获得所有平均值。我尝试了以下方法,但它不起作用。
svymean(~., ageDesign, na.rm = TRUE)
有什么想法吗?
------用真实数据的长解释-----
library(haven)
library(survey)
library(dplyr)
导入 NHANES 人口统计数据
nhanesDemo <- read_xpt(url("https://wwwn.cdc.gov/Nchs/Nhanes/2015-2016/DEMO_I.XPT"))
复制和重命名变量,使它们更直观。 “fpl”是百分比 联邦贫困线。范围从 0 到 5。
nhanesDemo$fpl <- nhanesDemo$INDFMPIR
nhanesDemo$age <- nhanesDemo$RIDAGEYR
nhanesDemo$gender <- nhanesDemo$RIAGENDR
nhanesDemo$persWeight <- nhanesDemo$WTINT2YR
nhanesDemo$psu <- nhanesDemo$SDMVPSU
nhanesDemo$strata <- nhanesDemo$SDMVSTRA
由于有 47 个变量,我们将只选择我们将在其中使用的变量 这个分析。
nhanesAnalysis <- nhanesDemo %>%
select(fpl,
age,
gender,
persWeight,
psu,
strata)
调查权重
这里我们使用“svydesign”来分配权重。我们将使用这个新设计 运行我们的分析时使用变量“nhanesDesign”。
nhanesDesign <- svydesign(id = ~psu,
strata = ~strata,
weights = ~persWeight,
nest = TRUE,
data = nhanesAnalysis)
这里我们使用“子集”告诉“nhanesDesign”我们只想查看一个 特定的亚群(即年龄在 18-79 岁之间的人)。这是 重要的事情。如果你不这样做,只是以不同的方式限制它 您的估计不会有正确的 SE。
ageDesign <- subset(nhanesDesign, age > 17 &
age < 80)
统计
我们将使用“svymean”来计算年龄的总体平均值。名称 参数“TRUE”从计算中排除缺失值。我们看到 平均年龄为 45.648,标准误为 0.5131。
svymean(~age, ageDesign, na.rm = TRUE)
我知道我可以对所有变量运行 svymean,如下所示: svymean(~年龄+性别,ageDesign,na.rm = TRUE) 但是,我的真实数据集有 500 个变量长,我需要更有效地同时获得所有方法。我尝试了以下但它不起作用。 svymean(~., ageDesign, na.rm = TRUE)
【问题讨论】:
-
只是注意到
svymean( ~ var1 + var2 , design , na.rm = TRUE )的行为类似于svymean( ~ var1 + var2 , subset( design , !is.na( var1 ) & !is.na( var2 ) ) ),这可能与svymean( ~ var1 , design , na.rm = TRUE )不同,具体取决于var2中的缺失值