如何在logit或probit模型中测试所选系数的同时相等性?


14

如何在logit或probit模型中测试所选系数的同时相等性?什么是标准方法,什么是最新方法?

Answers:


30

沃尔德测试

一种标准方法是Wald检验。这是在Logit或Probit回归后,Stata命令执行的 test操作。让我们看一个例子,看看它在R中是如何工作的:

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv") # Load dataset from the web
mydata$rank <- factor(mydata$rank)
mylogit <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial") # calculate the logistic regression

summary(mylogit)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -3.989979   1.139951  -3.500 0.000465 ***
gre          0.002264   0.001094   2.070 0.038465 *  
gpa          0.804038   0.331819   2.423 0.015388 *  
rank2       -0.675443   0.316490  -2.134 0.032829 *  
rank3       -1.340204   0.345306  -3.881 0.000104 ***
rank4       -1.551464   0.417832  -3.713 0.000205 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

假设您要检验假设与。这等效于测试。Wald检验统计量是: β ř Ëβ p 一个 β ř ë - β p 一个 = 0βgre=βgpaβgreβgpaβgreβgpa=0

W=(β^β0)se^(β^)N(0,1)

要么

W2=(θ^θ0)2Var(θ^)χ12

我们这里的是和。因此,我们所需要的只是的标准错误。我们可以使用Delta方法计算标准误差: βřë-βp一个θ0=0βřë-βp一个θ^βgreβgpaθ0=0βgreβgpa

se^(βgreβgpa)Var(βgre)+Var(βgpa)2Cov(βgre,βgpa)

因此,我们还需要和的协方差。运行逻辑回归后,可以使用命令提取方差-协方差矩阵: β p 一个βgreβgpavcov

var.mat <- vcov(mylogit)[c("gre", "gpa"),c("gre", "gpa")]

colnames(var.mat) <- rownames(var.mat) <- c("gre", "gpa")

              gre           gpa
gre  1.196831e-06 -0.0001241775
gpa -1.241775e-04  0.1101040465

最后,我们可以计算标准误差:

se <- sqrt(1.196831e-06 + 0.1101040465 -2*-0.0001241775)
se
[1] 0.3321951

所以你的Wald值是z

wald.z <- (gre-gpa)/se
wald.z
[1] -2.413564

要获得值,只需使用标准正态分布:p

2*pnorm(-2.413564)
[1] 0.01579735

在这种情况下,我们有证据表明系数互不相同。该方法可以扩展到两个以上的系数。

使用 multcomp

R使用multcomp软件包可以很方便地完成这种繁琐的计算。这是与上述相同的示例,但已完成multcomp

library(multcomp)

glht.mod <- glht(mylogit, linfct = c("gre - gpa = 0"))

summary(glht.mod)    

Linear Hypotheses:
               Estimate Std. Error z value Pr(>|z|)  
gre - gpa == 0  -0.8018     0.3322  -2.414   0.0158 *

confint(glht.mod)

还可以计算系数差的置信区间:

Quantile = 1.96
95% family-wise confidence level


Linear Hypotheses:
               Estimate lwr     upr    
gre - gpa == 0 -0.8018  -1.4529 -0.1507

有关的其他示例multcomp,请参见此处此处


似然比测试(LRT)

通过最大似然法找到逻辑回归的系数。但是由于似然函数涉及很多乘积,所以对数似然最大化,这将乘积变成和。拟合效果更好的模型具有更高的对数似然性。涉及更多变量的模型至少具有与空模型相同的可能性。用表示替代模型(包含更多变量的模型)的对数似然性,用表示空模型的对数似然性,似然比检验统计量为: L L 0LLaLL0

D=2(LLaLL0)χdf1df22

似然比检验统计量遵循,自由度是变量数量的差。在我们的例子中是2。χ2

要执行似然比测试,我们还需要使用约束拟合模型,以便能够比较这两种可能性。完整模型的格式为。我们的约束模型具有以下形式:。日志p βgre=βgpa

