[英]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.