长话短说:
我需要对R中的个体和时间固定效应进行多项式logit回归。
我以为可以使用mlogit
和survival
软件包来实现此目的,但是我找不到包含固定效果的方法。
长话短说:
我在各种与堆栈相关的网站上发现了有关此主题的许多问题,但没有一个能够提供答案。此外,对于具有固定效果的多项式logit回归是什么(人们使用不同的名称),以及实现此功能的R程序包,我也感到困惑。 因此,我认为在深入探讨之前提供一些背景知识将是有益的。
请考虑以下内容。 在多项选择题中,每个受访者都有一个选择。 每年都会向受访者询问相同的问题。在时间t的选择受t-1的选择影响的程度上没有先验。 现在,假设有一个面板数据记录这些选择。数据如下所示:
set.seed(123)
# number of observations
n <- 100
# number of possible choice
possible_choice <- letters[1:4]
# number of years
years <- 3
# individual characteristics
x1 <- runif(n * 3, 5.0, 70.5)
x2 <- sample(1:n^2, n * 3, replace = F)
# actual choice at time 1
actual_choice_year_1 <- possible_choice[sample(1:4, n, replace = T, prob = rep(1/4, 4))]
actual_choice_year_2 <- possible_choice[sample(1:4, n, replace = T, prob = c(0.4, 0.3, 0.2, 0.1))]
actual_choice_year_3 <- possible_choice[sample(1:4, n, replace = T, prob = c(0.2, 0.5, 0.2, 0.1))]
# create long dataset
df <- data.frame(choice = c(actual_choice_year_1, actual_choice_year_2, actual_choice_year_3),
x1 = x1, x2 = x2,
individual_fixed_effect = as.character(rep(1:n, years)),
time_fixed_effect = as.character(rep(1:years, each = n)),
stringsAsFactors = F)
我是这种分析的新手。但是,如果我理解正确,如果我想估计受访者的特征对其选择的影响,我可能会使用多项式logit回归。
为了利用数据的纵向结构,我想在我的规范中包括个体和时间固定效应。
据我所知,张伯伦(1980,经济研究评论47:225–238)首先提出了具有固定影响的多项式logit回归。最近,已向Stata用户提供了实现此模型的例程(femlogit)。
在femlogit程序包的小插图中,作者在clogit
程序包中引用了R函数survival
。
根据帮助页面,clogit
要求以其他格式重新排列数据:
library(mlogit)
# create wide dataset
data_mlogit <- mlogit.data(df, id.var = "individual_fixed_effect",
group.var = "time_fixed_effect",
choice = "choice",
shape = "wide")
现在,如果我正确理解clogit
的工作原理,则可以通过函数strata
传递固定效果(有关更多详细信息,请参见tutorial)。但是,恐怕我不清楚如何使用此函数,因为没有为单个特征变量返回系数值(即,我仅得到NAs
)。
library(survival)
fit <- clogit(formula("choice ~ alt + x1 + x2 + strata(individual_fixed_effect, time_fixed_effect)"), as.data.frame(data_mlogit))
summary(fit)
由于我无法找到原因(估计这些函数的方式上必定缺少某些东西),我一直在寻找使用R中其他软件包的解决方案:例如{{1} },glmnet
,VGAM
,nnet
和globaltest
。
只有后者似乎能够使用适当的估计策略来明确处理面板结构。因此,我决定尝试一下。但是,我只能运行没有固定影响的多项式logit回归。
mlogit
如果我正确理解# state formula
formula_mlogit <- formula("choice ~ 1| x1 + x2")
# run multinomial regression
fit <- mlogit(formula_mlogit, data_mlogit)
summary(fit)
的工作原理,这就是我所做的。
通过使用功能mlogit
,我创建了与功能mlogit.data
兼容的数据集。在这里,我还指定了每个个人的ID(mlogit
)和个人所属的组(id.var = individual_fixed_effect
)。就我而言,该组代表了当年注册的观测值。
我的公式指定没有与特定选择相关的变量,而是在个体之间随机分布的变量(即group.var = "time_fixed_effect"
之前的变量)。相比之下,选择仅受个体特征(即|
和x1
)的激励。
在功能x2
的帮助下,指定可以使用参数mlogit
来使用面板技术。我要在这里设置panel
。
问题在于,只有在panel = TRUE
的另一个参数(即panel
不是TRUE
的情况下,mlogit
才能设置为rpar
。
自变量NULL
用于指定随机变量的分布:即rpar
之前的变量。
问题在于,由于在我的情况下这些变量不存在,因此无法使用参数|
并设置rpar
。
与此相关的一个有趣问题是here。提出了一些建议,其中一个似乎对我有帮助。不幸的是,没有提供我可以复制的示例,并且我不理解如何遵循这种策略来解决我的问题。
此外,我对使用panel = TRUE
并没有特别的兴趣,任何有效的方式来执行此任务对我来说都是可以的(例如,我对mlogit
或其他软件包没问题)。
您知道该问题的任何解决方案吗?
两个有兴趣回答的人注意事项: