调查权重和引导权重以获得计数和 CI's
Survey weights and boostrap wieghts to get counts and CI's
我有一个包含调查数据的文件。例如,文件如下所示:
IDNUMBER AGE SEX NumPrescr OnPrescr SURV_WGT BSW1 BSW2....BSW500
123456 22 1 6 1 ... ... ... ...
这里,OnPrescrp 是一个二元变量,指示受试者是否服用处方药,BSW1 - BSW500 是 bootstrap 权重,SURV_WGT 是每个受试者的调查体重。大约有 20000 个条目。
我的任务是在某些年龄性别组细分中创建各种统计数据的表格。例如,有多少 17 至 24 岁的男性正在服用处方药。对于这些类型的计算,我都需要计数 N 和 95% CI。我对调查方法一点都不熟悉
据我了解,我不能简单地将每个类别中的人数相加以获得每个 question/category 的最终计数 N(即,不能只将所有 17 到 24 岁的男性相加正在使用处方药)。相反,在构建最终计数 N 和置信区间时,我必须考虑调查权重和 bootstrap 权重。
然后我在 STATA 中被告知这是一行命令:
svyset [pw=SURV_WGT], brr(bsw1-bsw500)
但是我在 R 中工作。 R 中的等效命令是什么?上面的命令究竟在做什么?
PS: 我的大约 20000 个人的样本是大约 3500 万人口的样本。
你会想要在 R 中使用 survey
包。这将是你在 R 中进行 weighted/complex 调查分析的最好朋友。
install.packages("survey")
survey
包有两个主要的分析步骤。首先是创建 svydesign
对象,它存储有关您的调查设计的信息,包括权重、重复权重、数据等。然后使用任意数量的分析函数对这些设计进行 运行 analysis/descriptives对象(例如,svymean
、svyby
- 用于子组分析、svyglm
等等)。
根据您的问题,您有调查权重和复制权重(自举)。虽然更常见的 svydesign
函数用于具有一组权重的调查,但您想要使用 svrepdesign
,这将允许您指定调查权重和复制权重。查看文档,但您可以执行以下操作:
mydesign <- svrepdesign(data = mydata,
weights = ~SURV_WGT,
repweights = "BSW[0-9]+",
type = "bootstrap",
combined.weights = TRUE)
您应该阅读文档,但简单地说:data
将是您的数据框,weights
采用您的单个调查权重向量,通常作为一个公式,repweights
非常适合它接受一个正则表达式字符串,该字符串按列名标识数据中的所有复制权重列,type
告诉设计您的复制权重是什么(它们是如何得出的),combined.weights
是否合乎逻辑复制权重包含采样权重 - 我假设这是真的,但它可能不是。
从这个设计对象,你可以然后运行分析。例如,让我们按性别计算平均处方数:
myresult <- svyby(~NumPrescr, # variable to pass to function
by = ~SEX, # grouping
design = mydesign, # design object
vartype = "ci", # report variation as confidence interval
FUN = svymean # specify function from survey package, mean here
)
希望对您有所帮助!
编辑:如果你想按年龄组查看某些内容,正如你所建议的,你需要创建一个为每个年龄组编码的字符或因子变量,并在你的 svyby
中使用该新变量打电话。
我有一个包含调查数据的文件。例如,文件如下所示:
IDNUMBER AGE SEX NumPrescr OnPrescr SURV_WGT BSW1 BSW2....BSW500
123456 22 1 6 1 ... ... ... ...
这里,OnPrescrp 是一个二元变量,指示受试者是否服用处方药,BSW1 - BSW500 是 bootstrap 权重,SURV_WGT 是每个受试者的调查体重。大约有 20000 个条目。
我的任务是在某些年龄性别组细分中创建各种统计数据的表格。例如,有多少 17 至 24 岁的男性正在服用处方药。对于这些类型的计算,我都需要计数 N 和 95% CI。我对调查方法一点都不熟悉
据我了解,我不能简单地将每个类别中的人数相加以获得每个 question/category 的最终计数 N(即,不能只将所有 17 到 24 岁的男性相加正在使用处方药)。相反,在构建最终计数 N 和置信区间时,我必须考虑调查权重和 bootstrap 权重。
然后我在 STATA 中被告知这是一行命令:
svyset [pw=SURV_WGT], brr(bsw1-bsw500)
但是我在 R 中工作。 R 中的等效命令是什么?上面的命令究竟在做什么?
PS: 我的大约 20000 个人的样本是大约 3500 万人口的样本。
你会想要在 R 中使用 survey
包。这将是你在 R 中进行 weighted/complex 调查分析的最好朋友。
install.packages("survey")
survey
包有两个主要的分析步骤。首先是创建 svydesign
对象,它存储有关您的调查设计的信息,包括权重、重复权重、数据等。然后使用任意数量的分析函数对这些设计进行 运行 analysis/descriptives对象(例如,svymean
、svyby
- 用于子组分析、svyglm
等等)。
根据您的问题,您有调查权重和复制权重(自举)。虽然更常见的 svydesign
函数用于具有一组权重的调查,但您想要使用 svrepdesign
,这将允许您指定调查权重和复制权重。查看文档,但您可以执行以下操作:
mydesign <- svrepdesign(data = mydata,
weights = ~SURV_WGT,
repweights = "BSW[0-9]+",
type = "bootstrap",
combined.weights = TRUE)
您应该阅读文档,但简单地说:data
将是您的数据框,weights
采用您的单个调查权重向量,通常作为一个公式,repweights
非常适合它接受一个正则表达式字符串,该字符串按列名标识数据中的所有复制权重列,type
告诉设计您的复制权重是什么(它们是如何得出的),combined.weights
是否合乎逻辑复制权重包含采样权重 - 我假设这是真的,但它可能不是。
从这个设计对象,你可以然后运行分析。例如,让我们按性别计算平均处方数:
myresult <- svyby(~NumPrescr, # variable to pass to function
by = ~SEX, # grouping
design = mydesign, # design object
vartype = "ci", # report variation as confidence interval
FUN = svymean # specify function from survey package, mean here
)
希望对您有所帮助!
编辑:如果你想按年龄组查看某些内容,正如你所建议的,你需要创建一个为每个年龄组编码的字符或因子变量,并在你的 svyby
中使用该新变量打电话。