Domanda sulla regressione logistica


14

Voglio eseguire una regressione logistica binaria per modellare la presenza o l'assenza di conflitto (variabile dipendente) da un insieme di variabili indipendenti su un periodo di 10 anni (1997-2006), con ogni anno 107 osservazioni. I miei indipendenti sono:

  • degrado del suolo (categorico per 2 tipi di degrado);
  • aumento della popolazione (0- no; 1-sì);
  • tipo di sostentamento (0 - tipo uno; 1 - tipo due);
  • densità di popolazione (tre livelli di densità);
  • NDVI continuo (massima produttività vegetale);
  • NDVI t - 1 (declino della verdura rispetto all'anno precedente - 0 - no; 1 -yes) et-1
  • e NDVI t - 2 (declino della verdura rispetto ai due anni precedenti - 0- no; 1- sì).t-2

Sono abbastanza nuovo di tutto - questo è un progetto che il mio docente mi ha dato - e quindi sarei grato di alcuni consigli o indicazioni. Ho già provato la multicolliniarità.

In sostanza i miei dati sono suddivisi in 107 unità di osservazione (regioni spaziali) che coprono 10 anni (1070 in totale) e per ogni unità di osservazione fornisce un valore "istantaneo" delle condizioni delle variabili indipendenti in quel momento all'interno di tale unità ( regione). Voglio sapere come impostare la mia regressione logistica (o tabella) per riconoscere separatamente i 107 valori di ogni anno in modo da poter valutare le variazioni temporali dell'NDVI tra i diversi anni unitari?


2
Quale software stai usando? Inoltre, il tuo docente ti ha detto di usare la regressione logistica? Mi sembra che ciò richieda una sorta di modello multilivello, ma se stai solo imparando la logistica, questo potrebbe non essere l'intento del tuo docente.
Peter Flom - Ripristina Monica

1
Vuoi solo controllare l'autocorrelazione temporale o modellare le tendenze (in termini di probabilità di conflitto e / o cambiamenti temporali negli effetti del fattore di rischio)?
Macro

Solo autocorrelazione temporale
Stephen

La natura dei tuoi dati è spaziale-temporale. Quindi un modello veramente selezionato deve considerare questa natura.
hbaghishani,

3
se si desidera solo controllare l'autocorrelazione temporale, è possibile utilizzare GEE (equazioni di stima generalizzate) e dedurre i solidi errori standard.
Macro

Risposte:


6

Questo è in realtà un problema estremamente sofisticato e una domanda difficile da parte del tuo docente!

In termini di organizzazione dei dati, un rettangolo 1070 x 10 va bene. Ad esempio, in 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

Per adattare un modello, la funzione glm () come suggerisce @ gui11aume farà le basi ...

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

... ma questo ha il problema che tratta il "paese" (presumo che tu abbia il Paese come 107 unità) come un effetto fisso, mentre un effetto casuale è più appropriato. Considera anche il periodo come un fattore semplice, nessuna autocorrelazione consentita.

Puoi affrontare il primo problema con un modello di effetti misti lineari generalizzati come ad esempio il pacchetto lme4 di Bates et al in R. C'è una bella introduzione ad alcuni aspetti di questo qui . Qualcosa di simile a

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

sarebbe un passo avanti.

Ora l'ultimo problema che rimane è l'autocorrelazione tra i 10 periodi. Fondamentalmente, i tuoi 10 punti dati su ciascun paese non valgono quanto se fossero 10 punti indipendenti e identici distribuiti in modo casuale. Non sono a conoscenza di una soluzione software ampiamente disponibile per l'autocorrelazione nei residui di un modello multilivello con una risposta non normale. Certamente non è implementato in lme4. Altri potrebbero sapere più di me.


Anche questa domanda (senza risposta) è rilevante - stats.stackexchange.com/questions/20613/…
Peter Ellis,

1

Questo tutorial è completo.

In R, devi preparare i tuoi dati, ad esempio la variabile datain a data.frame, la prima colonna della quale è la variabile 0-1 (conflitto) e le altre colonne sono i predittori. Per le variabili categoriali, è necessario assicurarsi che siano di tipo factor. Per assicurarti che la colonna 3, diciamo, abbia questa proprietà, puoi far rispettare data[,3] <- as.factor(data[,3]).

Quindi è solo una questione di

glm(data, family="binomial")

Ciò presuppone implicitamente che tu abbia un modello additivo e ti fornisce i valori stimati. Per ottenere un output più completo, con test per singoli parametri, puoi farlo

summary(glm(data, family="binomial"))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.