我使用nnet包中的multinom()
函数在R中运行多项逻辑回归.nnet包不包括p值计算和t统计量计算。我找到了一种使用来自this page的双尾z检验来计算p值的方法。举一个计算multinom 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()
函数的输出计算每个系数的似然比统计量的方法是什么?谢谢你的帮助。
答案 0 :(得分:2)
我从@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))
}
答案 1 :(得分:1)
让我们看看使用Sepal.Length
(分类变量)和Species
(连续变量)从虹膜数据集预测Petal.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"
答案 2 :(得分:0)
使用car
包中的library(nnet)
data(iris)
mm <- multinom(Species ~ ., data=iris, trace=F)
### car package
library(car)
Anova(mm)
函数进行模型中每个术语的似然比检验。
if [ 10 -gt $a ]
...