繁体   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