Двухсторонняя модель FE дает «пустую модель» в R - PullRequest
1 голос
/ 21 апреля 2020

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

Я хотел бы использовать модель с фиксированными эффектами муниципалитетов и референдумов. Каждый ряд или единица - это пара муниципального * референдума.

Я пытаюсь подобрать модель, используя следующее:

model_2fe <- plm(vote.ant.immig ~ pre.post, data = clean.df, effect = "twoways", index = c("municipality.code", "ref.code")) 

И я продолжаю получать следующее:

Error in plm.fit(data, model, effect, random.method, random.models, random.dfcor, : empty model

Если это помогает: pre.post - это фактор, указывающий на условие обработки (1,0), voice.ant.immig - это числовой c объект, municipality.code - это фактор, как и ref.code.

Кто-нибудь может мне помочь? Спасибо!

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Используя подсказки в ?plm::detect.lindep, вы можете увидеть, как выглядят данные после преобразования с двусторонним фиксированным эффектом. Вот несколько строк кода, чтобы получить вас там:

dat <- pdata.frame(<inputdata>, index = c("municipalitycode", "refcode"))

fml <- voteantimmig ~ prepost
mf <- model.frame(dat, fml)
modmat_2FE <- model.matrix(mf, model = "within", effect = "twoways")
all(abs(modmat_2FE) < 0.0000000000001) # TRUE
## look at your transformed data in modmat_2FE -> all zero -> empty model

## Analyse why this is the case, per individual, per time period:
modmat_FEi <- model.matrix(mf, model = "within", effect = "individual")
all(abs(modmat_FEi) < 0.0000000000001) # FALSE
## look at your transformed data in modmat_FEi
unique(modmat_FEi) # not so many different values
## look at your transformed data in modmat_FEi with individual and time index next to it: 
modmat_FEiindexes <- cbind(modmat_FEi, dat$municipalitycode, dat$refcode)
## => not much variation left within each individual. 

modmat_FEt <- model.matrix(mf, model = "within", effect = "time")
all(abs(modmat_FEt) < 0.0000000000001) # TRUE
## look at your transformed data in modmat_FEt -> all zero
0 голосов
/ 22 апреля 2020

Еще один способ достижения sh того, что @ Helix123 обсуждает выше, - создать новую фиктивную переменную для фиксированных эффектов муниципального образования x референдума.

clean.df$muni_x_ref <- factor(paste(clean.df$municipality, clean.df$refcode, sep='X'))

Затем вы можете составить таблицу препостов с помощью новой переменной muni_x_ref. Первые несколько строк ниже. Вы видите, что у вас есть только одна реализация вашей независимой переменной для каждого из фиксированных эффектов муниципального образования x референдума. Ваше fe и независимая переменная полностью коллинеарны, и нет никакой оценки для оценки вашей модели. Я считаю, что вам нужно переосмыслить то, что вы хотите оценить.

 table(clean.df$muni_x_refcode, df$prepost)


                            0 1
  AdlikonX5240              1 0
  AdlikonX5250              1 0
  AdlikonX5320              1 0
  AdlikonX5470              1 0
  AdlikonX5521              1 0
  AdlikonX5522              1 0
  AdlikonX5710              1 0
  AdlikonX5800              0 1
  AdlikonX5880              0 1
  AdlikonX5970              0 1
  AdlikonX6040              0 1
  AdlikonX6090              0 1
  Aeugst am AlbisX5240      1 0
  Aeugst am AlbisX5250      1 0
  Aeugst am AlbisX5320      1 0
  Aeugst am AlbisX5470      1 0
  Aeugst am AlbisX5521      1 0
  Aeugst am AlbisX5522      1 0
  Aeugst am AlbisX5710      1 0
  Aeugst am AlbisX5800      0 1
  Aeugst am AlbisX5880      0 1
  Aeugst am AlbisX5970      0 1
  Aeugst am AlbisX6040      0 1
  Aeugst am AlbisX6090      0 1
  Affoltern am AlbisX5240   1 0
  Affoltern am AlbisX5250   1 0
  Affoltern am AlbisX5320   1 0
  Affoltern am AlbisX5470   1 0
  Affoltern am AlbisX5521   1 0
  Affoltern am AlbisX5522   1 0
  Affoltern am AlbisX5710   1 0 ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...