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)
fonte
svyglm
do pacote de pesquisa fornece melhores métodos para lidar com o argumento de peso.Respostas:
Não há razão estatística para preferir um ao outro, além da clareza conceitual. Embora os valores de desvio relatados sejam diferentes, essas diferenças são completamente devidas ao modelo saturado. Portanto, qualquer comparação usando desvio relativo entre modelos não é afetada, pois a probabilidade de log do modelo saturado é cancelada.
Eu acho que é útil passar pelo cálculo de desvio explícito.
Forma longa
Forma curta (ponderada)
Observe que uma distribuição binomial não pode realmente assumir valores não inteiros, mas, no entanto, podemos calcular uma "probabilidade de log" usando a fração de sucessos observados em cada célula como resposta e ponderando cada soma no cálculo de probabilidade de log por o número de observações nessa célula.
Enquanto isso, o desvio saturado é diferente. Como não temos mais respostas de 0 a 1, mesmo com um parâmetro por observação, não podemos obter exatamente 0. Em vez disso, a probabilidade logarítmica do modelo saturado é
No seu exemplo, você pode verificar se o dobro dessa quantidade é a diferença entre os valores de desvio nulo e residual relatados para os dois modelos.
fonte