首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用nnet包评价R中多项式logit的拟合优度

用nnet包评价R中多项式logit的拟合优度
EN

Stack Overflow用户
提问于 2014-04-11 16:46:35
回答 3查看 5.9K关注 0票数 5

在R.中,我使用来自nnet包的multinom()函数运行多项式logistic回归,不包括p值计算和t统计计算。我找到了一种计算p值的方法,使用来自此页的两个尾z检验。为了给出一个计算多个logit的测试统计量的例子(不是t-stat,而是等效的),我计算了Wald的统计量:

代码语言:javascript
复制
mm<-multinom(Empst ~ Agegroup + Marst + Education + State, 
             data = temp,weight=Weight)
W <- (summary(mm1)$coefficients)^2/(summary(mm1)$standard.errors)^2

我取系数的平方,除以系数的标准误差的平方。然而,似然比检验是检验逻辑回归拟合优度的较好方法。由于对似然函数的不完全理解,我不知道如何编写计算每个系数的似然比统计量的代码。如何使用multinom()函数的输出来计算每个系数的似然比统计量?谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-11 16:58:10

让我们来看看如何使用Sepal.Length (一个分类变量)和Petal.Length (一个连续变量)从虹膜数据集预测Species。让我们首先使用model.matrix将我们的因子变量转换为多个二进制变量,然后构建我们的神经网络:

代码语言:javascript
复制
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)

现在,我们可以对模型中的变量进行似然比检验:

代码语言:javascript
复制
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值。

代码语言:javascript
复制
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"
票数 3
EN

Stack Overflow用户

发布于 2015-12-30 19:10:58

Anova包中使用car函数对模型中的每个项进行似然比检验。

代码语言:javascript
复制
library(nnet)
data(iris)


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

### car package
library(car)
Anova(mm)
票数 3
EN

Stack Overflow用户

发布于 2020-03-24 16:53:18

从@jolisber的响应中,我提取了一个函数,这样任何人都可以这样做,并将值存储在df中。我把完整的字符向量存储在df中。

代码语言:javascript
复制
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开始的。

希望这对每个人都有用。

编辑2

还做了1,所以它可以存储在一个df中。

代码语言:javascript
复制
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))
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23018238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档