Расчет регрессии IV - PullRequest
0 голосов
/ 29 мая 2020

Для своей диссертации я делаю регрессию инструментальных переменных (IV), и мне было интересно, правильно ли я сделал это. У меня есть пара проблем:

  1. Сравнивая линейную модель с моделями IV, знак эффекта меняется (с положительного на отрицательный или наоборот).
  2. Использование двухступенчатой Метод наименьших квадратов (2SLS) с ivreg (из пакета AER) дает отрицательные значения R², поэтому я решил вручную вычислить оценки 2SLS. Они дают те же оценки, что и код ivreg, но теперь со статистически значимыми результатами. 1009 * 1010 1013 * Я исследую влияние политики организации на данный бюджет. Организация работает хорошо, если остаток бюджета положительный, поэтому у нее меньше затрат, чем предусмотрено в бюджете. Переменная представляет собой процентное значение, положительное или отрицательное. Выбор лечения не является случайным, поскольку организации могут определять свою собственную политику. Кроме того, факторы политики - это в основном фиктивные переменные, 19 переменных - бинарные, 2 - категориальные и 1 - относительные. Мой IV - это любое число от 0 до 1.

    Вот что я сделал:

    1. Я оцениваю простую модель обыкновенных наименьших квадратов, чтобы увидеть, что она будет делать (я знаю, что результаты ничего не значат).

    lm1 <- lm(budget ~ policy1, data=df)
    lm2 <- lm(budget ~ policy2, data=df)
    summ(lm1)
    summ(lm2)
    

    2. Затем я выполнил IV с кодом ivreg, хотя R² стал отрицательным, что мне показалось странным.

    ivreg1 <- ivreg(budget ~ policy1| iv, data=df)
    ivreg2 <- ivreg(budget ~ policy2 | iv, data=df)
    library(stargazer)
    stargazer(ivreg1, ivreg2, dep.var.labels=c("Budget"), covariate.labels = c("policy 1", "policy2") , align=TRUE, column.sep.width = "-15pt", font.size = "small", type="text")
    

    3. Так что я сам попробовал выполнить 2SLS пошагово.

    Вместо fitted.values(reg1) я также использовал predict(reg1). Это дает тот же результат.

    attach(df)
    reg1<- lm(policy1~iv)
    policy1.hat <- fitted.values(reg1)
    reg2 <- lm(policy2~iv)
    policy2.hat <- fitted.values(reg2)
    ivreg3 <- lm(budget~policy1.hat)
    ivreg4 <- lm(budget~policy2.hat)
    stargazer(ivreg1, ivreg2, dep.var.labels=c("Budget"), covariate.labels = c("policy 1", "policy2"), align=TRUE, column.sep.width = "-15pt", font.size = "small", type="text")
    detach(df)
    

    На этом шаге я получил положительное скорректированное R², но я заметил, что факторы политики теперь значительны и что знак по сравнению с моделью lm изменился.

    Вопрос: Я неправильно вычисляю регрессию IV?

    Примеры данных (не реальные числа из-за анонимности данных):

     df <- data.frame(
        budget = c(4,2.8,9.1,15.5,10.1,12.9,4.3,
                   -1.9,-4.9,-1.3,14.1,8.6,7.8,-5.8,3.8,7.2,5.2,-5.3,8.6,
                   3.5,-1.2,-15.7,1.6,6.9,12.6,10.4,4.5,-8.3,-15.3,
                   9.8,21.5),
            iv = c(0.52,0.43,0.41,0.44,0.41,0.4,0.39,
                   0.43,0.38,0.37,0.34,0.42,0.4,0.36,0.35,0.41,0.39,
                   0.35,0.31,0.43,0.36,0.51,0.35,0.34,0.37,0.37,0.39,
                   0.46,0.44,0.36,0.37),
       policy1 = c(1L,1L,1L,1L,1L,1L,0L,1L,1L,1L,
                   1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,
                   1L,1L,1L,1L,1L,1L),
       policy2 = c(1L,1L,1L,1L,1L,1L,1L,0L,0L,1L,
                   0L,1L,0L,1L,1L,1L,1L,0L,1L,1L,1L,1L,1L,1L,1L,
                   0L,1L,1L,0L,1L,0L)
    )
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...