Question sur la régression logistique

14

Je veux exécuter une régression logistique binaire pour modéliser la présence ou l'absence de conflit (variable dépendante) à partir d'un ensemble de variables indépendantes sur une période de 10 ans (1997-2006), chaque année ayant 107 observations. Mes indépendants sont:

  • dégradation des terres (catégorielle pour 2 types de dégradation);
  • augmentation de la population (0 - non; 1 - oui);
  • type de moyens de subsistance (0 - type un; 1 - type deux);
  • densité de population (trois niveaux de densité);
  • NDVI continu (productivité végétale max.);
  • NDVI t - 1 (baisse des légumes par rapport à l'année précédente - 0 - non; 1 - oui) ett-1
  • et NDVI (baisse des légumes depuis deux ans - 0- non; 1- oui).t-2

Je suis relativement nouveau dans tout cela - c'est un projet que mon conférencier m'a donné - et je serais donc reconnaissant de quelques conseils ou orientations. J'ai déjà testé la multicollinarité.

Essentiellement, mes données sont divisées en 107 unités d'observation (régions spatiales) couvrant 10 ans (1070 au total) et pour chaque unité d'observation, elles donnent une valeur `` instantanée '' des conditions des variables indépendantes à ce moment dans cette unité ( Région). Je veux savoir comment configurer ma régression logistique (ou tableau) pour reconnaître séparément les 107 valeurs de chaque année afin que les changements temporels du NDVI entre différentes années-unités puissent être évalués?

Stephen
la source
2
Quel logiciel utilises-tu? De plus, votre conférencier vous a-t-il dit d'utiliser la régression logistique? Il me semble que cela nécessite une sorte de modèle à plusieurs niveaux, mais si vous apprenez simplement la logistique, ce n'est peut-être pas l'intention de votre professeur.
Peter Flom - Réintègre Monica
1
Voulez-vous simplement contrôler l'autocorrélation temporelle ou voulez-vous modéliser les tendances (en termes de probabilité de conflit et / ou de changements temporels des effets des facteurs de risque)?
Macro
Autocorrélation juste temporelle
Stephen
La nature de vos données est spatio-temporelle. Un modèle vraiment sélectionné doit donc tenir compte de cette nature.
hbaghishani
3
si vous voulez simplement contrôler l'autocorrélation temporelle, vous pouvez utiliser GEE (Generalized Estimating Equations) et faire votre inférence avec les erreurs standard robustes.
Macro

Réponses:

6

C'est en fait un problème extrêmement sophistiqué et une question difficile à poser à votre professeur!

En ce qui concerne la façon dont vous organisez vos données, un rectangle de 1070 x 10 est très bien. Par exemple, dans R:

> conflict.data <- data.frame(
+ confl = sample(0:1, 1070, replace=T),
+ country = factor(rep(1:107,10)),
+ period = factor(rep(1:10, rep(107,10))),
+ landdeg = sample(c("Type1", "Type2"), 1070, replace=T),
+ popincrease = sample(0:1, 1070, replace=T),
+ liveli =sample(0:1, 1070, replace=T),
+ popden = sample(c("Low", "Med", "High"), 1070, replace=T),
+ NDVI = rnorm(1070,100,10),
+ NDVIdecl1 = sample(0:1, 1070, replace=T),
+ NDVIdecl2 = sample(0:1, 1070, replace=T))
> head(conflict.data)
  confl country period landdeg popincrease liveli popden     NDVI NDVIdecl1 NDVIdecl2
1     1       1      1   Type1           1      0    Low 113.4744         0         1
2     1       2      1   Type2           1      1   High 103.2979         0         0
3     0       3      1   Type2           1      1    Med 109.1200         1         1
4     1       4      1   Type2           0      1    Low 112.1574         1         0
5     0       5      1   Type1           0      0   High 109.9875         0         1
6     1       6      1   Type1           1      0    Low 109.2785         0         0
> summary(conflict.data)
     confl           country         period     landdeg     popincrease         liveli        popden         NDVI          NDVIdecl1        NDVIdecl2     
 Min.   :0.0000   1      :  10   1      :107   Type1:535   Min.   :0.0000   Min.   :0.0000   High:361   Min.   : 68.71   Min.   :0.0000   Min.   :0.0000  
 1st Qu.:0.0000   2      :  10   2      :107   Type2:535   1st Qu.:0.0000   1st Qu.:0.0000   Low :340   1st Qu.: 93.25   1st Qu.:0.0000   1st Qu.:0.0000  
 Median :1.0000   3      :  10   3      :107               Median :1.0000   Median :1.0000   Med :369   Median : 99.65   Median :1.0000   Median :0.0000  
 Mean   :0.5009   4      :  10   4      :107               Mean   :0.5028   Mean   :0.5056              Mean   : 99.84   Mean   :0.5121   Mean   :0.4888  
 3rd Qu.:1.0000   5      :  10   5      :107               3rd Qu.:1.0000   3rd Qu.:1.0000              3rd Qu.:106.99   3rd Qu.:1.0000   3rd Qu.:1.0000  
 Max.   :1.0000   6      :  10   6      :107               Max.   :1.0000   Max.   :1.0000              Max.   :130.13   Max.   :1.0000   Max.   :1.0000  
                  (Other):1010   (Other):428                                                                                                              
> dim(conflict.data)
[1] 1070   10

Pour ajuster un modèle, la fonction glm () comme @ gui11aume suggère de faire les bases ...

mod <- glm(confl~., family="binomial", data=conflict.data)
anova(mod)

... mais cela a le problème de traiter le "pays" (je suppose que vous avez le pays comme 107 unités) comme un effet fixe, alors qu'un effet aléatoire est plus approprié. Il traite également la période comme un facteur simple, aucune autocorrélation n'est autorisée.

Vous pouvez résoudre le premier problème avec un modèle d'effets mixtes linéaires généralisés comme par exemple le paquetage lme4 de Bates et al dans R. Il y a une bonne introduction à certains aspects de ceci ici . Quelque chose comme

library(lme4)
mod2 <- lmer(confl ~ landdeg + popincrease + liveli + popden + 
    NDVI + NDVIdecl1 + NDVIdecl2 + (1|country) +(1|period), family=binomial,
    data=conflict.data)
summary(mod2)

serait un pas en avant.

Maintenant, votre dernier problème restant est l'autocorrélation sur vos 10 périodes. Fondamentalement, vos 10 points de données sur chaque pays ne valent pas autant que s'ils étaient 10 points distribués indépendants et identiques choisis au hasard. Je ne connais pas de solution logicielle largement disponible pour l'autocorrélation dans les résidus d'un modèle à plusieurs niveaux avec une réponse non normale. Il n'est certainement pas implémenté dans lme4. D'autres en savent peut-être plus que moi.

Peter Ellis
la source
Cette question (sans réponse) est également pertinente - stats.stackexchange.com/questions/20613/…
Peter Ellis
1

Ce tutoriel est complet.

Dans R, vous devez préparer vos données, disons variable datadans un data.frame, dont la première colonne est votre variable 0-1 (conflit) et les autres colonnes sont les prédicteurs. Pour les variables catégorielles, vous devez vous assurer qu'elles sont de typefactor . Pour vous assurer que la colonne 3, par exemple, possède cette propriété, vous pouvez appliquer par data[,3] <- as.factor(data[,3]).

Ensuite, ce n'est qu'une question de

glm(data, family="binomial")

Cela suppose implicitement que vous disposez d'un modèle additif et vous donne les valeurs estimées. Pour obtenir une sortie plus complète, avec un test pour les paramètres individuels, vous pouvez faire

summary(glm(data, family="binomial"))
gui11aume
la source