でR
、使用してロジスティック回帰のための入力データをフォーマットするための3つの方法があるglm
関数は:
- データは、観測ごとに「バイナリ」形式にすることができます(たとえば、観測ごとにy = 0または1)。
- データは「Wilkinson-Rogers」形式(例:)で、
y = cbind(success, failure)
各行が1つの処理を表します。または - データは、観測ごとに加重形式にすることができます(たとえば、y = 0.3、加重= 10)。
3つのアプローチはすべて同じ係数推定値を生成しますが、自由度と結果の逸脱値とAICスコアが異なります。最後の2つの方法では、観測値の数ごとに各処理を使用するのに対し、最初の方法では観測値の数ごとに各観測値を使用するため、観測値が少なくなります(したがって自由度)。
私の質問:ある入力形式を別の入力形式よりも使用することには、数値的または統計的な利点がありますか?私が見る唯一の利点はR
、モデルで使用するためにデータを再フォーマットする必要がないことです。
私はglmのドキュメントを見て、ウェブで検索し、このサイトで接線的に関連する投稿を見つけましたが、このトピックに関するガイダンスはありません。
この動作を示すシミュレーション例は次のとおりです。
# Write function to help simulate data
drc4 <- function(x, b =1.0, c = 0, d = 1, e = 0){
(d - c)/ (1 + exp(-b * (log(x) - log(e))))
}
# simulate long form of dataset
nReps = 20
dfLong <- data.frame(dose = rep(seq(0, 10, by = 2), each = nReps))
dfLong$mortality <-rbinom(n = dim(dfLong)[1], size = 1,
prob = drc4(dfLong$dose, b = 2, e = 5))
# aggregate to create short form of dataset
dfShort <- aggregate(dfLong$mortality, by = list(dfLong$dose),
FUN = sum)
colnames(dfShort) <- c("dose", "mortality")
dfShort$survival <- nReps - dfShort$mortality
dfShort$nReps <- nReps
dfShort$mortalityP <- dfShort$mortality / dfShort$nReps
fitShort <- glm( cbind(mortality, survival) ~ dose,
data = dfShort,
family = "binomial")
summary(fitShort)
fitShortP <- glm( mortalityP ~ dose, data = dfShort,
weights = nReps,
family = "binomial")
summary(fitShortP)
fitLong <- glm( mortality ~ dose, data = dfLong,
family = "binomial")
summary(fitLong)
svyglm
調査パッケージから、重量引数を処理するより良い方法が提供されます。