log(pi1pi)=β0+β1gre+β2gpa+β3rank2+β4rank3+β5rank4
log(pi1pi)=β0+β1(gre+gpa)+β2rank2+β3rank3+β4rank4
mylogit2 <- glm(admit ~ I(gre + gpa) + rank, data = mydata, family = "binomial")

在我们的例子中,我们可以使用logLik逻辑回归后提取两个模型的对数似然性:

L1 <- logLik(mylogit)
L1
'log Lik.' -229.2587 (df=6)

L2 <- logLik(mylogit2)
L2
'log Lik.' -232.2416 (df=5)

包含关于约束的模型gregpa具有比完整模型(-229.26)稍高的对数似然(-232.24)。我们的似然比检验统计量是:

D <- 2*(L1 - L2)
D
[1] 16.44923

现在,我们可以使用的CDF 来计算值:χ22p

1-pchisq(D, df=1)
[1] 0.01458625

该 -值非常小,表明系数是不同的。p

R内置似然比测试;我们可以使用该anova函数来计算似然比检验:

anova(mylogit2, mylogit, test="LRT")

Analysis of Deviance Table

Model 1: admit ~ I(gre + gpa) + rank
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
1       395     464.48                       
2       394     458.52  1   5.9658  0.01459 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

再次,我们有强有力的证据表明的系数gregpa彼此显著不同。


分数测试(又称Rao分数测试或拉格朗日乘数测试)

得分函数 是微分对数似然函数的(),其中是参数和的数据(单因素的情况下,这里示出用于说明目的):U(θ)logL(θ|x)θx

U(θ)=logL(θ|x)θ

这基本上是对数似然函数的斜率。此外,令为Fisher信息矩阵,它是对数似然函数相对于的二阶导数的负期望。分数测试统计数据为:一世θθ

S(θ0)=U(θ02)I(θ0)χ12

分数测试也可以使用计算anova(分数测试统计信息称为“ Rao”):

anova(mylogit2, mylogit,  test="Rao")

Analysis of Deviance Table

Model 1: admit ~ I(gre + gpa) + rank
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance    Rao Pr(>Chi)  
1       395     464.48                              
2       394     458.52  1   5.9658 5.9144  0.01502 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

结论与以前相同。


注意

当模型为线性时,不同测试统计之间的有趣关系是(Johnston和DiNardo(1997):计量经济学方法):Wald LR得分。


1
我不知道为什么简化模型会简单地排除gregpa?那不是测试,不是测试吗?对我来说,要正确测试,我们需要保留并且同时施加。β1=β2=0β1=β2β1=β2gregpaβgre=βgpa
西伯斯赌博

1
@SibbsGambling好抓住!我相应地更新了我的答案。
COOLSerdash

这是否仅限于连续的预测变量,或者我(例如)还可以查看分类变量的两个级别是否显着不同?假设,等级3和等级4之间的差异是否显着?
丹尼尔(Daniel)

1
@Daniel是的,这种方法也可以用于分类变量的级别。该multcomp软件包使得它特别容易。例如,试试这个:glht.mod <- glht(mylogit, linfct = c("rank3 - rank4= 0"))。但是更简单的方法是rank3(使用mydata$rank <- relevel(mydata$rank, ref="3"))建立参考水平,然后仅使用正常回归输出。将因子的每个级别与参考级别进行比较。的p值rank4将是所需的比较。
COOLSerdash

1
@Daniel来自模型输出的p值(更改的参考水平)和glht我的p值相同(约)。关于第二个问题:仅测试一个线性假设,而测试的所有 6个成对比较。因此,必须针对多个比较调整p值。这意味着使用Tukey检验的p值通常高于单个比较。0.591linfct = c("rank3 - rank4= 0")mcp(rank="Tukey")rank
COOLSerdash

9

您没有指定变量,如果它们是二进制或其他。我认为您在谈论二进制变量。概率模型和对数模型也存在多项式。

