tabmeans.survey 多分类变量的问题。无法识别设计中的变量

Issue with the tabmeans.survey multi-categorical variables. Not recognising variables in the design

我在使用 survey 和 tab 包分析 r 上的调查数据时遇到了问题。

我认为我正在正确设置调查设计对象,但是当我尝试 运行 tabmean.survey 函数比较 2 个以上类别的均值时,该函数无法识别变量在设计中。

这是使用我的数据的示例:

svyd<-svydesign(id=~psu,                      #PSU variable
                  strata=~strata,             #Strata variable              
                  weights=~ca_betaindin_xw,   #Weight variable
                  data=usds)

svyd_emp<-subset(svyd, usds$samp_employ==1)   #subset the data to required analytic sample

t1<-tabmeans.svy(age~ethnicity, 
                 design = svyd_emp)           #Run tabmeans.svy comparing means of age by ethnicity

产生此错误的原因:

Error in svyglm.survey.design(Age ~ 1, design = design) : all variables must be in design= argument

当我用二进制变量尝试相同的函数时,该函数有效

t2<-tabmeans.svy(age~sex, 
                 design = svyd_emp)           #Run tabmeans.svy comparing means of age by sex
                                              #WORKS

使用此函数比较多分类变量的均值以前是有效的。我不明白为什么函数现在会抛出错误。 survey.design 对象具有对象中列出的变量。

我无法共享我的数据,但我使用调查包中的 'api' 数据集重现了同样的问题。

data(api)
sdesign<-svydesign(id=~dnum+snum, 
                   strata=~stype, 
                   weights=~pw, 
                   data=apistrat, 
                   nest = TRUE)
t3<-tabmeans.svy(api00~stype,            # stype has 3 categories = DOESNT WORK
                    design=sdesign)
t4<-tabmeans.svy(api00~sch.wide,
                    design=sdesign)      # sch.wide has 2 categories = WORKS

感谢任何关于如何解决此问题的想法或建议。

非常感谢

感谢您提供可重现的示例。当我 运行 它时,我得到

> t3<-tabmeans.svy(api00~stype,            # stype has 3 categories = DOESNT WORK
+                     design=sdesign)
Error in svyglm.survey.design(Age ~ 1, design = design) : 
  all variables must be in design= argument
> traceback()
4: stop("all variables must be in design= argument")
3: svyglm.survey.design(Age ~ 1, design = design)
2: svyglm(Age ~ 1, design = design)
1: tabmeans.svy(api00 ~ stype, design = sdesign)

这令人不安,因为它为什么试图找到一个 Age 变量? (这在您的示例中被掩盖了一点,因为您有一个 age 变量)。

查看 tabmeans.svy 的代码,我明白了

    if (num.groups == 2) {
        fit <- svyttest(formula, design = design)
        diffmeans <- -fit$estimate
        diffmeans.ci <- -rev(as.numeric(fit$conf.int))
        p <- fit$p.value
    }
    else {
        fit1 <- svyglm(Age ~ 1, design = design)
        fit2 <- svyglm(Age ~ Sex, design = design)
        fit <- do.call(anova, c(list(object = fit1, object2 = fit2), 
            anova.svyglm.list))
        p <- as.numeric(fit$p)
    }

这解释了问题:如果有两个以上的组,它会忽略您的变量,而是测试 SexAge 的影响。

我怀疑维护者的剪切和粘贴错误。我已提交 GitHub 问题。不幸的是,我看不到简单的解决方法。