Formato de entrada para resposta no binômio glm em R

13

Em R, existem três métodos para formatar os dados de entrada para uma regressão logística usando a glmfunção:

  1. Os dados podem estar em um formato "binário" para cada observação (por exemplo, y = 0 ou 1 para cada observação);
  2. Os dados podem estar no formato "Wilkinson-Rogers" (por exemplo, y = cbind(success, failure)) com cada linha representando um tratamento; ou
  3. 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 Rpara 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)
Richard Erickson
fonte
1
No seu exemplo, a diferença entre o desvio nulo e o residual é igual para todos os três modelos. Se você adicionar ou remover um parâmetro, a alteração no AIC também será a mesma para todos os três.
Jonny Lomond
1
Você se respondeu: se usando os mesmos dados, com os mesmos resultados, como eles podem ser diferentes? Além disso, se o método desse resultados diferentes apenas por fornecer os dados em um formato diferente, algo estaria profundamente errado com ele ou com sua implementação.
Tim
O formato WR é, em última análise, uma probabilidade ponderada. O problema com os pesos é que R não pode dizer se são pesos de frequência, pesos de probabilidade ou outros. Com a ponderação da pesquisa, por exemplo, você pode ter apenas n observações, mas elas representam segmentos da população / quadro de amostragem. Portanto, os graus de liberdade são realmente 100. svyglmdo pacote de pesquisa fornece melhores métodos para lidar com o argumento de peso.
AdamO 12/01
Mas se você ajustasse um modelo quasibinomial usando todas as três formas de codificação, eles produziriam resultados diferentes, certo, pois uma pessoa poderia ter uma super-dispersão positiva quando codificada como dados binomiais, mas não quando codificada como dados logísticos / binários. Ou estou errado nisso?
Tom Wenseleers 08/08/19

Respostas:

9

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.

EunEuEupEuEuyEujjEu

Forma longa

Euj(registro(pEu)yEuj+registro(1-pEu)(1-yEuj))

Euj(registro(yEuj)yEuj+registro(1-yEuj)(1-yEuj)).
yEujregistro(0 0)0 0registro(0 0)limx0 0+xregistro(x)

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.

EunEu(registro(pEu)jyEuj/nEu+registro(1-pEu)(1-j(yEuj/nEu))

j

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 é

EunEu(registro(jyEuj/nEu)jyEuj/nEu+registro(1-jyEuj/nEu)(1-jyEuj/nEu)).

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.

ni = dfShort$nReps
yavg = dfShort$mortalityP
sum.terms <-ni*(log(yavg)*yavg + log(1 - yavg)*(1 - yavg))
# Need to handle NaN when yavg is exactly 0
sum.terms[1] <- log(1 - yavg[1])*(1 - yavg[1])

2*sum(sum.terms)
fitShortP$deviance - fitLong$deviance
Jonny Lomond
fonte
Eu acho que você terá que esclarecer a expressão de desvio dos modelos saturados. Log 0 não funciona tão bem.
AdamO 12/01
Obrigado, eu deveria ter esclarecido o que eu quis dizer. Eu adicionei uma edição para esclarecer que com 0log (0) quero dizer 0 neste contexto.
Jonny Lomond
OK, mas estou devidamente confuso (desculpe-me, nunca cobri desvio em nenhum detalhe): se você tem log (y) y - log (1-y) (1-y) como desvio de modelo saturado, não é todo observação apenas 0?
AdamO 12/0118
2
O "modelo saturado" é um modelo imaginado com um parâmetro por observação. Portanto, a probabilidade prevista para cada observação é 1 ou 0, dependendo do valor real observado. Portanto, nesse caso, a probabilidade logarítmica do modelo saturado é de fato 0, os dados são os únicos dados que podem ser gerados pelo modelo saturado.
Jonny Lomond
Mas se você ajustasse um modelo quasibinomial usando todas as três formas de codificação, eles produziriam resultados diferentes, certo, pois uma pessoa poderia ter uma super-dispersão positiva quando codificada como dados binomiais, mas não quando codificada como dados logísticos / binários. Ou estou errado nisso?
Tom Wenseleers 08/08/19