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)
}
这解释了问题:如果有两个以上的组,它会忽略您的变量,而是测试 Sex
对 Age
的影响。
我怀疑维护者的剪切和粘贴错误。我已提交 GitHub 问题。不幸的是,我看不到简单的解决方法。
我在使用 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)
}
这解释了问题:如果有两个以上的组,它会忽略您的变量,而是测试 Sex
对 Age
的影响。
我怀疑维护者的剪切和粘贴错误。我已提交 GitHub 问题。不幸的是,我看不到简单的解决方法。