通常,您可以使用完整的三位一体的测试方法,即

似然比检验

LM测试

沃尔德测验

每个测试使用不同的测试统计信息。标准方法是参加以下三个测试之一。这三个都可以用来做联合测试。

LR测试使用受限模型和非受限模型的对数似然性的差异。因此,受限模型是将指定系数设置为零的模型。不受限制的是“正常”模型。Wald检验的优势在于,仅估计了不可约束的模型。它基本上询问是否在无限制的MLE上评估了限制是否将近满足。如果使用拉格朗日乘数检验,则仅需估计受限模型。受限ML估计器用于计算非受限模型的得分。该分数通常不会为零,因此,此差异是LR测试的基础。在您的上下文中,LM测试还可用于测试异方差性。


7

标准方法是Wald检验,似然比检验和得分检验。渐近地,它们应该是相同的。以我的经验,在有限样本的模拟中,似然比测试的性能往往会稍好一些,但在非常极端(小样本)的情况下,这种情况会很重要,在这种情况下,我将所有这些测试仅作为粗略的近似值。但是,根据模型(协变量的数量,交互作用的存在)和数据(多重共线性,因变量的边际分布)的不同,通过惊人的少量观察就可以很好地近似“惊人的无症状状态”。

以下是在Stata中使用Wald,似然比和分数测试对150个观测值进行采样的模拟示例。即使在这么小的样本中,这三个检验也会产生相当相似的p值,并且当原假设为真时,p值的采样分布似乎确实遵循应有的均匀分布(或至少偏离均匀分布的偏差)由于蒙特卡洛实验中的随机性,该值不超过预期值。

clear all
set more off

// data preparation
sysuse nlsw88, clear

gen byte edcat = cond(grade <  12, 1,     ///
                 cond(grade == 12, 2, 3)) ///
                 if grade < .
label define edcat 1 "less than high school" ///
                   2 "high school"           ///
                   3 "more than high school"
label value edcat edcat
label variable edcat "education in categories"

// create cascading dummies, i.e.
// edcat2 compares high school with less than high school
// edcat3 compares more than high school with high school
gen byte edcat2 = (edcat >= 2) if edcat < .
gen byte edcat3 = (edcat >= 3) if edcat < .

keep union edcat2 edcat3 race south
bsample 150 if !missing(union, edcat2, edcat3, race, south)

// constraining edcat2 = edcat3 is equivalent to adding 
// a linear effect (in the log odds) of edcat
constraint define 1 edcat2 = edcat3

// estimate the constrained model
logit union edcat2 edcat3 i.race i.south, constraint(1)

// predict the probabilities
predict pr
gen byte ysim = .
gen w = .

program define sim, rclass
    // create a dependent variable such that the null hypothesis is true
    replace ysim = runiform() < pr

    // estimate the constrained model
    logit ysim edcat2 edcat3 i.race i.south, constraint(1)
    est store constr

    // score test
    tempname b0
    matrix `b0' = e(b)
    logit ysim edcat2 edcat3 i.race i.south, from(`b0') iter(0)
    matrix chi = e(gradient)*e(V)*e(gradient)'
    return scalar p_score = chi2tail(1,chi[1,1])

    // estimate unconstrained model
    logit ysim edcat2 edcat3 i.race i.south 
    est store full

    // Wald test
    test edcat2 = edcat3
    return scalar p_Wald = r(p)

    // likelihood ratio test
    lrtest full constr
    return scalar p_lr = r(p)
end

simulate p_score=r(p_score) p_Wald=r(p_Wald) p_lr=r(p_lr), reps(2000) : sim
simpplot p*, overall reps(20000) scheme(s2color) ylab(,angle(horizontal))

在此处输入图片说明


2
分数测试是@ jen-bohold所谓的拉格朗日乘数(LM)测试的另一个名称。
Maarten Buis

好答案(+1)。我特别喜欢模拟的工作。我不知道如何在Stata中计算分数测试。谢谢。
COOLSerdash
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.