glm em R - qual pvalue representa a qualidade do ajuste de todo o modelo?


10

Estou executando glms em R (modelos lineares generalizados). Eu pensei que conhecia pvalues ​​- até que vi que chamar um resumo para um glm não lhe desse um pvalor predominante representativo do modelo como um todo - pelo menos não no lugar onde os modelos lineares o fazem.

Gostaria de saber se isso é dado como o pvalor para o Intercept, no topo da tabela de coeficientes. Portanto, no exemplo a seguir, enquanto Wind.speed..knots e canopy_density podem ser significativos para o modelo, como sabemos se o próprio modelo é significativo? Como sei se devo confiar nesses valores? Estou certo de pensar que o Pr (> | z |) para (Intercepto) representa o significado do modelo? Esse modelo é significativo? Obrigado!

Devo observar que executar um teste F não fornecerá um pvalor, pois recebo uma mensagem de erro informando que executar testes F na família binomial é inadequado.

Call:
glm(formula = Empetrum_bin ~ Wind.speed..knots. + canopy_density, 
    family = binomial, data = CAIRNGORM)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.2327  -0.7167  -0.4302  -0.1855   2.3194  

Coefficients:
                   Estimate Std. Error z value Pr(>|z|)  
(Intercept)          1.8226     1.2030   1.515   0.1298  
Wind.speed..knots.  -0.5791     0.2628  -2.203   0.0276 *
canopy_density      -2.5733     1.1346  -2.268   0.0233 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 59.598  on 58  degrees of freedom
Residual deviance: 50.611  on 56  degrees of freedom
  (1 observation deleted due to missingness)
AIC: 56.611

11
Se bem me lembro em uma regressão binomial, você deve usar um teste de desvio, também conhecido como teste de verossimilhança de log - que é análogo ao teste F usado em uma regressão linear. Este é o -2 * (LL nulo - LL saturado) que se encaixa em uma distribuição qui-quadrado. Embora eu não consiga ver uma probabilidade de log de modelo em sua saída de resumo. Está no objeto de modelo, mas não na saída de resumo?
22814 SamPassmore

Respostas:


10

Você pode fazer um teste qui-quadrado assintótico de (59.598-50.611) vs um qui-quadrado com (58-56) df ou usar anova()em seu objeto glm (que não faz o teste diretamente, mas pelo menos calcula ( 59.598-50.611) e (58-56) para você).

Esta é efetivamente análise de desvio .

Aqui está o tipo de cálculo que você pode fazer (em um conjunto de dados diferente, que vem com R):

spray1=glm(count~spray,family=poisson,data=InsectSprays)  # full model
spray0=glm(count~1,family=poisson,data=InsectSprays)      # null model
with(anova(spray0,spray1),pchisq(Deviance,Df,lower.tail=FALSE)[2]) 

O que fornece o valor-p para uma estatística assintótica do qui-quadrado baseada no desvio .

Ou você pode usar as funções deviancee df.residualpara fazer isso:

 pchisq(deviance(spray0)-deviance(spray1),
     df.residual(spray0)-df.residual(spray1),
    lower.tail=FALSE)

-

Muitas pessoas usariam a comparação entre o modelo AIC completo e o modelo nulo (ou, em alguns casos, talvez uma comparação entre um modelo de interesse e o modelo saturado) para descobrir se o modelo era melhor que o nulo nesse sentido.

-

Estou certo de pensar que o Pr (> | z |) para (Intercepto) representa o significado do modelo?

Não faz. De fato, o valor de p de interceptação geralmente não é de interesse direto.

Se você está considerando um modelo com um parâmetro de dispersão, vi algumas pessoas argumentarem por fazer um teste F em vez de um qui-quadrado assintótico; corresponde a pessoas que usam um teste t em vez de az nos coeficientes individuais. Não é provável que seja uma aproximação razoável em amostras pequenas. Não vi uma derivação ou simulação que sugerisse que F é necessariamente uma aproximação adequada (ou seja, melhor que o resultado assintótico) no caso de GLMs em geral. É possível que exista, mas eu não o vi.


2
Você também pode executar a Anova(fit, type = 2)partir da carbiblioteca
Algorithmatic

3

Supondo que seu modelo esteja no objeto 'apto', você pode usar esse código para executar um teste de probabilidade de log em seu modelo binomial Como você observou que um teste F não é apropriado, mas esse teste testará se seu modelo é melhor previsto do que aleatório.

LLR = -2 * (fit$null.deviance - fit$deviance)

Essa é a fórmula para o teste da razão de verossimilhança de log.

pchisq(LLR, 2, lower.tail = FALSE)

E isso lhe dará o valor p. Embora eu não esteja 100% confiante de que esse é o df correto. Tenho certeza de que é a diferença no número de parâmetros, dos quais você tem 2 no modelo saturado e nenhum no modelo Null, ergo df = 3 - 1 = 2. Mas isso pode ser algo a ser seguido.


1

Como o @SamPassmore mencionou, você pode usar a Analysis of Deviance (veja, por exemplo, car :: Anova () para algo semelhante) para obter algo aproximadamente equivalente ao teste , mas com uma . Relacionado a isso, está o teste da razão de verossimilhança (comparação do seu modelo com o modelo nulo), mas esses testes têm apenas um desempenho assintotico.χ 2Fχ2

Como alternativa, você pode consultar a AIC ou medidas relacionadas como a BIC.

Observe, porém: Para este tipo de modelo, é difícil obter algo como valor-p pelas mesmas razões, é difícil definir um valor significativo ; veja, por exemplo, este "sermão" de Doug Bates .R2

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.