No.12558 Cox比例ハザードモデルで説明変数の間に強い相関がある場合の対策について  【しょうじ】 2010/05/01(Sat) 20:17

はじめまして,ご教示いただければ幸いです。私は医師で,臨床研究をしています。

ある疾病の発症に対する 腎機能(C)と尿毒症毒素(S)のリスクをCox比例ハザードモデルで検討したいと考えています。CとSはいずれも連続変数で,腎機能低下により血中に蓄 積します。Sは食事で増加,薬剤で減少しますので,同じ腎機能でもSのレベルに差が生じます。解析の目的は,疾病発症に与えるCで調整後のSのリスクを明 らかにすることです。

CoxにCとS,他の共変量を入れるとCは発症の有意なリスクですが,Sは有意にはなりません。CとSの重相関係数 は約0.5で多重共線性があると思います。そこで, C(のみ)でSを予測するモデルを作成し,Sの残差をCoxの説明変数にCと共に入れることを考えています。

平たく言えば,腎機能から予測されるよりも毒素が溜まっていれば疾病が発症するリスクが高くなるかを見れるかと考えています。このような,相関の強い一方の変数からの予測値と実測値との差を解析に用いるのは,問題があるでしょうか?

No.12559 Re: Cox比例ハザードモデルで説明変数の間に強い相関がある場合の対策について  【青木繁伸】 2010/05/03(Mon) 20:55

> CとSの重相関係数は約0.5で多重共線性があると思います

重相関係数ではなく相関係数ではないかと思いますけど(二変数間の重相関係数は相関係数の絶対値ではありますが)。
そ れにしても,本来の多重共線性は,重回帰分析において正規方程式で独立変数間に共線性が認められる(数学的に言えば,次数よりランクの方が小さい,つまり 独立変数が従属である。数値計算的に言えば逆行列が求められない。)などのこと。Cox の比例ハザードモデルにも同じ概念があるのかな?(Cox の比例ハザードモデルで正規方程式とかその逆行列とか考える?)
そもそも,相関係数が0.5程度で多重共線性があるとは思えません。もっとも,多 重共線性は,二変数間の相関係数だけで判断できるものではなく,他の変数も含めての話でしょう。ある独立変数のセットで多重共線性の目安となる分散拡大要 因(トレランス)を計算するのは簡単なことなので計算してみたらどうなるでしょうか。
http://aoki2.si.gunma-u.ac.jp/lecture/Regression/mreg/mreg6.html
http://aoki2.si.gunma-u.ac.jp/R/tolerance.html
ちなみに,3 変数で相互の相関係数が全部 0.5 であっても,多重共線性は生じません。
> x <- gendat(100, tri.mat(c(1, 0.5, 1, 0.5, 0.5, 1), 3))
> cor(x) # 3 変数間の相関係数行列
[,1] [,2] [,3]
[1,] 1.0 0.5 0.5
[2,] 0.5 1.0 0.5
[3,] 0.5 0.5 1.0
> tolerance(x)
tolerance VIF
Var1 0.6666667 1.5
Var2 0.6666667 1.5
Var3 0.6666667 1.5
tri.mat, tolerance は,http://aoki2.si.gunma-u.ac.jp/R/index.html にある関数です。

No.12560 Re: Cox比例ハザードモデルで説明変数の間に強い相関がある場合の対策について  【しょうじ】 2010/05/03(Mon) 22:35

早々にご回答をいただき,ありがとうございます。先生からお返事をいただき,大変うれしく思います。

ま ず,重相関係数と決定係数を混同していました。初歩的な間違いで申し訳ありません。正確には,Cとlog化SとのPearson's 相関係数は0.682,Cから算出したより正確な腎機能の指標とされるGとlog化SとのPearson's 相関係数は-0.703です。(約0.5というのは決定係数でした)

いま手元に分散拡大要因をRで計算できる環境はないのですが,件の疾 病の検査指標である連続変数Xを目的変数としてG,log化S,その他の共変量を説明変数として作成した重回帰モデルにおいて,GのVIFは2.663, log化SのVIFは2.121となります。(SPSSで計算していました)重回帰分析の段階では,このVIFからは多重共線性はないとひとまず判断しま した。ここまでは合っていると考えてよろしいでしょうか?

次に3年間の経過観察から,Cox比例ハザードモデルに疾病の発生をアウトカム とし,観察開始時のlog化SとCまたはG,共変量を説明変数としてモデルに入れるとlog化Sが有意に残らないので,多重共線性を疑ったという次第で す。Cox比例ハザードモデルにおいて多重共線性とは何ぞやとのご質問にお答えするには,手元に私の参考にした書籍がありませんので明日お返事申し上げま す。

