0

これは簡単な質問だと思いますが、R の初歩的な理解が足を引っ張っています。おそらく、文字列が変数の名前と同等ではないことに関係しています...

調査パッケージを使用して、コントラストとの相互作用を実行しようとしています。

se_race4 は、「1) 非ヒスパニック系白人」、「2) 黒人」、「3) ヒスパニック系」、「4) その他」の 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

このエラーは、 vector が vectorcontrastsと一致する必要があることを示していますが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)
})
于 2012-05-17T19:46:02.713 に答える