P-значение в nnet: multinom() . Тест Вальда P-значения извлечен, но как мне извлечь его по коэффициенту правдоподобия?

У меня есть полиномиальная модель, которая выглядит следующим образом:

У меня есть группа наблюдений (пациентов), у которых есть 1 из 5 классов: Контроль, A_severe, A_low, B_severe и B_low.

Поэтому я попытался подогнать мультиномную модель к пакету nnet и извлек p-значения теста Вальда следующим образом:

multinom_wout20_1 = multinom(formula_wout20_base,data=wout_20_training, maxit=10000)
summary(multinom_wout20_1)

Коэффициенты:

exp(coef(multinom_wout20_1))

Z-значения

z_wout <- summary(multinom_wout20_1)$coefficients/summary(multinom_wout20_1)$standard.errors
z_wout

И мы получаем p-значения:

# 2-tailed z test
p_wout <- (1 - pnorm(abs(z_wout), 0, 1)) * 2
p_wout

А затем я передал их в пользовательскую переменную, чтобы увидеть их как буквы (более интуитивно понятно)

## Function to Pass our values to letters.
sign_levels_df_letter <- function(df) {
  df <- ifelse(df >.80, "Z", ifelse(df >.50, "FFF",
             ifelse( df >.30, "FF",
               ifelse(df >.10 , "F", 
               ifelse(df <= 0.0001, "AAA",
                      ifelse(df <= .0005,"AA+",
                             ifelse(df <= .001,"AA",
                                           ifelse(df <= .005, "A+",
                                                  ifelse (df<= .01, "A",
                                                            ifelse(df<= .05, "A-",
                                                                   ifelse(df <=.07, "B",
                                                                          ifelse(df <=.10, "C", NA
                                           
                                           ))))))))))))
                 
    
  return(df)
}
aux_pwout0 = sign_levels_df_letter(p_wout) ; aux_pwout0

Что, я полагаю, то же самое (потому что они совпадают по символике с *, *** и **), если я использую пакет stargazer

library(stargazer)
stargazer(multinom_wout20_1, type= "text" )   #   "html", out="multi1.htm")

Но как видно из ответа этой темы:

полиномиальная логистическая регрессия в R: multinom в пакете nnet результат отличается от mlogit в пакете mlogit?

Есть некоторые проблемы с использованием Wald вместо LogLikehood. ¿Как получить p-значение теста отношения правдоподобия из моей модели?

Я не возражаю против использования других функций для моих данных, но mlogit из пакета mloget требует, чтобы я передал свои данные в широкий формат, что не так просто, как кажется, но я полагаю, что мог бы извлечь из:

R: как отформатировать мои данные для полиномиального логита?

Если бы какой-нибудь пользователь этой последней функции мог сказать мне, есть ли какая-то секретная функция, которая автоматизирует это, это также решило бы мою проблему.


person Galpaccru    schedule 22.03.2020    source источник


Ответы (1)


Хорошо, я понял.

Из этого поста я извлек функцию для получения p-значений Likehood в моделях nnet:multinom и публикую ее также в качестве ответа.

https://stackoverflow.com/a/60835647/10465155

Вы можете увидеть это чуть ниже.


likehoodmultinom_p <- function(model_lmm) 
{

  i <- 1

  variables <-c("No funciona")
  values <- c("No funciona") 


  for (var in model_lmm$coefnames[-1]) { 

  variables[i] =paste(var)
  values[i]= lrtest(model_lmm, var)[[5]][2]
  i=i+1
   ## Contributed to stack at: 
  }
  return (data.frame(variables,values))
}

person Galpaccru    schedule 24.03.2020