如何在R的“调查”数据包中按年龄组复制SUDAAN的第75个百分位和95%的置信区间?

时间:2019-02-05 20:06:57

标签: r sas confidence-interval quantile quartile

我正在尝试使用NHANES数据在R的“调查”数据包中按年龄组从SAS和SUDAAN复制具有95%置信区间的分位数估计。软件包的“ svyby”功能与其“ svyquantile”功能相结合,使您可以轻松地执行此分析。我的结果很接近,但 与SUDAAN生成的结果不完全相同。

我相信这可能是由于“ svyby”和“ svyquantile”功能允许您自定义的许多参数所致。 “ svyquantile”函数采用的参数包括“方法”,“ interval.type”,“关系”,“ interval.type”,“ return.replicates”等。

我找到了this article,它说明了如何使用“调查”包复制某些SUDAAN函数,但没有说明如何复制分位数估计。通过对SUDAAN如何估计分位数的一些研究,我认为应将“方法”论点设置为“线性”。除此之外,我还尝试将各种参数设置为不同的参数,但是没有运气准确地复制SUDAAN估算值。

有人知道如何按组复制SUDAAN分位数估计值和95%的置信区间,或者是否有任何有关SUDAAN使用的方法的文档,以便使用R中的“调查”包更好地复制此分析?

在下面的代码中,我展示了我的方法。 “ svyby”函数的结果似乎是合理的估计,但是,它们与SUDAAN和SAS产生的结果并不相同。我无法使用SUDAAN和SAS,但我的目标是在R中复制他们的结果。具体而言,根据SUDAAN和SAS对于PCB 118的60岁以上年龄组的第75个百分位数是25.89 ng / g脂质(95% CI:22.97-30.17)。谢谢。

library(RNHANES)
library(survey)

# import NHANES 2003-2004 PCB Dataset 
pcbs <- nhanes_load_data("L28DFP_C", "2003-2004", demographics = T)

# create appropriate age groups
pcbs$age <- ifelse(pcbs$RIDAGEYR < 20, "<20",
            ifelse(pcbs$RIDAGEYR >= 20 & pcbs$RIDAGEYR <= 39, "20-39",
            ifelse(pcbs$RIDAGEYR >= 40 & pcbs$RIDAGEYR <= 59, "40-59",
            ifelse(pcbs$RIDAGEYR >= 60, "60+", ""))))
pcbs$age <- as.factor(pcbs$age)
levels(pcbs$age) = c("<20", "20-39", "40-59", "60+")

# assign survey design
nhanes.dsgn <- svydesign(id = ~SDMVPSU, strata = ~SDMVSTRA , weights = ~ WTSC2YR, data = pcbs, nest = TRUE)

# quantiles for subpopulations
svyby(~LBX118LA, ~age, nhanes.dsgn, svyquantile, quantiles=0.75, ci=TRUE, alpha=0.05,vartype="ci", na.rm=T, method = "linear")

1 个答案:

答案 0 :(得分:0)

摘自“调查”软件包的文档:“ Combining interval.type =“ betaWald”和ties =“ discrete”与Shah和Vaish(2006)的SUDAAN版本中的建议(接近)。

所以

PCB118LA <- svyby(~LBX118LA, ~age, nhanes.dsgn, svyquantile, quantiles = 0.75, ci=TRUE, alpha=0.05, vartype="ci", na.rm=T, method = "linear", ties = "discrete", interval.type="betaWald")