我确信这是一个简单的问题,但我对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的值?
答案 0 :(得分:2)
此错误告诉您向量contrasts
应与向量names(coef(stat))
匹配,并且它不匹配。
如果您查看svycontrast
帮助:
svycontrast(stat, contrasts, ...)
stats
是您的mod1
,contrasts
是向量c("pmper10"=1, z=1)
。
键入names(coef(mod1))
和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)
})