在R(nnet程序包)中获取“ multinom”的p值


19

如何使用package中的multinom函数获取p值?nnetR

我有一个数据集,其中包含作为结果变量的“病理学评分”(不存在,轻度,严重)和两个主要影响:年龄(两个因素:二十天/三十天)和治疗组(四个因素:感染者没有ATB;感染者+ ATB1;已感染+ ATB2;已感染+ ATB3)。

首先,我尝试拟合序数回归模型,鉴于我的因变量(序数)的特征,这似乎更合适。但是,(图形上)严重违反了赔率比例的假设,这促使我改用多项式模型,而是使用nnet软件包。

首先,我选择了需要用作基线类别的结果级别:

Data$Path <- relevel(Data$Path, ref = "Absent")

然后,我需要为自变量设置基线类别:

Data$Age <- relevel(Data$Age, ref = "Twenty")
Data$Treat <- relevel(Data$Treat, ref="infected without ATB") 

该模型:

test <- multinom(Path ~ Treat + Age, data = Data) 
# weights:  18 (10 variable) 
initial value 128.537638 
iter 10 value 80.623608 
final  value 80.619911 
converged

输出:

Coefficients:
         (Intercept)   infected+ATB1   infected+ATB2   infected+ATB3    AgeThirty
Moderate   -2.238106   -1.1738540      -1.709608       -1.599301        2.684677
Severe     -1.544361   -0.8696531      -2.991307       -1.506709        1.810771

Std. Errors:
         (Intercept)    infected+ATB1   infected+ATB2   infected+ATB3    AgeThirty
Moderate   0.7880046    0.8430368       0.7731359       0.7718480        0.8150993
Severe     0.6110903    0.7574311       1.1486203       0.7504781        0.6607360

Residual Deviance: 161.2398
AIC: 181.2398

有一阵子,我找不到一种方法来获取模型的值并进行估算。昨天我碰到一个帖子,作者提出了一个关于系数值估计的类似问题(如何在R中建立和估计多项式logit模型?)。那里,一位博主建议,通过首先获取值如下所示,从的结果中获取值非常容易:pnnet:multinomppsummarymultinomŤ

pt(abs(summary1$coefficients / summary1$standard.errors), df=nrow(Data)-10, lower=FALSE) 

         (Intercept)   infected+ATB1   infected+ATB2   infected+ATB3    AgeThirty
Moderate 0.002670340   0.08325396      0.014506395     0.02025858       0.0006587898
Severe   0.006433581   0.12665278      0.005216581     0.02352202       0.0035612114

根据彼得·达格德(Peter Dalgard)的说法:“对于两尾值,至少要损失2倍。通常将用于真正的统计量是错误的;对于汇总数据,可以一个非常严重的错误。” 根据Brian Ripley的说法,“使用Wald检验进行拟合也是一个错误,因为它们遭受与二项式拟合相同(可能很严重)的问题。使用轮廓似然置信区间(软件包确实为此提供了软件),或者如果必须进行测试,则进行似然比测试(ditto)。”pŤžmultinom

我只需要能够得出可靠的。p


您可以使用似然比检验模型的比较,使用一个完整的和简化模型nnetanova()功能。
caracal 2013年

Answers:


14

那使用呢

z <- summary(test)$coefficients/summary(test)$standard.errors
# 2-tailed Wald z tests to test significance of coefficients
p <- (1 - pnorm(abs(z), 0, 1)) * 2
p

基本上,这将基于相对于其标准误差的估计系数,并使用z检验基于两尾检验来针对零的显着差异进行检验。有两个因数可以纠正上面提到的彼得·达尔加德问题(之所以需要它,是因为您想要一个有两个尾部的测试,而不是一个有尾部的测试),并且它使用z检验而不是t检验来解决另一个问题。您提到的问题。

您还可以使用以下方法获得相同的结果(Wald z检验)

library(AER)
coeftest(test)

尽管与Wald z检验相比,似然比检验通常被认为更准确(后者使用正态近似,而LR检验则不使用正态近似),并且可以使用

library(afex)
set_sum_contrasts() # use sum coding, necessary to make type III LR tests valid
library(car)
Anova(test,type="III")

如果您想进行成对的Tukey posthoc测试,那么可以使用我的另一篇文章中所述的lsmeans软件包获得这些测试!


有关步骤的更多说明可能会对OP有所帮助。
Momo 2014年

1
现在添加了更多解释...
Tom Wenseleers

1
这是一个很好的页面,扩展了Wald z-test选项:stats.idre.ucla.edu/r/dae/multinomial-logistic-regression
DirtStats
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.