F-тест для фиксированных эффектов в R (данные панели) - PullRequest
1 голос
/ 30 мая 2011

Я пытаюсь сделать F-тест на совместную значимость фиксированных эффектов (фиктивных переменных для отдельных лиц) для регрессии OLS данных панели (в R), однако я не нашел способа сделать это длябольшое количество фиксированных эффектов.В идеале я хотел бы использовать функцию в пакете plm, однако я не нашел ничего, что конкретно выполняет этот тест.

Это то, что Stata делает автоматически при использовании команды xtreg, fe.В Stata результаты выглядят так:

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

Снова, я пытаюсь воспроизвести результат Stata в R для большого количества фиктивных переменных, возможно, указанных + 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

Вот одна из моих слабых попыток создания матрицы 'R' дляF-тест с нулевой гипотезой: Rb = q, где b - матрица коэффициентов (бета-версия), а 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 ]

1 голос
/ 30 мая 2011

Во-первых, я хотел бы предложить, чтобы ваш вопрос мог быть улучшен путем (1) предоставления воспроизводимого примера и (2) описания точного теста, на который вы ссылаетесь, когда говорите «F тест». Может быть, ссылка на документы Stata? F - это распределение, поэтому может быть gazillion тестов, называемых «F тест».

Если ваш основной интерес заключается в определении, подходит ли модель с фиксированными эффектами к данным значительно лучше, чем МНК без фиксированных эффектов, тогда вы всегда можете использовать тест отношения правдоподобия. Я уверен, что в 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 
0 голосов
/ 30 мая 2011

Я действительно не думаю, что этот тест полезен вообще. Вместо того, чтобы оценивать то, что вы называете фиксированным эффектом (я назову это моделью без объединения), почему бы не иерархическую модель? Иерархическая модель (или модель частичного пула) позволит вашим оценкам сузиться до среднего значения для состояний, но без наложения их равными. Более того, если вам нужно оценить, насколько различны состояния, вам просто нужно использовать расхождение, оцененное между состояниями и внутри штатов. Если дисперсия между состояниями мала (близка к нулю), то вы не так много получаете, используя иерархическую модель, и перехваты примерно одинаковы. Если дисперсия очень велика (в пределе, когда уходит в бесконечность), иерархическая модель добавляет немного, и вы можете запустить отдельную модель для каждого состояния.

Вы можете оценить иерархическую модель в R с помощью пакета lme4. Используя ваши данные:

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

Расчетное стандартное отклонение перехвата состояниями составляет 4,39, а стандартное отклонение для отдельных лиц - 4,19.

...