R中固定效应的F检验(面板数据)

时间:2011-05-29 23:35:47

标签: r stata plm

我正在尝试对面板数据OLS回归(在R中)中固定效果(个体特定虚拟变量)的联合重要性进行F检验,但是我还没有找到一种方法来实现这一点。大量的固定效果。理想情况下,我会在plm包中使用一个函数,但是我没有找到任何具体进行此测试的函数。

这是Stata在使用xtreg, fe命令时自动执行的操作。在Stata中,结果如下:

------------------------------------------------------------------------------
F test that all u_i=0:  F(49, 498) =    12.00   Prob > F = 0.000

同样,我试图在R中为大量虚拟变量重现Stata结果,可能由+ factor(us.state)使用lm()model = "fe"使用plm()指定。

这是一个可重复的例子:

require(foreign)

voter <- read.dta("http://www.montana.edu/econ/cstoddard/562/panel_hw.dta")

reg1 <- lm(vaprate ~ gsp + midterm + regdead + WNCentral + South + Border
               + factor(state), data=voter)

使用plm包等效于以下“内部”回归。

require(plm)

reg1.fe <- plm(vaprate ~ gsp + midterm + regdead + WNCentral + South + Border,
data=voter, index = c("state","year"), model = "within")

因此,测试将是所有状态虚拟变量与零共同不同(共同显着)的测试。这是对无限制模型的线性限制(上面的reg1和reg1.fe)。在下面的文件中更好地解释了这个F检验(见幻灯片5-7)。

http://jackman.stanford.edu/classes/350B/07/ftestforWeb.pdf

这是我使用零假设为F检验创建'R'矩阵的一个微弱尝试:Rb = q其中b是系数矩阵(beta hat),q是零向量。 / p>

d1 = length(unique(voter$stcode))-1
d2 = length(reg1$coefficients)
R = cbind(matrix(0,d1,d2),diag(d1))

linearHypothesis(reg1,R,rhs=0)

这不起作用!而且,我希望有一种简化的方法来测试所有固定效应虚拟变量的联合显着性。

2 个答案:

答案 0 :(得分:1)

首先,我想建议您的问题可以通过(1)提供可重复的示例,以及(2)描述您在说'F test'时所指的精确测试来改进。可以链接到Stata docs吗? F是分布,因此可以进行大量的测试,称为“F测试”。

如果你的实质性兴趣在于确定固定效应模型是否比没有固定效果的OLS更好地适合数据,那么你总是可以使用似然比检验。我确信R中有很多实现,但lmtest包提供的实现非常方便。以下是使用随plm包一起分发的数据集的示例(您似乎已经安装了该数据集,因此应该很容易尝试)。

library(plm)
data(Produc)

library(lmtest)
mod <- lm(pcap ~ hwy + water, Produc)
mod.fe <- lm(pcap ~ hwy + water + factor(state), Produc)
lrtest(mod, mod.fe)  

和输出:

Likelihood ratio test

Model 1: pcap ~ hwy + water
Model 2: pcap ~ hwy + water + factor(state)
  #Df  LogLik Df  Chisq Pr(>Chisq)    
1   4 -8038.1                         
2  51 -6712.4 47 2651.4  < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

编辑:选项2

require(foreign)
voter <- read.dta("http://www.montana.edu/econ/cstoddard/562/panel_hw.dta")
reg1 <- lm(vaprate ~ gsp + midterm + regdead + WNCentral + South + Border
               + factor(state), data=voter)

library(plm)
reg1.fe <- plm(vaprate ~ gsp + midterm + regdead + WNCentral + South + Border,
data=voter, index = c("state","year"), model = "within")

reg1.pooling <- plm(vaprate ~ gsp + midterm + regdead + WNCentral + South + Border,
data=voter, index = c("state","year"), model = "pooling")

pFtest(reg1.fe, reg1.pooling)

输出:

    F test for individual effects

data:  vaprate ~ gsp + midterm + regdead + WNCentral + South + Border 
F = 13.0712, df1 = 45, df2 = 498, p-value < 2.2e-16
alternative hypothesis: significant effects 

答案 1 :(得分:0)

我真的不认为这个测试有用。而不是估计你所谓的固定效应(我称之为非合并模型),为什么不是分层模型?层次模型(或部分池模型)将允许您的估计缩小到状态的通用均值,但不会强制它们相等。 Morevoer,如果你需要评估状态变化多少,你只需要使用状态和州内估计的方差。如果状态之间的差异很小(接近零),那么使用分层模型并没有获得如此多的差异,截距大致相同。如果方差非常大(在极限中,当变为无穷大时),层次模型几乎没有增加,您可以为每个状态运行一个单独的模型。

您可以使用包lme4估计R中的层次模型。使用您的数据:

require(lme4)
require(arm)
reg1 <- glmer(vaprate ~ gsp + midterm + regdead + WNCentral + South + Border
           + (1|state), data=voter)
display(reg1)

截距状态的估计标准偏差为4.39,个体的标准偏差为4.19。