Obtendo valores p para "multinom" no R (pacote nnet)

19

Como obtenho valores de p usando a multinomfunção nnetpackage R?

Eu tenho um conjunto de dados que consiste em "Escores de patologia" (ausente, leve, grave) como variável de resultado e dois efeitos principais: idade (dois fatores: vinte / trinta dias) e grupo de tratamento (quatro fatores: infectados sem ATB; infectados + ATB1; infectado + ATB2; infectado + ATB3).

Primeiro, tentei ajustar um modelo de regressão ordinal, que parece mais apropriado, dadas as características da minha variável dependente (ordinal). No entanto, a suposição de proporcionalidade de probabilidades foi violada severamente (graficamente), o que me levou a usar um modelo multinomial, usando o nnetpacote.

Primeiro, escolhi o nível de resultado que preciso usar como categoria de linha de base:

Data$Path <- relevel(Data$Path, ref = "Absent")

Então, eu precisava definir categorias de linha de base para as variáveis ​​independentes:

Data$Age <- relevel(Data$Age, ref = "Twenty")
Data$Treat <- relevel(Data$Treat, ref="infected without ATB") 

O modelo:

test <- multinom(Path ~ Treat + Age, data = Data) 
# weights:  18 (10 variable) 
initial value 128.537638 
iter 10 value 80.623608 
final  value 80.619911 
converged

A saída:

Coefficients:
         (Intercept)   infected+ATB1   infected+ATB2   infected+ATB3    AgeThirty
Moderate   -2.238106   -1.1738540      -1.709608       -1.599301        2.684677
Severe     -1.544361   -0.8696531      -2.991307       -1.506709        1.810771

Std. Errors:
         (Intercept)    infected+ATB1   infected+ATB2   infected+ATB3    AgeThirty
Moderate   0.7880046    0.8430368       0.7731359       0.7718480        0.8150993
Severe     0.6110903    0.7574311       1.1486203       0.7504781        0.6607360

Residual Deviance: 161.2398
AIC: 181.2398

Por um tempo, não consegui encontrar uma maneira de obter os valores- para o modelo e as estimativas ao usar . Ontem, deparei-me com um post em que o autor apresentou uma questão semelhante em relação à estimativa de valores- para coeficientes ( como configurar e estimar um modelo de logit multinomial em R? ). Lá, um blogueiro sugeriu que é muito fácil obter valores- do resultado de , primeiro obtendo os valores seguinte maneira:pnnet:multinomppsummarymultinomt

pt(abs(summary1$coefficients / summary1$standard.errors), df=nrow(Data)-10, lower=FALSE) 

         (Intercept)   infected+ATB1   infected+ATB2   infected+ATB3    AgeThirty
Moderate 0.002670340   0.08325396      0.014506395     0.02025858       0.0006587898
Severe   0.006433581   0.12665278      0.005216581     0.02352202       0.0035612114

De acordo com Peter Dalgard, "Há pelo menos um fator 2 ausente para um valor bicaudal . Geralmente, é um erro usar a distribuição para a estatística ; para dados agregados, pode ser um erro muito grave ". De acordo com Brian Ripley, "também é um erro usar os testes de Wald para ajustes, pois eles sofrem dos mesmos problemas (potencialmente graves) que os ajustes binomiais. Use intervalos de confiança de probabilidade de perfil (para os quais o pacote fornece software) ou se você deve testar, testes de razão de verossimilhança (idem). "ptzmultinom

Eu só preciso conseguir valores- confiáveis .p

Luciano
fonte
Você pode usar comparações de modelos com testes de razão de verossimilhança para um modelo completo e reduzido usando nneta anova()função 's .
Caracal

Respostas:

14

Que tal usar

z <- summary(test)$coefficients/summary(test)$standard.errors
# 2-tailed Wald z tests to test significance of coefficients
p <- (1 - pnorm(abs(z), 0, 1)) * 2
p

Basicamente, isso seria baseado nos coeficientes estimados em relação ao erro padrão e usaria o teste az para testar uma diferença significativa com zero com base em um teste bicaudal. O fator dois corrige o problema mencionado por Peter Dalgaard acima (você precisa dele porque deseja um teste bicaudal, não um caudal) e usa um teste z, em vez de um t, para resolver o outro problema que você mencionou.

Você também pode obter o mesmo resultado (testes z de Wald) usando

library(AER)
coeftest(test)

Os testes de razão de verossimilhança são geralmente considerados mais precisos que os testes de Wald z (estes últimos usam uma aproximação normal, os testes de RL não) e podem ser obtidos usando

library(afex)
set_sum_contrasts() # use sum coding, necessary to make type III LR tests valid
library(car)
Anova(test,type="III")

Se você deseja realizar testes posthoc de Tukey em pares, eles podem ser obtidos usando o lsmeanspacote, conforme explicado no meu outro post !

Tom Wenseleers
fonte
Um pouco mais de explicação das etapas pode ajudar o OP.
Momo
1
Acrescentou um pouco mais de explicação agora ...
Tom Wenseleers
1
Aqui está uma boa página que expande a opção de teste z de Wald: stats.idre.ucla.edu/r/dae/multinomial-logistic-regression
DirtStats