R

时间:2017-07-20 13:57:53

标签: r logistic-regression panel-data

我试图使用R估算面板数据的逻辑单元固定效应模型。我的因变量是二元的,每两年测量13个位置。 此模型的目标是基于x预测特定日期和位置的y值。

zero <- seq(from=0, to=1, by=1)
ids = dplyr::data_frame(location=seq(from=1, to=13, by=1))
dates = dplyr::data_frame(date = seq(as.Date("2015-01-01"), as.Date("2016-12-31"), by="days"))
data = merge(dates, ids)
data$y <- sample(zero, size=9503, replace=TRUE)
data$x <- sample(zero, size=9503, replace=TRUE)

在调查可用的软件包时,我已经阅读了很多方法(显然)这样做,但我并不相信我已经理解了软件包和方法之间的差异。

根据我到目前为止所读到的内容,glm()survival::clogit()pglm::pglm()可用于执行此操作,但我想知道这些包之间是否存在实质性差异那些可能是什么 以下是我使用过的电话: fixed <- glm(y ~ x + factor(location), data=data) fixed <- clogit(y ~ x + strata(location), data=data)

这种不安全的原因之一是我在使用pglm时遇到的错误(另请参阅this questionpglm无法使用&#34;&#34;模型: fixed <- pglm(y ~ x, data=data, index=c("location", "date"), model="within", family=binomial("logit"))

&#34;内部&#34;区别于什么?来自glm()clogit()中的方法的pglm模型,以及在尝试预测给定日期和单位的y时,这三个中哪一个是正确的?

1 个答案:

答案 0 :(得分:3)

我没有看到您已经定义了一个正确的假设,可以在您调用的内容和面板数据的范围内进行测试,但只要让glm给出估算值对于层内的逻辑系数,可以通过添加family =&#34;二项式&#34;并由你的&#34;单位&#34;分层变量:

> fixed <- glm(y ~ x + strata(unit), data=data, family="binomial")
> fixed

Call:  glm(formula = y ~ x + strata(unit), family = "binomial", data = data)

Coefficients:
        (Intercept)                    x   strata(unit)unit=2   strata(unit)unit=3  
            0.10287             -0.05910             -0.08302             -0.03020  
 strata(unit)unit=4   strata(unit)unit=5   strata(unit)unit=6   strata(unit)unit=7  
           -0.06876             -0.05042             -0.10200             -0.09871  
 strata(unit)unit=8   strata(unit)unit=9  strata(unit)unit=10  strata(unit)unit=11  
           -0.09702              0.02742             -0.13246             -0.04816  
strata(unit)unit=12  strata(unit)unit=13  
           -0.11449             -0.16986  

Degrees of Freedom: 9502 Total (i.e. Null);  9489 Residual
Null Deviance:      13170 
Residual Deviance: 13170    AIC: 13190

这不会考虑任何日期排序,这是我期望的兴趣。但正如我上面所说的那样,似乎并不是一个以任何顺序排序为前提的假设。

这将创建一个固定效果模型,其中包含date与y事件概率的样条关系。我选择将日期居中,而不是将其作为一个非常大的整数:

library(splines)
fixed <- glm(y ~ x + ns(scale(date),3) + factor(unit), data=data, family="binomial")
fixed
#----------------------
Call:  glm(formula = y ~ x + ns(scale(date), 3) + factor(unit), family = "binomial", 
    data = data)

Coefficients:
        (Intercept)                    x  ns(scale(date), 3)1  ns(scale(date), 3)2  
            0.13389             -0.05904              0.04431             -0.10727  
ns(scale(date), 3)3        factor(unit)2        factor(unit)3        factor(unit)4  
           -0.03224             -0.08302             -0.03020             -0.06877  
      factor(unit)5        factor(unit)6        factor(unit)7        factor(unit)8  
           -0.05042             -0.10201             -0.09872             -0.09702  
      factor(unit)9       factor(unit)10       factor(unit)11       factor(unit)12  
            0.02742             -0.13246             -0.04816             -0.11450  
     factor(unit)13  
           -0.16987  

Degrees of Freedom: 9502 Total (i.e. Null);  9486 Residual
Null Deviance:      13170 
Residual Deviance: 13160    AIC: 13200