Lojistik regresyon hakkında soru


14

10 yıllık bir süre boyunca (1997-2006) bir dizi bağımsız değişkenin çatışmasının varlığını veya yokluğunu (bağımlı değişken) modellemek için ikili lojistik regresyon yapmak istiyorum, her yıl 107 gözlem var. Bağımsızlarım:

  • arazi bozulması (2 tip bozulma için kategorik);
  • nüfus artışı (0- hayır; 1-evet);
  • geçim türü (0 - tip 1; 1 - tip iki);
  • nüfus yoğunluğu (üç yoğunluk seviyesi);
  • NDVI sürekli (maksimum sebze verimliliği);
  • NDVI (önceki yıla göre sebze cinsinden düşüş - 0 - hayır; 1 -yes) vet-1
  • ve NDVI (iki yıl önceki sebze düşüşü - 0- hayır; 1- evet).t-2

Her şey için oldukça yeniyim - bu, öğretim görevlimin bana verdiği bir proje - bu yüzden bazı tavsiyeler veya rehberliklere minnettar olurum. Zaten çoklu uyumluluk testi yaptım.

Esasen verilerim 10 yılı kapsayan (toplam 1070) 107 gözlem birimine (uzamsal bölgeler) ayrılmıştır ve her gözlem birimi için o birimdeki o anda bağımsız değişkenlerin koşullarının 'anlık görüntüsü' değerini vermektedir ( bölge). Lojistik regresyonumu (veya tabloyu), farklı birim yıllar arasındaki geçici NDVI değişikliklerinin değerlendirilebilmesi için her yılın 107 değerini ayrı olarak tanıyacak şekilde nasıl ayarlayacağımı bilmek istiyorum?


2
Hangi yazılımı kullanıyorsun? Ayrıca, öğretim görevliniz size lojistik regresyonu kullanmanızı söyledi mi? Bana öyle geliyor ki bu bir çeşit çok seviyeli model gerektiriyor, ancak sadece lojistik öğreniyorsanız, bu sizin öğretim görevlinizin amacı olmayabilir.
Peter Flom - Monica'yı eski durumuna döndürün

1
Sadece geçici otokorelasyonu kontrol etmek mi istiyorsunuz yoksa eğilimleri modellemek mi istiyorsunuz (çatışma olasılığı ve / veya risk faktörü etkilerindeki geçici değişiklikler açısından)?
Makro

Sadece geçici otokorelasyon
Stephen

Verilerinizin niteliği mekansal zamansaldır. Yani gerçekten seçilmiş bir model bu doğayı dikkate almak zorundadır.
hbaghishani

3
sadece geçici otokorelasyonu kontrol etmek istiyorsanız, GEE (Genelleştirilmiş Tahmin Denklemleri) kullanabilir ve sağlam standart hatalarla çıkarımınızı yapabilirsiniz.
Makro

Yanıtlar:


6

Bu aslında son derece sofistike bir problem ve öğretim görevlisinizden zorlu bir soru!

Verilerinizi nasıl düzenlediğiniz konusunda 1070 x 10 dikdörtgen iyi. Örneğin, R dilinde:

> 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

Bir modeli takmak için, @ gui11aume'un önerdiği gibi glm () işlevi temel işlemleri yapacak ...

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

... ama bunun "ülke" yi (107 biriminiz olarak ülkeniz olduğunu varsayıyorum) sabit bir etki olarak ele alırken, rastgele bir etki daha uygun olduğu sorunu var. Ayrıca dönemi basit bir faktör olarak ele alır, otokorelasyona izin verilmez.

Sen ilk sorunu çözmek bir örnek olarak karışık etkiler modeli doğrusal genelleştirilmiş Bates ve arkadaşları en lme4 bu bazı yönlerine güzel bir giriş var R. içinde paketin burada . Gibi bir şey

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

ileriye doğru bir adım olur.

Şimdi kalan son sorun 10 periyodunuzda otokorelasyon. Temel olarak, her ülkedeki 10 veri noktanız rastgele seçilmiş 10 bağımsız ve özdeş dağıtılmış nokta kadar değmez. Normal olmayan bir yanıtı olan çok düzeyli bir modelin artıklarında otokorelasyon için yaygın olarak bulunan bir yazılım çözümünün farkında değilim. Kesinlikle lme4'te uygulanmaz. Diğerleri benden daha fazlasını bilebilir.


Bu (yanıtsız) soru da alakalı - stats.stackexchange.com/questions/20613/…
Peter Ellis

1

Bu eğitim kapsamlı.

R olarak, değişken, veri hazırlama söylemek gerek databir de data.frame, ilk sizin 0-1 değişken (çatışma) ve diğer sütunlar birer tahmin sütun olan. Kategorik değişkenler için bunların türden olduğundan emin olmalısınız factor. Sütun 3'ün, örneğin bu özelliğe sahip olduğundan emin olmak için uygulayabilirsiniz data[,3] <- as.factor(data[,3]).

O zaman bu sadece

glm(data, family="binomial")

Bu, dolaylı olarak bir ilave modeliniz olduğunu varsayar ve size tahmini değerleri verir. Bireysel parametreleri test ederek daha kapsamlı bir çıktı elde etmek için şunları yapabilirsiniz:

summary(glm(data, family="binomial"))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.