Как тиражировать 75-процентные и 95% доверительные интервалы SUDAAN по возрастным группам в пакете "обследования" R?

Я пытаюсь воспроизвести квантильные оценки с 95% доверительными интервалами по возрастным группам из SAS и SUDAAN в пакете "опрос" в R с данными NHANES. Функция пакета svyby в сочетании с функцией svyquantile позволяет довольно легко выполнить этот анализ; мои результаты близки, но не совсем совпадают с результатами, полученными от SUDAAN.

Я полагаю, что это может быть связано с рядом аргументов, которые функции svyby и svyquantile позволяют настраивать. Аргументы, которые принимает функция 'svyquantile', включают 'method', 'interval.type', 'ties,' interval.type ',' return.replicates 'и т. Д.

Я нашел эту статью, которая объясняет, как реплицировать некоторые функции SUDAAN с пакетом 'survey', но не объясняет, как реплицировать квантильные оценки. В результате некоторых исследований того, как SUDAAN оценивает квантили, я считаю, что аргумент "метод" должен быть установлен как "линейный". Кроме того, я попытался установить различные аргументы для различных параметров, но мне не повезло, точно воспроизводя оценки SUDAAN.

Кто-нибудь знает, как реплицировать квантильные оценки SUDAAN и 95% доверительные интервалы по группам, или есть какая-либо документация по методологии, используемой SUDAAN, чтобы лучше воспроизвести этот анализ с использованием пакета "survey" в R?

В приведенном ниже коде я показал свой подход. Результаты функции 'svyby' представляются разумными оценками, однако они не идентичны результатам, полученным от SUDAAN и SAS. У меня нет доступа к SUDAAN и SAS, но моя цель - воспроизвести их результаты в R. В частности, 75-й процентиль для возрастной группы 60+ по SUDAAN и SAS для PCB 118 составляет 25,89 нг / г липидов (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 ответ

Из документации к пакету 'survey': "Объединение interval.type="betaWald"и ties="discrete"(близко к) предложено Shah and 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")
Другие вопросы по тегам