比例オッズの仮定の確認は、polr関数を使用した順序ロジスティック回帰で保持されます


9

MASSパッケージの 'polr'関数を使用して、15の連続的な説明変数を持つ順序カテゴリカル応答変数の順序ロジスティック回帰を実行しました。

コード(以下に表示)を使用して、モデルがUCLAのガイドで提供されているアドバイスに従ってプロポーショナルオッズの仮定を満たしていることを確認しました。ただし、さまざまなカットポイントの係数が類似しているだけでなく、まったく同じであることを示す出力について少し心配しています(下の図を参照)。

FGV1b <- data.frame(FG1_val_cat=factor(FGV1b[,"FG1_val_cat"]), 
                    scale(FGV1[,c("X","Y","Slope","Ele","Aspect","Prox_to_for_FG", 
                          "Prox_to_for_mL", "Prox_to_nat_border", "Prox_to_village", 
                          "Prox_to_roads", "Prox_to_rivers", "Prox_to_waterFG", 
                          "Prox_to_watermL", "Prox_to_core", "Prox_to_NR", "PCA1", 
                          "PCA2", "PCA3")]))
b     <- polr(FG1_val_cat ~ X + Y + Slope + Ele + Aspect + Prox_to_for_FG + 
                            Prox_to_for_mL + Prox_to_nat_border + Prox_to_village + 
                            Prox_to_roads + Prox_to_rivers + Prox_to_waterFG + 
                            Prox_to_watermL + Prox_to_core + Prox_to_NR, 
              data=FGV1b, Hess=TRUE)

モデルの概要を表示します。

summary(b)
(ctableb <- coef(summary(b)))
q        <- pnorm(abs(ctableb[, "t value"]), lower.tail=FALSE) * 2
(ctableb <- cbind(ctableb, "p value"=q))

これで、パラメーター推定の信頼区間を確認できます。

(cib <- confint(b)) 
confint.default(b)

しかし、これらの結果はまだ解釈が難しいので、係数をオッズ比に変換しましょう

exp(cbind(OR=coef(b), cib))

仮定を確認します。したがって、次のコードはグラフ化される値を推定します。まず、ターゲット変数の各値以上である確率のロジット変換を示します

FG1_val_cat <- as.numeric(FG1_val_cat)
sf <- function(y) {
  c('VC>=1' = qlogis(mean(FG1_val_cat >= 1)),
    'VC>=2' = qlogis(mean(FG1_val_cat >= 2)),
    'VC>=3' = qlogis(mean(FG1_val_cat >= 3)),
    'VC>=4' = qlogis(mean(FG1_val_cat >= 4)),
    'VC>=5' = qlogis(mean(FG1_val_cat >= 5)),
    'VC>=6' = qlogis(mean(FG1_val_cat >= 6)),
    'VC>=7' = qlogis(mean(FG1_val_cat >= 7)),
    'VC>=8' = qlogis(mean(FG1_val_cat >= 8)))
}
(t <- with(FGV1b, summary(as.numeric(FG1_val_cat) ~ X + Y + Slope + Ele + Aspect + 
                             Prox_to_for_FG + Prox_to_for_mL + Prox_to_nat_border + 
                             Prox_to_village + Prox_to_roads + Prox_to_rivers + 
                             Prox_to_waterFG + Prox_to_watermL + Prox_to_core + 
                             Prox_to_NR, fun=sf)))

上の表は、平行勾配の仮定なしに、従属変数を予測変数に1つずつ回帰した場合に得られる(線形)予測値を示しています。したがって、従属変数のカットポイントを変化させて一連のバイナリロジスティック回帰を実行し、カットポイント全体の係数の同等性を確認できます。

par(mfrow=c(1,1))
plot(t, which=1:8, pch=1:8, xlab='logit', main=' ', xlim=range(s[,7:8]))

ポーリング仮定チェック

私は統計の専門家ではないことをお詫び申し上げます。おそらくここで明らかなことが欠けています。ただし、モデルの前提条件をテストする方法に問題があるかどうかを把握するために、また同じ種類のモデルを実行する他の方法を把握するために、長い時間を費やしてきました。

たとえば、他の人がvglm関数(VGAMパッケージ内)とlrm関数(rmsパッケージ内)を使用していることを多くのヘルプメーリングリストで読みました(たとえば、こちらを参照してください: パッケージでのRの順序ロジスティック回帰における比例オッズの仮定VGAMおよびrms)。同じモデルを実行しようとしましたが、警告とエラーが発生し続けています。

