Питання про логістичну регресію


14

Я хочу запустити бінарну логістичну регресію для моделювання наявності чи відсутності конфлікту (залежної змінної) з набору незалежних змінних протягом 10-річного періоду (1997-2006), причому кожен рік мав 107 спостережень. Мої незалежні:

  • деградація земель (категорична для 2 видів деградації);
  • приріст населення (0- ні; 1-так);
  • тип існування (0 - тип один; 1 - тип два);
  • густота населення (три рівні густоти);
  • NDVI безперервний (максимальна продуктивність);
  • NDVI t - 1 (спад вегетації за попередній рік - 0 - ні; 1-річний) тат-1
  • і NDVI (спад вегетації за два роки минулого - 0- ні; 1- так).т-2

Я досить новий у всьому цьому - це проект, який дав мені мій лектор, - і тому я буду вдячний за пораду чи рекомендацію. Я вже перевірив на мультиколініарність.

По суті, мої дані розбиті на 107 одиниць спостереження (просторові регіони), що охоплюють 10 років (загалом 1070), і для кожної одиниці спостереження це дає "моментне" значення умов незалежних змінних на той час у межах цієї одиниці ( область). Я хочу знати, як налаштувати мою логістичну регресію (або таблицю) для розпізнавання 107 значень кожного року окремо, щоб тимчасові зміни NDVI між різними одиничними роками можна було оцінити?


2
Яке програмне забезпечення ви використовуєте? Також ваш лектор сказав вам використовувати логістичну регресію? Мені здається, це вимагає певної багаторівневої моделі, але якщо ви просто вивчаєте логістику, це може бути не наміром вашого лектора.
Пітер Флом - Відновіть Моніку

1
Ви просто хочете контролювати часову автокореляцію чи хочете моделювати тенденції (з точки зору ймовірності конфлікту та / або часових змін наслідків фактору ризику)?
Макрос

Просто тимчасова автокореляція
Стівен

Характер ваших даних є просторово-часовим. Тож справді вибрана модель має враховувати цю природу.
hbaghishani

3
якщо ви просто хочете контролювати тимчасову автокореляцію, ви можете використати GEE (Узагальнені оціночні рівняння) та зробити свій висновок із надійними стандартними помилками.
Макрос

Відповіді:


6

Це насправді надзвичайно складна проблема і жорстке запитання у вашого викладача!

З точки зору того, як ви впорядковуєте свої дані, прямокутник розміром 1070 х 10 - це чудово. Наприклад, в 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

Для підгонки моделі функція glm (), як @ gui11aume пропонує, буде робити основи ...

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

... але це проблема, що вона розглядає "країну" (я припускаю, що у вас країна як 107 одиниць) як фіксований ефект, тоді як випадковий ефект є більш доцільним. Він також розглядає період як простий фактор, не допускається автокореляція.

Ви можете звернутися до першої проблеми , пов'язаної з узагальненої лінійної моделі змішаних ефектів , як, наприклад , в Бейтс і ін - х lme4 пакет в R. Там хороший введення в деякі аспекти цього тут . Щось на зразок

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

був би кроком вперед.

Тепер останньою вашою проблемою є автокореляція протягом ваших 10 періодів. В основному, ваші 10 точок даних для кожної країни не коштують стільки, як якщо б вони були вибрані 10 випадковими незалежними та однаковими розподіленими точками. Мені невідоме широке доступне програмне рішення щодо автокореляції в залишках багаторівневої моделі з ненормальною реакцією. Звичайно, це не реалізовано в lme4. Інші можуть знати більше, ніж я.


Це (без відповіді) питання також є актуальним - stats.stackexchange.com/questions/20613/…
Пітер Елліс

1

Цей підручник є вичерпним.

У R потрібно підготувати свої дані, скажімо, змінну dataв a data.frame, перший стовпець якої - ваша змінна 0-1 (конфлікт), а інші стовпці - це провідники. Для категоричних змінних потрібно переконатися, що вони є типовими factor. Щоб переконатися, що стовпець 3, скажімо, має це властивість, ви можете застосувати data[,3] <- as.factor(data[,3]).

Тоді це лише питання

glm(data, family="binomial")

Це неявно передбачає, що у вас є модель адитивів та дає оцінені значення. Щоб отримати більш всебічний вихід, з тестом на окремі параметри ви можете зробити

summary(glm(data, family="binomial"))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.