【问题标题】:Run svymean on all variables [duplicate]在所有变量上运行 svymean [重复]
【发布时间】: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 ) &amp; !is.na( var2 ) ) ),这可能与svymean( ~ var1 , design , na.rm = TRUE ) 不同,具体取决于var2 中的缺失值

标签: r dplyr survey


【解决方案1】:

您可以使用reformulate动态构造公式。

library(survey)
svymean(reformulate(names(nhanesAnalysis)), ageDesign, na.rm = TRUE)

#                 mean        SE
#fpl            3.0134    0.1036
#age           45.4919    0.5273
#gender         1.5153    0.0065
#persWeight 80773.3847 5049.1504
#psu            1.5102    0.1330
#strata       126.1877    0.1506

这与在函数中单独指定每一列的输出相同。

svymean(~age + fpl + gender + persWeight + psu + strata, ageDesign, na.rm = TRUE)

【讨论】:

  • 是否可以同时显示变量标签?我已经标记了变量(实际变量的标题是 Q50、Q20 等。)所以如果可能的话,我想避免在调用 svymean 之后附加名称......
  • 您的意思是更改 svymean 的输出中的行名吗?您可以使用 rownames(result) &lt;- labels 更改它
  • 不是真的,我的意思是每个变量都有一个标签属性,例如 num [1:1199] NA NA 0 NA 1 NA 0 0 NA NA ... - attr(*, "label ")= chr "Q10_1.Dance 通过成绩单评估和报告",我希望它显示在行名中...
  • 如何从中提取标签属性?你能举个例子吗?
猜你喜欢
  • 1970-01-01
  • 2018-06-18
  • 2011-03-30
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多