たとえば、vglmモデルを 'parallel = FALSE'引数で近似しようとすると(前のリンクで述べたように、比例オッズの仮定をテストするために重要です)、次のエラーが発生します。

lm.fit(X.vlm、y = z.vlm、...)のエラー:NA / NaN / Inf in 'y'
さらに:警告メッセージ:
In Deviance.categorical.data.vgam(mu = mu、y = y、w = w、残差=残差、:0または1に近い近似値

上で作成したグラフがなぜこのように見えるのかを理解して説明してくれる人がいるかどうか尋ねてください。確かにそれが何かが正しくないことを意味している場合、単にpolr関数を使用するときに比例オッズの仮定をテストする方法を見つけてください。あるいは、それが不可能な場合は、vglm関数を使用することを試みますが、上記のエラーが発生し続ける理由を説明するために助けが必要になります。

注:背景として、ここには1000のデータポイントがあり、これは実際には調査地域全体のロケーションポイントです。カテゴリー応答変数とこれらの15の説明変数の間に関係があるかどうかを調べています。これら15の説明変数はすべて空間特性です(たとえば、標高、xy座標、森林への近さなど)。1000個のデータポイントはGISを使用してランダムに割り当てられましたが、私は層別サンプリング手法を採用しました。私は、8つの異なるカテゴリー応答レベルのそれぞれで125ポイントがランダムに選択されるようにしました。この情報がお役に立てば幸いです。

回答:


1

従属変数には8つの順序付けられたレベルがあるため、グラフで比例オッズの仮定をテストすると、独立変数ごとに8つの異なるシンボルが表示されます。x軸の値に選択した間隔が短すぎるため、独立変数ごとに2つのシンボルしか表示されません。私の予想が正しい場合は、x軸の値にもっと広い間隔を使用する必要があるだけです。このコードを試してください:

par(mfrow=c(1,1))
plot(t, which=1:8, pch=1:8, xlab='logit', main=' ', xlim=range(s[,3:9]))

5
これは、私たちの基準で答えるには十分ではありません。詳しく説明できますか?このコードは何をしますか/ PO仮定をチェックするためにどのように機能しますか?(たとえば、別のソフトウェアを使用する誰かがこの同じアプローチをどのように使用しますか?)
ガン-モニカを復元する

私はちょうど私の答えを改善しました。満足できるかどうか教えてください
ジョンM

1

だから、私はぐるぐる回ってこれを見つけました、そしてその理由で答えはまだ役に立つかもしれないと思います。間違いはあると思います

sf <- function(y) {
  c('VC>=1' = qlogis(mean(FG1_val_cat >= 1)),
    'VC>=2' = qlogis(mean(FG1_val_cat >= 2)),
    'VC>=3' = qlogis(mean(FG1_val_cat >= 3)),
    'VC>=4' = qlogis(mean(FG1_val_cat >= 4)),
    'VC>=5' = qlogis(mean(FG1_val_cat >= 5)),
    'VC>=6' = qlogis(mean(FG1_val_cat >= 6)),
    'VC>=7' = qlogis(mean(FG1_val_cat >= 7)),
    'VC>=8' = qlogis(mean(FG1_val_cat >= 8)))
}

どこで使うFG1_val_caty。ハレルの回帰モデリング戦略の例を使用すると、次のようになります。

library(Hmisc)
getHdata(support)
support <- support[complete.cases(support[, c("sfdm2", "adlsc", "sex", "age", "meanbp")]), ]
sfdm <- as.integer (support$sfdm2 ) - 1

sf1 <- function (y) {
  c(' Y ≥ 1 ' = qlogis (mean(sfdm >= 1)), 
    ' Y ≥ 2 ' = qlogis (mean(sfdm >= 2)),
    ' Y ≥ 3 ' = qlogis (mean(sfdm >= 3))
  )
}

sf2 <- function (y) {
  c(' Y ≥ 1 ' = qlogis (mean(y >= 1)), 
    ' Y ≥ 2 ' = qlogis (mean(y >= 2)),
    ' Y ≥ 3 ' = qlogis (mean(y >= 3))
  )
}

s1 <- summary(sfdm ~ adlsc + sex + age + meanbp, fun=sf1,
              data = support)
s2 <- summary(sfdm ~ adlsc + sex + age + meanbp, fun=sf2,
              data = support)  

plot(s1, which =1:3, pch =1:3, xlab = ' logit ', main = ' ', width.factor = 1.4, cex.lab = 0.75)

plot(s2, which =1:3, pch =1:3, xlab = ' logit ', main = ' ', width.factor = 1.4, cex.lab = 0.75)

ここに画像の説明を入力してください

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.