2017-08-10 3 views
0

Je suis en train d'écrire ma thèse et relativement nouveau à R. J'ai besoin d'effectuer un modèle en deux étapes heckit (invMillsRatio plus heckit) car j'ai tellement de données manquantes. Cependant, je n'ai aucune idée de comment faire cela. J'ai 3 modèles principaux (2 régressions linéaires (un lm et un log-linéaire) et 1 régression de censure), mais comment puis-je maintenant effectuer cette correction de heckman?InvMillsRatio & correction Heckit

J'apprécierais vraiment votre aide beaucoup, je n'ai absolument aucune idée du tout!

+0

J'ai tapé "heckman valeurs manquantes R paquet" dans un moteur de recherche et a obtenu des liens de recherche potentiellement utile (paquet 'sampleSelection' a été le premier coup). Peut-être commencer là et parcourir les exemples. – lmo

+0

Je pense que vous aurez plus de commentaires utiles sur cette question sur stats.stackexchange.com. –

+0

merci, j'ai déjà essayé cela pendant très longtemps. Cependant, comme je l'ai écrit ci-dessus, je n'ai qu'une régression lm simple, et aucune régression probit ou logit comme nécessaire pour la correction de Heckman. Maintenant, je me demandais si je peux encore l'exécuter ou s'il y a un moyen de contourner ou sth similaire –

Répondre

0

J'ai lutté pendant un certain temps avec le même problème, et je pense avoir trouvé une solution. Ce n'est certainement pas la façon la plus élégante de procéder, mais cela fonctionne bien. Des commentaires supplémentaires et des suggestions amicales seront toujours les bienvenus!

Première étape: créez un modèle de votre variable dépendante. Ma variable dépendante était FDI outstock, donc elle a pris la valeur 1 si elle était différente de 0 ou NA, et 0 sinon. Voici le code que j'utilisé pour créer une nouvelle colonne pour mon DV mannequin:

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) 
    ) 
    ) 
) 

Deuxième étape (le cas échéant à votre ensemble de données): sous forme de données de déclarer panneau, en utilisant la fonction plm.data() de la paquet de plm. J'ai utilisé ce code:

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

Troisième étape: Dans le paquet sampleSelection, la fonction Heckit fonctionne comme ceci:

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

Notez qu'il est 2 régressions distinctes (d'abord votre équation de sélection, puis votre équation de régression d'estimation), et qu'il n'y a aucune mention de lm, glm, log-linéaire ou autre. Maintenant, pour moi, cela fonctionne aussi longtemps que je n'ai pas d'effets fixes à inclure. Dans ce cas, le nombre élevé d'AN rend impossible l'exécution. Par conséquent j'ai enlevé les NAs, n'utilisant pas na.omit() parce que cela enlèverait trop d'observations, puisque je n'utilise pas toutes les variables présentes dans la base de données dans chaque modèle) mais les filtrant comme telles:

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)))) 

J'espère que cela aide. Bonne chance!