คำถามเกี่ยวกับการถดถอยโลจิสติก


14

ฉันต้องการรันการถดถอยโลจิสติกแบบไบนารีเพื่อสร้างแบบจำลองการมีหรือไม่มีความขัดแย้ง (ตัวแปรตาม) จากชุดของตัวแปรอิสระในช่วง 10 ปี (1997-2006) โดยแต่ละปีมีการสังเกต 107 ครั้ง ที่ปรึกษาของฉันคือ:

  • การเสื่อมสภาพของดิน (แบ่งเป็น 2 ประเภทคือการย่อยสลาย);
  • จำนวนประชากรเพิ่มขึ้น (0- no; 1-yes);
  • ประเภทการดำรงชีวิต (0 - ประเภทหนึ่ง; 1 - ประเภทสอง);
  • ความหนาแน่นของประชากร (ความหนาแน่นสามระดับ);
  • NDVIอย่างต่อเนื่อง (ผลผลิตสูงสุด veg);
  • NDVI t - 1 (ลดลง veg จากปีก่อน - 0 - no; 1 -yes) และเสื้อ-1
  • และ NDVI (การลดลงของ veg จากสองปีที่ผ่านมา - 0- ไม่; 1- ใช่)เสื้อ-2

ฉันค่อนข้างใหม่สำหรับทุกคน - นี่คือโครงการที่อาจารย์ของฉันให้ฉัน - และดังนั้นฉันจะขอบคุณคำแนะนำหรือคำแนะนำ ฉันได้ทดสอบความหลากหลายทางเชื้อชาติแล้ว

โดยพื้นฐานแล้วข้อมูลของฉันแบ่งออกเป็น 107 หน่วยการสังเกต (พื้นที่เชิงพื้นที่) ครอบคลุม 10 ปี (ทั้งหมด 1,070 หน่วย) และสำหรับทุกหน่วยการสังเกตมันให้ค่า 'สแนปชอต' ของเงื่อนไขของตัวแปรอิสระในเวลานั้นภายในหน่วยนั้น ( ภูมิภาค). ฉันต้องการทราบวิธีตั้งค่าการถดถอยโลจิสติกของฉัน (หรือตาราง) เพื่อรับรู้ค่า 107 ของแต่ละปีแยกจากกันเพื่อให้การเปลี่ยนแปลง NDVI ชั่วคราวระหว่างหน่วยปีที่แตกต่างกันสามารถประเมินได้?


2
คุณใช้ซอฟต์แวร์อะไร อาจารย์ของคุณบอกให้คุณใช้การถดถอยโลจิสติกด้วยหรือไม่ สำหรับฉันแล้วสิ่งนี้เรียกร้องให้มีรูปแบบหลายระดับ แต่ถ้าคุณเพียงแค่เรียนรู้ด้านโลจิสติกส์นั่นอาจไม่ใช่ความตั้งใจของอาจารย์ของคุณ
Peter Flom - Reinstate Monica

1
คุณต้องการควบคุมความสัมพันธ์เชิงเวลาชั่วคราวหรือคุณต้องการสร้างแบบจำลองแนวโน้ม (ในแง่ของความน่าจะเป็นของความขัดแย้งและ / หรือการเปลี่ยนแปลงชั่วคราวในผลปัจจัยความเสี่ยง) หรือไม่?
มาโคร

แค่ชั่วขณะเท่านั้น
Stephen

ธรรมชาติของข้อมูลของคุณเป็นเชิงพื้นที่ ดังนั้นรูปแบบที่เลือกอย่างแท้จริงจะต้องพิจารณาลักษณะนี้
hbaghishani

3
หากคุณต้องการควบคุมความสัมพันธ์ระหว่างกาลชั่วคราวคุณสามารถใช้ GEE (สมการการประมาณทั่วไป) และทำการอนุมานด้วยข้อผิดพลาดมาตรฐานที่มีประสิทธิภาพ
มาโคร

คำตอบ:


6

นี่เป็นปัญหาที่ซับซ้อนอย่างยิ่งและการขอจากอาจารย์ของคุณ!

ในแง่ของวิธีที่คุณจัดระเบียบข้อมูลของคุณสี่เหลี่ยมผืนผ้า 1070 x 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 หน่วยของคุณ) เป็นเอฟเฟกต์คงที่ในขณะที่เอฟเฟกต์แบบสุ่มเหมาะสมกว่า นอกจากนี้ยังถือว่าช่วงเวลาเป็นปัจจัยอย่างง่ายไม่อนุญาตให้มีความสัมพันธ์อัตโนมัติ

คุณสามารถอยู่ปัญหาแรกที่มีผลกระทบเชิงเส้นทั่วไปผสมรูปแบบเช่นเดียวกับในเช่นเบตส์ et al, ของ lme4แพคเกจในอาร์มีการแนะนำที่ดีที่จะบางแง่มุมของเรื่องนี้ที่นี่ สิ่งที่ต้องการ

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/…
Peter Ellis

1

บทช่วยสอนนี้มีเนื้อหาครอบคลุม

ใน R, คุณจะต้องเตรียมข้อมูลของคุณบอกว่าตัวแปรdataในdata.frameที่แรกคอลัมน์ซึ่งเป็น 0-1 ตัวแปรของคุณ (ความขัดแย้ง) และคอลัมน์อื่น ๆ ที่มีพยากรณ์ factorสำหรับตัวแปรเด็ดขาดคุณต้องให้แน่ใจว่าพวกเขาเป็นประเภท เพื่อให้แน่ใจว่าคอลัมน์ที่ 3 data[,3] <- as.factor(data[,3])กล่าวว่ามีคุณสมบัตินี้คุณสามารถบังคับใช้โดย

แล้วมันเป็นเพียงเรื่องของ

glm(data, family="binomial")

โดยปริยายถือว่าคุณมีแบบจำลองเพิ่มเติมและให้คุณค่าโดยประมาณ เพื่อให้ได้ผลลัพธ์ที่ครอบคลุมมากขึ้นด้วยการทดสอบพารามิเตอร์แต่ละตัวคุณสามารถทำได้

summary(glm(data, family="binomial"))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.