尝试运行固定效应logistic回归时出现错误

4

我不确定在哪里可以得到帮助,因为这篇文章在StackExchange上被认为是离题的。

我想基于巴西选举数据运行一些回归分析,重点关注两个时间段内的数据。我想要了解的是,在一项禁止公司向候选人捐赠的立法变革后,那些最依赖这些资源的个人是否有更低的当选概率。

我已经在R上运行了这样一个回归模型:

model_continuous <- plm(percentage_of_votes ~ time + 
                        treatment + time*treatment, data = dataset, model = 'fd')

在这个模型中,我使用了一个连续变量(投票的百分比)作为我的因变量。我的“处理”单位是在时间=0时没有来自公司的竞选捐款的单位。
现在我想改变我的因变量,使其成为表示该年当选候选人的二元变量。所有的“单位”都是在时间=0时当选的。如何使用固定效应来估计logit或probit模型?我尝试使用R中的“pglm”包。
model_binary <- pglm(dummy_elected ~ time + treatment + time*treatment, 
                           data = dataset, 
                           effects = 'twoways',
                           model = 'within',
                           family = 'binomial',
                           start = NULL)

然而,我遇到了这个错误:
Error in maxRoutine(fn = logLik, grad = grad, hess = hess, start = start,  : 
  argument "start" is missing, with no default

为什么会发生这种情况?我的模型出了什么问题吗?概念上是否正确? 我希望第二个回归与第一个尽可能相似。

我读过来自survival包的clogit函数可以完成此任务,但我不知道如何操作。

编辑:

以下是样本数据集的示例:

dataset <- data.frame(individual = c(1,1,2,2,3,3,4,4,5,5),
                      time = c(0,1,0,1,0,1,0,1,0,1),
                      treatment = c(0,0,1,1,0,0,1,1,0,0),
                      corporate = c(0,0,0.1,0,0,0,0.5,0,0,0))

1
这个链接提到了使用PGLM固定效应logit模型时可能会出现崩溃,并建议使用另一种方法(来自glmmML包的函数glmmboot): http://www.polsci.ucsb.edu/faculty/glasgow/ps206/ps206_panel.r - dmb
@dmb 謝謝你,但我不了解函數使用的語法。我如何指定應用個別和時間固定效應的變量? - Arthur Carvalho Brito
1
在进一步思考这个问题时,有各种建模选项,但它们取决于您的数据特征。听起来时间只是0或1来表示选举前和选举后?治疗方案呢 - 听起来可能是1或0?还是您的治疗方案针对每个候选人(如果是这样,那么候选人很多还是不太多)? - dmb
是的,“time = 0”代表2012年选举,即立法变更之前。time = 1代表2016年选举,即变更后。处理也是二进制的。每个在允许时接受任何形式公司资金的候选人都会得到treatment = 1。有大约35k名候选人。 - Arthur Carvalho Brito
你最终找到了一个最佳的工作解决方案来估计固定效应逻辑模型吗? - Jeremy K.
1个回答

1

根据评论,我认为逻辑回归简化为治疗和虚拟当选。因此,我制作了以下数据集:

dataset <- data.frame("treatment" = c(rep(1,1000),rep(0,1000)),
         "dummy_elected" = c(rep(1, 700), rep(0, 300), rep(1, 500), rep(0, 500)))

我接着运行了GLM模型:
library(MASS)
model_binary <- glm(dummy_elected ~ treatment, family = binomial(), data = dataset)
summary(model_binary)

请注意,处理系数很重要并且给出了系数。因此得出的概率如下:
Probability(dummy_elected) = 1 =>  1 / (1 + Exp(-(1.37674342264577E-16 + 0.847297860386033 * :treatment)))
Probability(dummy_elected) = 0 => 1 - 1 / (1 + Exp(-(1.37674342264577E-16 + 0.847297860386033 * :treatment)))

请注意,这些概率与我生成数据时的频率一致。
因此,对于每一行,在上述两个方程中取最大概率,那就是dummy_elected的值。

抱歉,我认为我没有清楚说明我的数据集结构。在时间=1时,治疗并不总是为0。我跟踪同一组个体在两个时间段内的情况。个体被视为接受治疗(treatment = 1)的标准是该个体在t = 0时有公司捐款。如果符合此条件,则同一人在时间=1时将接受治疗(treatment = 1)。 - Arthur Carvalho Brito
那么如果个体在时间0收到了贡献,则处理为(1,1),否则为(0,0)? - dmb
是的,如果(1,1)表示每个时间段内个体的治疗值。 - Arthur Carvalho Brito
我感谢你的回答,但时间和个体固定效应怎么办呢?因为´glm´不能处理固定效应,对吧? - Arthur Carvalho Brito
1
对于你的第一个案例,我可以看出你需要时间0和时间1。然而,在第二个案例中,时间0选举总是1,并且治疗在时间上针对个体类型(捐赠或不捐赠)是恒定的。例如,treatment=1表示时间0捐赠,否则为时间1。每一行代表一个个体候选人。 - dmb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接