关于逻辑回归的问题


14

我想运行一个二元logistic回归模型,以在10年内(1997-2006年)从一组自变量中模拟冲突(因变量)的存在与否,每年有107个观测值。我的独立人是:

  • 土地退化(针对两种退化类型);
  • 人口增加(0-否; 1-是);
  • 生计类型(0-1型; 1-2-2型);
  • 人口密度(三种密度水平);
  • NDVI连续(最大蔬菜生产率);
  • NDVI t 1(比上一年的蔬菜下降-0-否; 1-是)和t1
  • 和NDVI t 2(从两年后的蔬菜开始下降-0-否; 1-是)。t2

我对此很陌生-这是我的讲师给我的一个项目-因此,我将感谢您的一些建议或指导。我已经测试了多大学衔。

本质上,我的数据被划分为107个观测单位(空间区域),覆盖了10年(总共1070年),对于每个观测单位,它给出的是当时该单位内独立变量条件的“快照”值(区域)。我想知道如何设置逻辑回归(或表格)以分别识别每年的107个值,以便可以评估不同单位年之间的时间NDVI变化吗?


2
您正在使用什么软件?另外,您的讲师是否告诉过您使用逻辑回归?在我看来,这需要某种多层次的模型,但是如果您只是学习物流,那可能不是您讲师的意图。
彼得·弗洛姆

1
您是否只想控制时间自相关,还是要对趋势建模(就冲突可能性和/或风险因素影响的时间变化而言)?
2012年

只是时间自相关
Stephen

数据的性质是时空的。因此,真正选择的模型必须考虑这种性质。
hbaghishani 2012年

3
如果您只想控制时间自相关,则可以使用GEE(广义估计方程)并使用可靠的标准误差进行推断。
2012年

Answers:


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

对于拟合模型,@ gui11aume建议的glm()函数将执行基础操作...

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

...但是这有一个问题,即它会将“国家”(假设您的国家/地区为107个单位)作为固定效果,而随机效果则更合适。它还将周期视为一个简单因素,不允许自相关。

您可以使用广义线性混合效应模型解决第一个问题,例如Bates等人的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,你需要准备你的数据,称变量datadata.frame,在第一列,其中是您的0-1变量(冲突),在其他列是预测。对于类别变量,必须确保它们的类型为factor。要确保第3列具有此属性,您可以通过强制实施data[,3] <- as.factor(data[,3])

那只是一个问题

glm(data, family="binomial")

这隐含地假定您具有加性模型并提供了估计值。要获得更全面的输出,并测试各个参数,您可以

summary(glm(data, family="binomial"))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.