R-Svyciprop不适用于群集中的两个组

时间:2018-08-01 14:27:16

标签: r survey confidence-interval

我正在分析学校数据调查。我们在坦桑尼亚北部某个地区的167个病区进行了该手术。在某些病房中,我们抽样了一所学校,在其他三所学校。但是,几乎在所有情况下,我们每个病房都采样了两所学校。

目标是给出该学校中某种疾病的流行程度的点估计和置信区间(CI)。患病率记录为二进制变量(如果孩子患有疾病,则为1,否则为0)。我们每个学校抽样30个孩子。

运行代码时,我准备了一个if子句,以防病房只有一所学校。如果有三所学校,则代码运行正常。但是,如果有两所学校,则svyciprop说较低的CI为0,较高的CI为NA。为什么以及如何解决这个问题?

我提供了一个模拟代码,可以为一个病房重新创建数据。

[1] set.seed(123)
[2] schools <- rep(c(1,2), 30)
[3] prevalence <- sample(c(0,1), 60, replace=T, prob = c(0.7, 0.3))
[4] uniqueID <- 1:60

[5] df <- data.frame(schools, prevalence, uniqueID)
[6] df$fpc1 <- 0.0001 # As if from an infinite population
[7] df$fpc2 <- 0.0001

[8] t.clus1 <- svydesign(id = ~factor(schools) + factor(uniqueID), data = df, fpc =~ fpc1 + fpc2)
[9] svyciprop(formula =~ prevalence, design=t.clus1, method = "logit", level = 0.95)
[10] >>                   2.5% 97.5%
[11] >> prevalence 0.3   0.00    NA

如果运行代码,则最后一行将产生正确的均值(两所学校的30%的孩子有病),但配置项无法正常工作。

三所学校的工作过程完全相同。

set.seed(123)
schools <- rep(c(1,2,3), 30)
prevalence <- sample(c(0,1), 90, replace=T, prob = c(0.7, 0.3))
uniqueID <- 1:90

df <- data.frame(schools, prevalence, uniqueID)
df$fpc1 <- 0.0001
df$fpc2 <- 0.0001

t.clus1 <- svydesign(id = ~factor(schools) + factor(uniqueID), data = df, fpc =~ fpc1 + fpc2)
svyciprop(formula =~ prevalence, design=t.clus1, method = "logit", level = 0.95)
>>                     2.5% 97.5%
>> prevalence 0.3111 0.0733  0.72

#==========================编辑#============== ===========#

经过更多研究,我尝试与svyglmconfint达到同一观点,但结果有所不同。有什么想法吗?

回到第一个示例(有两个学校),并使用与第[8]行中定义的相同的t.clus1设计,我创建了一个称为svyglm的二项式族的mylogit对象。然后,我可以提取系数和置信区间。要获取该值,我需要反转logit链接。

mylogit <- svyglm(prevalence ~ 1, design = t.clus1, family=binomial())
summary(mylogit)

exp(mylogit$coefficients) / (1 + exp(mylogit$coefficients))
>> (Intercept) 
>>    0.3
exp(confint(mylogit)) / (1 + exp(confint(mylogit)))
>>                 2.5 %    97.5 %
>> (Intercept) 0.1694734 0.4305266

所以知道我得到的积分估计相同,但CI正常运行。它坚固吗?


已解决

svyciprop中使用svyglm与定义和使用confint对象作为参数的方法之间的区别在于,svyciprop将直接输入...的自由度。 confint默认为ddf = Inf时进行设计。更改后,两个置信区间都是相同的,即跨越整个概率范围。

1 个答案:

答案 0 :(得分:1)

嗨,谢谢您出色的最小可重现示例。我认为自由度计算会在只有两个聚类的调查数据集中的svyciprop上大放异彩

set.seed(123)
schools <- rep(c(1,2), 30)
prevalence <- sample(c(0,1), 60, replace=T, prob = c(0.7, 0.3))
df <- data.frame(schools, prevalence)
t.clus1 <- svydesign(id = ~schools , data = df)

# here's the problem..
# number of unique clusters (two) minus number of unique strata (one)
degf(t.clus1)

# check out the code here to confirm
survey:::degf.survey.design2

# all three of these commands are the same
svyciprop(~ prevalence, t.clus1 , df = degf(t.clus1) )
svyciprop(~ prevalence, t.clus1 , df = 1 )
svyciprop(~ prevalence, t.clus1 )


# when you add that third school (cluster), the CIs start to look better
svyciprop(~ prevalence, t.clus1 , df = 2 )


# set the degrees of freedom to `Inf` and more reasonable-looking CIs appear
svyciprop(~ prevalence, t.clus1 , df = Inf )