0

我确信这是一个简单的问题,但我对 R 的基本理解阻碍了我。它可能与不等于变量名称的字符串有关......

我正在尝试使用调查包与对比进行交互。

se_race4 是一个因子变量,有 4 个类别:“1)非西班牙裔白人”、“2)黑人”、“3)西班牙裔”、“4)其他”

我像这样运行模型:

mod1 <- lm(sysbp ~ pmper10*se_race4 + age_baseline, data=mydata)

然后我看一些对比:

svycontrast(mod1,c("pmper10"=1)

以下命令有效:

svycontrast(mod1,c("pmper10"=1,"pmper10:se_race42) Black"=1))
svycontrast(mod1,c("pmper10"=1,"pmper10:se_race43) Hispanic"=1))
svycontrast(mod1,c("pmper10"=1,"pmper10:se_race44) Other"=1))

但这不是(即使 'z' 看起来就像上面的字符串):

for(z in grep("pmper10:se_race4",names(coef(mod1)),value=TRUE)) {
    svycontrast(mod1,c("pmper10"=1, z=1))
}

R给了我错误:

Error in match.names(names(coef(stat)), contrasts) : names not matched

我错过了什么?

编辑:结果names(coef(mod1))

[1] "(Intercept)"                 "pmper10"                    
[3] "se_race42) Black"            "se_race43) Hispanic"        
[5] "se_race44) Other"            "age_baseline"               
[7] "pmper10:se_race42) Black"    "pmper10:se_race43) Hispanic"
[9] "pmper10:se_race44) Other"

结果names(c("pmper10"=1, z=1))

 [1] "pmper10" "z" 

的结果z

[1] "pmper10:se_race44) Other"

这看起来不太对!我如何让“z”变成z的值?

4

1 回答 1

2

此错误告诉您 vectorcontrasts应该与 vector 匹配names(coef(stat)),但它不匹配。

如果您寻求svycontrast帮助:

svycontrast(stat, contrasts, ...)

stats是你的mod1并且contrasts是向量c("pmper10"=1, z=1)

键入names(coef(mod1))and names(c("pmper10"=1, z=1)),查看错误在哪里。

您应该将for命令替换为:

sapply(grep("pmper10:se_race4",names(coef(mod1)),value=TRUE), function(z) {
    svycontrast(mod1,c("pmper10"=1, paste(z)=1))
})

编辑:

这不是最优雅的解决方案,但似乎有效:

sapply(grep("pmper10:se_race4",names(coef(mod1)),value=TRUE), function(z) {
    contrasts <- c(1,1)
    names(contrasts) <- c("pmper10",z)
    svycontrast(mod1,contrasts)
})
于 2012-05-17T19:46:02.713 回答