首页 文章

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

提问于
浏览
1

我试图对面板数据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 包的以下"within"回归 .

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是零向量 .

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)提供可重复的示例,以及(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)
    

    OUTPUT:

    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

    我真的不认为这个测试是有用的 . 而不是估计你所谓的固定效应(我称之为非合并模型),为什么不是分层模型?层次模型(或部分池化模型)将允许您的估计缩小到状态的通用均值,但不会强制它们相等 . 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 .

相关问题