2012-05-17 82 views
0

我确定这是一个简单的问题,但是我对R的基本理解让我失望。它可能与字符串不等于变量的名称...系数名称在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))结果:names(c("pmper10"=1, z=1))

[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" 

结果结果的z

[1] "pmper10:se_race44) Other" 

这看起来不正确

[1] "pmper10" "z" 

!如何让“z”变成z的值?

回答

1

这个错误告诉你,向量contrasts应该匹配向量names(coef(stat)),它不匹配。

如果你看看svycontrast帮助:

svycontrast(stat, contrasts, ...) 

stats是你mod1contrasts是矢量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) 
}) 
+0

好了,但我怎么ž匹配?也就是说,如何将z表示的字符串放入向量而不是字母z? – 2012-05-17 19:51:36

+0

你能在这里粘贴'names(coef(mod))'的结果吗?了解你的'grep'命令在做什么会有帮助。但是可能你可以用'z'代替'paste(z)',尽管我没有看到它,所以我不确定。 – 2012-05-17 20:02:33

+0

我编辑了更多细节的问题。谢谢! – 2012-05-17 20:20:24