簡體   English   中英

使用 nnet 包評估 R 中多項式 logit 的擬合優度

[英]Assesing the goodness of fit for the multinomial logit in R with the nnet package

我使用 nnet 包中的multinom()函數在 R 中運行多項邏輯回歸。 nnet 包不包括 p 值計算和 t 統計量計算。 我找到了一種使用this page中的兩個tailed z-test計算p值的方法。 舉一個計算多項式 logit 的檢驗統計量的例子(不是真正的 t-stat,而是等價的),我計算了 Wald 統計量:

mm<-multinom(Empst ~ Agegroup + Marst + Education + State, 
             data = temp,weight=Weight)
W <- (summary(mm1)$coefficients)^2/(summary(mm1)$standard.errors)^2

我取系數的平方並除以系數的標准誤差的平方。 然而,似然比檢驗是衡量邏輯回歸擬合優度的首選方法。 由於對似然函數的理解不完整,我不知道如何編寫代碼來計算每個系數的似然比統計量 使用multinom()函數的輸出計算每個系數的似然比統計量的方法是什么? 謝謝你的幫助。

讓我們看看使用Species (一個分類變量)和Petal.Length (一個連續變量)從 iris 數據集預測Sepal.Length 讓我們首先使用model.matrix將我們的因子變量轉換為多個二元變量並構建我們的神經網絡:

library(nnet)
data(iris)
mat <- as.data.frame(model.matrix(~Species+Petal.Length+Sepal.Length, data=iris))
mm <- multinom(Sepal.Length~.+0, data=mat, trace=F)

現在我們可以對模型中的變量進行似然比檢驗:

library(lmtest)
lrtest(mm, "Speciesversicolor")
# Likelihood ratio test
# 
# Model 1: Sepal.Length ~ `(Intercept)` + Speciesversicolor + Speciesvirginica + 
#     Petal.Length + 0
# Model 2: Sepal.Length ~ `(Intercept)` + Speciesvirginica + Petal.Length - 
#     1
#   #Df  LogLik  Df  Chisq Pr(>Chisq)
# 1 136 -342.02                      
# 2 102 -346.75 -34 9.4592          1

要對所有變量運行似然比測試,我想您可以只使用循環並為每個變量名稱運行。 我只提取了這個循環中的 p 值。

for (var in mm$coefnames[-1]) {
  print(paste(var, "--", lrtest(mm, var)[[5]][2]))
}
# [1] "Speciesversicolor -- 0.999990077592342"
# [1] "Speciesvirginica -- 0.998742545590864"
# [1] "Petal.Length -- 3.36995663002528e-14"

使用car包中的Anova函數對模型中的每一項進行似然比檢驗。

library(nnet)
data(iris)


mm <- multinom(Species ~ ., data=iris, trace=F)

### car package
library(car)
Anova(mm)

從@jolisber 的響應中,我提取了一個函數,以便任何人都可以執行此操作並將值存儲在 df 中。 好吧,我將完整的字符向量存儲在 df 中。

likehoodmultinom2 <- function(model_lmm) 
{

  i <- 1
  values<- c("No funciona") 

  for (var in model_lmm$coefnames[-1]) { # Qutiamos el -1 de coefnames para no obener un NA

  values[i] =(paste(var, "--", lrtest(model_lmm, var)[[5]][2]))
  i=i+1

  }
  return (values)
}

但是我無法獲得第一個元素(變量)p 值。 我不知道為什么。 而且我不能忽略 model_lmm$coefnames 中的 [-1]。 已編輯。 我將 i=0 編輯為 i=1; 忘記了 R 向量從那個開始:D。

希望這對每個人都有效:D

編輯 2

也做了 1,所以它可以存儲在 df 中。

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))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM