Pertanyaan tentang regresi logistik

14

Saya ingin menjalankan regresi logistik biner untuk memodelkan ada atau tidaknya konflik (variabel dependen) dari serangkaian variabel independen selama periode 10 tahun (1997-2006), dengan setiap tahun memiliki 107 pengamatan. Independen saya adalah:

  • degradasi lahan (dikategorikan untuk 2 jenis degradasi);
  • pertambahan populasi (0- tidak; 1-ya);
  • tipe mata pencaharian (0 - tipe satu; 1 - tipe dua);
  • kepadatan populasi (tiga tingkat kepadatan);
  • NDVI berkelanjutan (maks. Produktivitas sayuran);
  • NDVI t - 1 (penurunan sayuran dari tahun sebelumnya - 0 - no; 1 -ya) dant-1
  • dan NDVI t - 2 (penurunan vegan dari dua tahun lalu - 0- tidak; 1- ya).t-2

Saya cukup baru dalam hal ini - ini adalah proyek yang diberikan dosen saya - dan karenanya saya akan berterima kasih atas beberapa saran atau bimbingan. Saya sudah menguji multikoliniaritas.

Pada dasarnya data saya dibagi menjadi 107 unit pengamatan (wilayah spasial) yang mencakup 10 tahun (total 1070) dan untuk setiap unit pengamatan itu memberikan nilai kondisi 'snapshot' dari variabel independen pada waktu itu dalam unit tersebut ( wilayah). Saya ingin tahu cara mengatur regresi logistik (atau tabel) saya untuk mengenali 107 nilai setiap tahun secara terpisah sehingga perubahan NDVI temporal antara tahun unit yang berbeda dapat dinilai?

Stephen
sumber
2
Perangkat lunak apa yang Anda gunakan? Juga, apakah dosen Anda memberi tahu Anda untuk menggunakan regresi logistik? Tampaknya bagi saya ini membutuhkan model multilevel, tetapi jika Anda hanya belajar logistik, itu mungkin bukan maksud dosen Anda.
Peter Flom - Pasang kembali Monica
1
Apakah Anda hanya ingin mengendalikan autokorelasi temporal atau Anda ingin memodelkan tren (dalam hal kemungkinan konflik dan / atau perubahan temporal dalam efek faktor risiko)?
Makro
Autokorelasi hanya sementara
Stephen
Sifat data Anda adalah spatial-temporal. Jadi model yang benar-benar dipilih harus mempertimbangkan sifat ini.
hbaghishani
3
jika Anda hanya ingin mengontrol autokorelasi temporal, Anda bisa menggunakan GEE (Generalized Estimating Equations) dan melakukan kesimpulan Anda dengan kesalahan standar yang kuat.
Makro

Jawaban:

6

Ini sebenarnya adalah masalah yang sangat canggih dan permintaan sulit dari dosen Anda!

Dalam hal bagaimana Anda mengatur data Anda, persegi panjang 1070 x 10 baik-baik saja. Misalnya, dalam 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

Untuk memasang model, fungsi glm () seperti yang disarankan @ gui11aume akan menjadi dasar ...

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

... tetapi ini memiliki masalah yang memperlakukan "negara" (saya berasumsi Anda memiliki negara sebagai 107 unit Anda) sebagai efek tetap, sedangkan efek acak lebih tepat. Ini juga memperlakukan periode sebagai faktor sederhana, tidak ada autokorelasi yang diizinkan.

Anda dapat mengatasi masalah pertama dengan model efek campuran linier umum seperti pada paket lme4 misalnya Bates et al di R. Ada pengantar yang bagus untuk beberapa aspek di sini . Sesuatu seperti

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

akan menjadi langkah maju.

Sekarang masalah terakhir Anda adalah autokorelasi di 10 periode Anda. Pada dasarnya, 10 poin data Anda di masing-masing negara tidak bernilai sama seperti jika mereka 10 poin yang dipilih secara independen dan identik. Saya tidak mengetahui solusi perangkat lunak yang tersedia secara luas untuk autokorelasi dalam residu model multilevel dengan respons non-Normal. Tentu saja ini tidak diimplementasikan di lme4. Orang lain mungkin tahu lebih banyak dari saya.

Peter Ellis
sumber
Pertanyaan (tidak dijawab) ini juga relevan - stats.stackexchange.com/questions/20613/…
Peter Ellis
1

Tutorial ini komprehensif.

Dalam R, Anda perlu menyiapkan data Anda, misalkan variabel datadalam a data.frame, kolom pertama di antaranya adalah variabel 0-1 Anda (konflik) dan kolom lainnya adalah prediktornya. Untuk variabel kategori, Anda harus memastikan bahwa mereka bertipe factor. Untuk memastikan bahwa kolom 3, katakanlah, memiliki properti ini, Anda bisa memberlakukannya oleh data[,3] <- as.factor(data[,3]).

Maka itu hanya masalah

glm(data, family="binomial")

Ini secara implisit mengasumsikan bahwa Anda memiliki model aditif dan memberi Anda nilai estimasi. Untuk mendapatkan hasil yang lebih komprehensif, dengan uji parameter individual, Anda bisa melakukannya

summary(glm(data, family="binomial"))
gui11aume
sumber