InvMillsRatio& Heckit更正

时间:2017-08-10 16:06:04

标签: r statistics rstudio regression

我目前正在撰写我的论文并且相对较新。 我需要执行一个heckit两阶段模型(invMillsRatio加heckit),因为我有很多缺少的数据。但是我不知道如何做到这一点。我有3个主要模型(2个线性回归(1个lm和1个log-linear)和1个censor回归),但我现在如何执行这个heckman校正?

我非常感谢你的帮助,我根本不知道!

1 个答案:

答案 0 :(得分:0)

我一直在努力解决同样的问题,我想我找到了解决方案。它肯定不是最优雅的方式,但它运行良好。欢迎提供额外的反馈和友好的建议!

第一步:从您的因变量中创建一个虚拟对象。我的因变量是FDI outstock,因此如果它与0或NA不同,则取值为1,否则为0。这是我用来为虚拟DV创建新列的代码:

outstock <- outstock %>%
  mutate(
    outstock4 = as.numeric(
      case_when(
        log_outstock == 0 ~ "0",
        is.na(log_outstock) ~ "0",
        log_outstock > 0 ~ "1",
        log_outstock < 0 ~ "1",
        TRUE ~ as.character(log_outstock)
      )
    )
  )

第二步(如果适用于您的数据集):使用plm包中的plm.data()函数声明为面板数据。我用了这段代码:

outstock4 <- outstock %>%
    plm.data(index = c("CP", "year"))

第三步:在sampleSelection包中,heckit函数的工作原理如下:

heckit(dummy_DV ~ IV,
      DV ~ IV, data)

请注意,它是2个单独的回归(首先是您的选择方程,然后是您的估计回归方程),并且没有提及lm,glm,log-linear或其他。

现在,对我而言,只要我没有固定的效果来包含它,这就有效。在这种情况下,大量的NA使其无法运行。因此,我删除了NA,而不是使用na.omit(),因为这会删除太多的观察,因为我没有使用每个模型中数据库中存在的所有变量),而是将它们过滤掉:

model1 <- summary(heckit(dummy_DV ~ IV,
               DV ~ IV + as.factor(year) + as.factor(iso_o) + as.factor(iso_d), 
               data = filter(database, !is.na(IV1), !is.na(IV2), !is.na(IV3), !is.na(IV4), !is.na(IV5))))

我希望它有所帮助。祝你好运!