【问题标题】:Applying survey weights, and a weighted average concurrently同时应用调查权重和加权平均值
【发布时间】:2021-10-13 09:06:07
【问题描述】:

我有一项调查需要做两件事;

  1. 我需要使用调查包将调查权重应用于一组变量,以检索“加权”平均值 AND
  2. 我需要找到这些变量的加权平均值。

在完成这两项操作后,我只想要每个变量的最终加权平均值。

我知道如何分别找到调查加权平均值和加权平均值,但我不知道如何将它们一起应用,或者以何种顺序应用这些权重。下面是我的数据示例,以及如何分别找到“调查加权平均值”和“加权平均值”。

请参阅下面的示例数据:

library(survey) 

dat_in <- read_table2("code CCS trad_sec    Q1  enrolled    wgt
23  TRUE    sec 20  400 1.4
66  FALSE   trad    40  20  3.0
34  TRUE    sec 30  400 4.4
78  FALSE   sec 40  25  2.2
84  TRUE    trad    20  25  3.7
97  FALSE   sec 10  500 4.1
110 TRUE    sec 80  1000    4.5
123 FALSE   trad    33  679 4.8
137 TRUE    sec 34  764 5.2
150 FALSE   sec 43  850 5.6
163 TRUE    trad    45  935 6.0
177 FALSE   trad    46  1020    6.4
190 TRUE    trad    48  1105    6.7
203 FALSE   trad    50  1190    7.1
217 TRUE    trad    52  1276    7.5
230 FALSE   trad    53  1361    7.9
243 TRUE    trad    55  1446    8.3
256 FALSE   trad    57  1531    8.6
270 TRUE    sec 59  1616    9.0
283 FALSE   sec 60  1701    9.4
296 TRUE    sec 62  1787    9.8
310 FALSE   sec 64  1872    10.2
")

1.应用调查权重:

创建调查设计
SurveyDesign<- svydesign(id =~code,
                                 weights  = ~wgt,
                                 data = dat_in)
    
求加权平均值和表格
# For CCS FALSE, sec 
svymean(~Q1, subset(SurveyDesign,CCS=="FALSE" & trad_sec %in% c("sec")), na.rm = T)

# For CCS TRUE, sec
svymean(~Q1, subset(SurveyDesign,CCS=="TRUE" & trad_sec %in% c("sec")), na.rm = T)

2。求加权平均值:

基于注册的加权平均值

*根据评论编辑

dat_in %>% group_by(CCS, trad_sec) %>% mutate(wgtQ1 = weighted.mean(Q1, w = enrolled))

结合 1 和 2 的可能解决方案? (基于众包)

按组生成加权平均值

dat_in2 <- dat_in %>%    
  group_by(CCS, trad_sec) %>%     
  mutate(wgtQ1 = weighted.mean(Q1, w = enrolled)) %>%     
  ungroup

创建调查设计

SurveyDesign2<- svydesign(id =~code,                                   
                                     weights  = ~wgt,
                                     data = dat_in2)

**聚合加权平均的运行平均值

svymean(~wgtQ1, subset(SurveyDesign2,CCS=="FALSE" & trad_sec %in% c("sec")), na.rm = T)

我的直觉是我应该先应用加权平均值,然后再应用调查权重?上面的解决方案看起来很时髦,因为每一行都是每个组(CCS,trad_sec)的加权平均值,而设计对象应该被提供非聚合数据?

非常感谢所有建议!

【问题讨论】:

  • 我觉得你可以用dat_in %&gt;% group_by(CCS, trad_sec) %&gt;% mutate(wgtQ1 = weighted.mean(Q1, w = enrolled))简化步骤

标签: r survey


【解决方案1】:

我假设您关心标准误差估计(否则您可以将两组权重相乘并使用weighted.mean)。如果是这样,那么enrolled 变量和Q1 中是否存在采样不确定性以及是否也应将采样权重应用于该变量很重要。如果没有,请使用svyby 获取组均值并使用svycontrast 对其进行加权

> means<-svyby(~Q1, ~CCS, svymean, design=subset(SurveyDesign, trad_sec %in% "sec"),
   covmat=TRUE)
> means
        CCS       Q1       se
FALSE FALSE 50.36825 7.767602
TRUE   TRUE 53.51020 6.453270
> with(subset(dat_in, trad_sec=="sec"), by(enrolled, list(CCS), sum))
: FALSE
[1] 4948
--------------------------------------------------------------------------------------- 
: TRUE
[1] 5967
> svycontrast(means, c(4948/(4948+5967),5967/(4948+4967)))
         contrast     SE
contrast   55.036 5.2423

如果您也希望将抽样权重应用于 enrolled,我认为您希望 svyratio 估计抽样加权版本 sum(enrolled*Q1)/sum(enrolled)。你可以一次做一个:

> svyratio(~I(Q1*enrolled),~enrolled, 
        design=subset(SurveyDesign, trad_sec=="sec" & CCS==TRUE))
Ratio estimator: svyratio.survey.design2(~I(Q1 * enrolled), ~enrolled, design = subset(SurveyDesign, 
    trad_sec == "sec" & CCS == TRUE))
Ratios=
                 enrolled
I(Q1 * enrolled) 58.41278
SEs=
                 enrolled
I(Q1 * enrolled) 3.838715
> svyratio(~I(Q1*enrolled),~enrolled, 
       design=subset(SurveyDesign, trad_sec=="sec" & CCS==FALSE))
Ratio estimator: svyratio.survey.design2(~I(Q1 * enrolled), ~enrolled, design = subset(SurveyDesign, 
    trad_sec == "sec" & CCS == FALSE))
Ratios=
                 enrolled
I(Q1 * enrolled) 57.42204
SEs=
                 enrolled
I(Q1 * enrolled) 4.340065

svyby

> svyby(~I(Q1*enrolled),~CCS, svyratio, denom=~enrolled,
 design=subset(SurveyDesign, trad_sec=="sec"))
        CCS I(Q1 * enrolled)/enrolled se.I(Q1 * enrolled)/enrolled
FALSE FALSE                  57.42204                     4.340065
TRUE   TRUE                  58.41278                     3.838715

(注意:如果您指定运行示例代码所需的所有包,这会有所帮助;在您的情况下,readrread_table2

【讨论】:

  • 非常感谢!我认为这很接近。我需要找到 CCS==False 的 Q1 的加权平均值和 CCS==True 的 Q1(两个单独的加权平均值),但这给了我整个样本的加权平均值?
  • 是的,我确实关心获得准确的标准误差估计!而且我不需要对“已注册”应用加权,我只需要使用它来找到第一季度的加权平均值。
猜你喜欢
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 2017-08-06
  • 2014-03-11
  • 2013-02-16
相关资源
最近更新 更多