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ポイントがランダムに選択されるようにしました。この情報がお役に立てば幸いです。