Em R
, existem três métodos para formatar os dados de entrada para uma regressão logística usando a glm
função:
- Os dados podem estar em um formato "binário" para cada observação (por exemplo, y = 0 ou 1 para cada observação);
- Os dados podem estar no formato "Wilkinson-Rogers" (por exemplo,
y = cbind(success, failure)
) com cada linha representando um tratamento; ou - Os dados podem estar em um formato ponderado para cada observação (por exemplo, y = 0,3, pesos = 10).
Todas as três abordagens produzem as mesmas estimativas de coeficiente, mas diferem nos graus de liberdade e nos valores de desvio resultantes e nas pontuações da AIC. Os dois últimos métodos têm menos observações (e, portanto, graus de liberdade) porque usam cada tratamento para o número de observações, enquanto o primeiro usa cada observação para o número de observações.
Minha pergunta: Existem vantagens numéricas ou estatísticas no uso de um formato de entrada em detrimento de outro? A única vantagem que vejo é não precisar reformatar os dados R
para usar com o modelo.
Examinei a documentação da glm , procurei na web e neste site e encontrei um post relacionado tangencialmente , mas nenhuma orientação sobre esse tópico.
Aqui está um exemplo simulado que demonstra esse comportamento:
# 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
do pacote de pesquisa fornece melhores métodos para lidar com o argumento de peso.