1. ホーム
  2. r

[解決済み】GLM解析での警告

2022-02-01 08:41:45

質問

正規化・変換したデータセットを用いてGLM分析を行ったところ、以下のような警告メッセージが表示されました。

<ブロッククオート

glm.fit: フィットした確率の数値が0か1が発生した glm.fit: アルゴリズムが収束しなかった glm.fit: 数値的に0または1が発生した確率をあてはめる

次に、シミュレーションのデータフレームを作成し、実際のデータセットに対して行ったのと同じ方法で実行したところ、警告は出ませんでした。 以下は、私のコードとシミュレーションデータセットです。 何かお手伝いいただけると幸いです。 ありがとうございました。

library(tidyverse)
library(broom)
data <- data.frame(B = c("m","m","m","m","m", "m", "f","f","f","f","f"),
                   G= c("s","s","s","u","u", "u", "k","k","k","r","r"),
                   g1 = c(35, 2, 3, 4, 5, 6, 7, 10, 12, 41, 76), 
                   g2 = c(20, 2, 7, 2, 8, 5, 5, 3, 7, 2, 12), 
                   g3 = c(5, 0, 4, 5, 2, 4, 8, 9, 20, 1, 11,
                   g4 = c(1,3,4,5,7,3,1,5,7,3,10),
                   g5=  c(20,23, 27, 35, 12, 10, 17, 24, 21, 15, 16)))
data %>% 
  pivot_longer(-c(1:3)) %>% 
  group_split(name) %>% 
  set_names(nm = map(., ~ first(.x$name))) %>% 
  map(~ tidy(glm(factor(data$B) ~ value,family="binomial", data = .))) %>% 
  map(~ filter(., p.value > 0.05)) %>% 
  bind_rows(.id = "var")```



解決方法は?

完全分離または準完全分離の問題を抱えている可能性が高いです。予測変数のある組み合わせに対して、失敗のうち成功だけを観察しているのです。これは、小さな標本や大きなパラメータ空間を持つロジスティック回帰では非常に一般的な現象です。

全パラメータの推定値を得るために、尤度に小さなペナルティを加える実装がいくつかあります。Firth logistic regressionを調べてみてください。Rでは、これは logistf() 関数から logistf パッケージを使用します。

交換

glm(factor(data$B) ~ value,family="binomial", data = .)

をコードに追加してください。

logistf(factor(data$B) ~ value, data = .)

をクリックすると、起動するはずです。(最初にパッケージをロードすることを忘れないでください)。

注意すべきは、分離すること自体は必ずしも問題ではないことです。パラメータ推定が必要な場合のみです。

を集計してみると、分離の問題を実際に確認することができます。 B に対して G :

xtabs(~ B + G, data=data)

これは

   G
B   k r s u
  f 9 6 0 0
  m 0 0 9 9

ということが分かれば、例えば G の結果を知っていることになります。 B .