web-dev-qa-db-ja.com

警告:非整数#binomial glmで成功! (調査パッケージ)

twangパッケージを使用して傾向スコアを作成します。これは、survey::svyglmを使用した二項GLMの重みとして使用されます。コードは次のようになります。

pscore <- ps(ppci ~ var1+var2+.........., data=dt....)

dt$w <- get.weights(pscore, stop.method="es.mean")

design.ps <- svydesign(ids=~1, weights=~w, data=dt,)

glm1 <- svyglm(m30 ~ ppci, design=design.ps,family=binomial)

これにより、次の警告が生成されます。

Warning message:
   In eval(expr, envir, enclos) : non-integer #successes in a binomial glm!

誰かが私が間違っている可能性があることを知っていますか?

このメッセージがstats.SEの方が良いかどうかはわかりませんでしたが、バランスを考えて最初にここで試すと思いました。

33
Robert Long

glmは、二項(およびポアソン)モデルを指定する際にうるさいです。いいえを検出すると警告します。試行または成功の統合は非整数ですが、先に進み、とにかくモデルに適合します。警告を抑制したい場合(そして、それが問題ではないと確信している場合)、family=quasibinomial代わりに。

48
Hong Ooi

何も問題はありません計算、しかし統計あなたは意味のあることをしていないかもしれません。そのような場合、おそらくロバスト回帰法を使用することをお勧めします。これには、データに正確に1または正確に0の単位が含まれている場合、一般に比例応答データに適しています。

7
HaberdashPI

@HoongOoiが言ったように、binomialファミリーを持つglm.fitは整数カウントを期待し、そうでなければ警告をスローします。整数以外のカウントが必要な場合は、quasi-binomialを使用します。私の答えの残りはこれらを比較します。

glm.fitのRの準二項式は、係数推定(@HongOoiのコメントに記載されている)のbinomialとまったく同じですが、標準エラー(@nograpesのコメントに記載されている) )。

ソースコードの比較

stats::binomialstats::quasibinomialのソースコードの差分は、次の変更を示しています。

  • テキスト「二項式」は「準二項式」になります
  • aic関数は、計算されたAICの代わりにNAを返します

および次の削除:

  • 重み= 0の場合に結果を0に設定する
  • 重みの積分性を確認する
  • simfun関数はデータをシミュレートします

simfunのみが違いを生むことができますが、glm.fitなどのstats::binomialによって返されるオブジェクトの他のフィールドとは異なり、mu.etaのソースコードはその関数の使用を示しません。 link

最小限の作業例

quasibinomialまたはbinomialを使用した結果は、この最小限の作業例の係数と同じです。

library('MASS')
library('stats')

gen_data <- function(n=100, p=3) {

  set.seed(1)  
  weights <- stats::rgamma(n=n, shape=rep(1, n), rate=rep(1, n))
  y <- stats::rbinom(n=n, size=1, prob=0.5)
  theta <- stats::rnorm(n=p, mean=0, sd=1)
  means <- colMeans(as.matrix(y) %*% theta)
  x <- MASS::mvrnorm(n=n, means, diag(1, p, p))

  return(list(x=x, y=y, weights=weights, theta=theta))  
}

fit_glm <- function(family) {
  data <- gen_data()
  fit <- stats::glm.fit(x = data$x,
                        y = data$y,
                        weights = data$weights,
                        family = family)
  return(fit)
}

fit1 <- fit_glm(family=stats::binomial(link = "logit"))
fit2 <- fit_glm(family=stats::quasibinomial(link = "logit"))

all(fit1$coefficients == fit2$coefficients)

準二項確率分布との比較

このスレッド は、準二項分布が追加パラメーターphiを持つ二項分布と異なることを示唆しています。しかし、それらは統計とRで異なる意味を持ちます。

まず、ソースコードのquasibinomialには、追加のphiパラメーターが記載されていません。

第二に、 準確率 は確率に似ていますが、適切なものではありません。この場合、ガンマ関数を使用することはできますが、数値が非整数の場合は項(n\choose k)を計算できません。これは確率分布の定義にとっては問題かもしれませんが、項(nはkを選択)はパラメーターに依存せず、最適化から外れるため、推定には無関係です。

対数尤度推定量は次のとおりです。

log-likelihood estimator

二項族のシータの関数としての対数尤度は次のとおりです。

log-likelihood with binomial family

ここで、定数はパラメータシータから独立しているため、最適化から外れます。

標準誤差の比較

stats :: summary.glm で説明されているように、stats::summary.glmで計算される標準エラーは、binomialおよびquasibinomialファミリに異なる分散値を使用します。

GLMの分散はフィッティングプロセスでは使用されませんが、標準エラーを見つけるために必要です。 dispersionが指定されていない場合、またはNULLの場合、分散はbinomialおよびPoissonファミリの1と見なされ、それ以外の場合は残差自由度で除算された残差カイ二乗統計量(非ゼロの重みを持つケースから計算)。

...

cov.unscaled:推定係数のスケールなし(dispersion = 1)推定共分散行列。

cov.scaled:同上、dispersionでスケーリング。

上記の最小限の作業例を使用して:

summary1 <- stats::summary.glm(fit1)
summary2 <- stats::summary.glm(fit2)

print("Equality of unscaled variance-covariance-matrix:")
all(summary1$cov.unscaled == summary2$cov.unscaled)

print("Equality of variance-covariance matrix scaled by `dispersion`:")
all(summary1$cov.scaled == summary2$cov.scaled)

print(summary1$coefficients)
print(summary2$coefficients)

同じ係数、同じ非スケーリング分散共分散行列、および異なるスケーリング分散共分散行列を示します。

[1] "Equality of unscaled variance-covariance-matrix:"
[1] TRUE
[1] "Equality of variance-covariance matrix scaled by `dispersion`:"
[1] FALSE
       Estimate Std. Error   z value   Pr(>|z|)
[1,] -0.3726848  0.1959110 -1.902317 0.05712978
[2,]  0.5887384  0.2721666  2.163155 0.03052930
[3,]  0.3161643  0.2352180  1.344133 0.17890528
       Estimate Std. Error   t value   Pr(>|t|)
[1,] -0.3726848  0.1886017 -1.976042 0.05099072
[2,]  0.5887384  0.2620122  2.246988 0.02690735
[3,]  0.3161643  0.2264421  1.396226 0.16583365
5
mmorin

申し訳ありませんが、基礎となるメカニズムが過分散二項モデルである場合、標準分散を推定するときに過分散二項モデルがそれを考慮に入れるという意味で、より堅牢です。したがって、ポイントの推定値が同じであっても、より良いカバレッジが得られます。

0
user2809432