R中的简单后分层权重

机器算法验证 r 民意调查 事后 分层
2022-04-01 00:03:58

我刚刚接触了ANES(美国国家选举研究) 2008 数据集,并想在 R 中进行一些简单的分析。但是,我以前从未使用过这种复杂的数据集,而且我遇到过一个问题。

该调查使用过采样,并且具有分层后权重的变量。我对这意味着什么只有最模糊的概念,所以我阅读了上面的维基百科页面,我从概念上理解。不幸的是,我不知道如何操纵 R 以便在我进行分析时反映分层后的权重。

虽然从概念上讲,过采样的想法并没有让我感到困惑,但 R“调查”包的以下文档对我来说是完全无法理解的。我将展示到目前为止我发现的内容,我真的很感激解释这些方法发生了什么,或者,如果有人知道将分层后权重应用于变量数据框的更简单方法,我也很想来这里。

因此,我从 CRAN 找到了“调查”包,并且我有手册,并且在查看之后,似乎最有希望的方法是:

postStratify(design, strata, population, partial = FALSE, ...)

但是,当我查看文档以了解每个参数需要传递的内容时,我完全迷失了方向。它们如下:

design           A survey design with replicate weights

strata           A formula or data frame of post-stratifying variables

population       A table, xtabs or data.frame with population frequencies

partial          if TRUE, ignore population strata not present in the sample

这些对我来说都没有多大意义,但我很确定设计参数应该是这个包中定义的类:

svydesign(ids, probs=NULL, strata = NULL, variables = NULL, fpc=NULL, 
    data = NULL, nest = FALSE, 
    check.strata = !nest, weights=NULL,pps=FALSE,...)

如果您注意到,这里有很多可选参数,它们似乎都在做类似类型的事情(至少对我来说,在阅读了文档之后......)。

我基本上不知道为什么这在 R 中如此复杂。我误解了事情吗?有没有更简单的方法来做到这一点?任何帮助,将不胜感激。

3个回答

查看手册postStratify中的示例,您是正确的:您似乎需要提供一个对象(尽管您可以根据需要使用来指定它)。 svydesignsvrepdesign

svydesign对象必须ids; 所有其他都是可选的,尽管您几乎肯定会想要data使用一些东西,并且您可能会想要其他一些。在这个阶段,我建议你忽略所有出现在data.

postStratify还需要strata对后分层的变量:示例使用apiclus1$stype它简单地指定学校类型(E、M 或 H)。它还需要population您可以指定自己或从其他来源获取的内容:data.frame(stype=c("E","H","M"), Freq=c(4421,755,1018))正如您所说,该示例给出了,table或者 xtabs可以代替使用。

同样,除非您知道自己需要它们,否则您可以忽略所有其他选项,因此您最终可以得到像示例中的dclus1p<-postStratify(dclus1, ~stype, pop.types).

如果权重已经存在,那真的很简单。你会有类似的东西:

ANESData <- read.spss("C:/Data/ANESSurvey.spss ... bla bla bla)

# Fix id and weights for your data. 
ANESDesign <- svydesign(id = ~SAMPID, data = ANESData , weights = ~expwgt)    

我假设你已经加载了foreign和包....survey

我建议看看这个 Github repo:

在 R 中分析 ANES

你会想做这样的事情:

anes.design <- 
    svydesign( 
        ~psu_full , 
        strata = ~strata_full , 
        data = y , 
        weights = ~weight_full , 
        nest = TRUE 
    )

y您加载的数据文件在哪里。