No.12561 Re: Cox比例ハザードモデルで説明変数の間に強い相関がある場合の対策について  【しょうじ】 2010/05/04(Tue) 09:41

比例ハザードモデルにおける多重共線性に関してです。

「SPSSで学ぶ医療系多変量データ解析 (対馬栄輝著)」に,「多重ロジスティック回帰分析と同様,比例ハザード分析でもVIFのような多重共線性の診断結果は出力されないので,事前に相関行列 表または散布図行列を観察する。」という記載があります(p.211)。それで,比例ハザード分析でも,多重共線性が原因で検出力が落ちることがあると考 えました。この書籍は,正規方程式とか逆行列といった理論的な説明は省略しています。比例ハザードモデルではこのような概念は一般的ではないと理解すれば よろしいのでしょうか?

No.12564 Re: Cox比例ハザードモデルで説明変数の間に強い相関がある場合の対策について  【青木繁伸】 2010/05/04(Tue) 21:02

> この書籍は,正規方程式とか逆行列といった理論的な説明は省略しています。比例ハザードモデルではこのような概念は一般的ではないと理解すればよろしいのでしょうか?

比例ハザードモデルでは,正規方程式も作らないし,それを解くために逆行列も求めないのではなかったでしょうか。だとしたら,VIF とか トレランスも定義されないのではないでしょうか。

No.12565 Re: Cox比例ハザードモデルで説明変数の間に強い相関がある場合の対策について  【青木繁伸】 2010/05/04(Tue) 21:53

理論的に考えるのは苦手なので,シミュレーションしてみました。
独立変数に x1, x2 の2つを考え,時間とエンドポイントとの相関も考慮しました。
結果として,x1 と x2 の相関が相当高くても,Cox の比例ハザードモデルでは x1, x2 ともに同じくらいの係数が推定されるようです。重回帰分析のように,係数の符号が異なる(係数の大きさが極端に異なる)ということはまれなようです。
> n <- 10000
> x <- gendat(n,tri.mat(c(1, 0.7, 1, 0.7, 0.7, 1, 0.7, 0.7, 0.8, 1 ), 4))
> test <- list(time=x[,1], status=ifelse(x[,2]<0, 0, 1), x1=x[,3], x2=x[,4])
> cor(as.data.frame(test))
time status x1 x2
time 1.0000000 0.5471805 0.7000000 0.7000000
status 0.5471805 1.0000000 0.5529265 0.5531251
x1 0.7000000 0.5529265 1.0000000 0.8000000
x2 0.7000000 0.5531251 0.8000000 1.0000000 # x1 と x2 の相関は 0.8
> coxph(Surv(time, status) ~ x1+x2, test)
Call:
coxph(formula = Surv(time, status) ~ x1 + x2, data = test)

coef exp(coef) se(coef) z p
x1 -0.305 0.737 0.0242 -12.6 0
x2 -0.285 0.752 0.0240 -11.9 0 # coef はほぼ同じ大きさ(何回か繰り返してみればよい)

Likelihood ratio test=912 on 2 df, p=0 n= 10000
> #############################
> # 2 回目のシミュレーション
> x <- gendat(n,tri.mat(c(1, 0.7, 1, 0.7, 0.7, 1, 0.7, 0.7, 0.8, 1 ), 4))
> test <- list(time=x[,1], status=ifelse(x[,2]<0, 0, 1), x1=x[,3], x2=x[,4])
> cor(as.data.frame(test))
time status x1 x2
time 1.0000000 0.5640321 0.7000000 0.7000000
status 0.5640321 1.0000000 0.5609692 0.5576255
x1 0.7000000 0.5609692 1.0000000 0.8000000
x2 0.7000000 0.5576255 0.8000000 1.0000000
> coxph(Surv(time, status) ~ x1+x2, test)
Call:
coxph(formula = Surv(time, status) ~ x1 + x2, data = test)

coef exp(coef) se(coef) z p
x1 -0.285 0.752 0.0242 -11.7 0
x2 -0.276 0.759 0.0242 -11.4 0

Likelihood ratio test=850 on 2 df, p=0 n= 10000

No.12568 Re: Cox比例ハザードモデルで説明変数の間に強い相関がある場合の対策について  【しょうじ】 2010/05/05(Wed) 06:37

ご教示いただきましてありがとうございました。多重共線性の概念は重回帰分析におけるものであること,Cox比例ハザードモデルでは二変量の相関が高くても係数の推定が不安定にはならないと理解しました。

連休中にも関わらず早々にお返事をいただき,厚くお礼申し上げます。

● 「統計学関連なんでもあり」の過去ログ--- 043 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る