0

我正在使用 R 库中的函数survey,并且根据Stackoverflow 上的这个示例,我使用bquote()andas.name()动态构造用于指定变量的公式。

这适用于svytable(),但不适用于svychisq()。例如:

library(survey)

data(api)
dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc)

colvar <- 'sch.wide'
rowvar <- 'awards' 

svytable(bquote(~.(as.name(rowvar)) + .(as.name(colvar)) ), dstrat)

      sch.wide
awards      No     Yes
   No  1065.69 1170.74
   Yes    0.00 3957.57

svychisq(bquote(~.(as.name(rowvar)) + .(as.name(colvar)) ), dstrat)

terms.default(formula) 中的错误:没有术语组件或属性

我可以使这个动态变量规范更健壮,以便svychisq()选择正确的术语吗?

4

1 回答 1

4

看起来不像svychisq那样评估它的第一个参数svydesignbquote正在返回一个未被评估为正确公式的语言对象。您可以自己调用 eval 来克服该问题。

svychisq(eval(bquote(~.(as.name(rowvar)) + .(as.name(colvar)) )), dstrat)
#         Pearson's X^2: Rao & Scott adjustment
# 
# data:  svychisq(eval(bquote(~.(as.name(rowvar)) + .(as.name(colvar)))),     dstrat)
# F = 77.2769, ndf = 1, ddf = 197, p-value = 7.364e-16

您还可以考虑将公式构建为字符串

svychisq(as.formula(paste("~", rowvar, "+", colvar)), dstrat)
于 2014-11-13T20:50:58.303 回答