2017-08-10 35 views
0

我目前正在撰写我的论文,并且对R来说比较新。 我需要执行一个heckit两阶段模型(invMillsRatio plus heckit),因为我有很多缺失的数据。但我不知道如何做到这一点。我有3个主要模型(2个线性回归(1个线性回归和1个对数线性回归)和1个回归回归),但我现在该如何执行这个赫克曼校正?InvMillsRatio&Heckit修正

我真的很感激你的帮助,我完全不知道!

+0

我在搜索引擎中输入了“heckman missing values R package”并获得了一些潜在有用的链接(“sampleSelection”包是第一个搜索结果)。也许从那里开始并贯穿这些例子。 – lmo

+0

我想你会在stats.stackexchange.com上得到关于这个问题的更多有用的评论。 –

+0

谢谢,我已经尝试了很长一段时间。然而,正如我上面写的,我只有简单的lm回归,并且没有prock或者logit回归,这对Heckman修正是必要的。现在我只是想知道如果我仍然可以执行它,或者如果有一种方法或类似 –

回答

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.data()函数从plm包。我用这个代码:

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

第三步:在sampleSelection包,heckit功能的作用类似于此:

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

请注意,这是2个独立的回归(第一选择公式,然后你估计的回归方程),并且没有提及lm,glm,对数线性或其他。

现在,对我来说,只要我没有固定的效果包括在内,就可以工作。在这种情况下,大量的NAs使得它无法运行。因此,我删除了NAs,而不是使用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)))) 

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