sha*_*azz 8 r multinomial mlogit
长话短说:
我需要运行多项logit回归与R.我个人和时间固定效应想到可以用包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)
Run Code Online (Sandbox Code Playgroud)
我对这种分析很陌生。但如果我理解正确,如果我想估计受访者的特征对他们选择的影响,我可能会使用多项 logit 回归。
为了利用数据的纵向结构,我想在我的规范中包含个人和时间固定的影响。
据我所知,具有固定效应的多项式 logit 回归首先由 Chamberlain (1980, Review of Economic Studies 47: 225–238) 提出。最近,Stata 用户已经获得了实现这个模型(femlogit)的例程。
在 femlogit 包的小插图中,作者引用clogit了survival包中的 R 函数。
根据帮助页面,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")
Run Code Online (Sandbox Code Playgroud)
现在,如果我正确理解了clogit工作原理,则可以通过该函数传递固定效果strata(有关其他详细信息,请参阅本教程)。但是,恐怕我不清楚如何使用这个函数,因为没有为各个特征变量返回系数值(即我只得到NAs)。
library(survival)
fit <- clogit(formula("choice ~ alt + x1 + x2 + strata(individual_fixed_effect, time_fixed_effect)"), as.data.frame(data_mlogit))
summary(fit)
Run Code Online (Sandbox Code Playgroud)
例如:由于我没有能够找到一个原因(一定有什么东西,我很想念这些功能估计的方式),我已经R中使用其他包找了一个解决方案glmnet,VGAM,nnet,globaltest,和mlogit。
只有后者似乎能够使用适当的估计策略明确处理面板结构。出于这个原因,我决定试一试。但是,我只能在没有固定效应的情况下运行多项 logit 回归。
# state formula
formula_mlogit <- formula("choice ~ 1| x1 + x2")
# run multinomial regression
fit <- mlogit(formula_mlogit, data_mlogit)
summary(fit)
Run Code Online (Sandbox Code Playgroud)
如果我正确理解如何mlogit工作,这就是我所做的。
通过使用该函数mlogit.data,我创建了一个与该函数兼容的数据集mlogit。在这里,我还指定了每个个体的 id ( id.var = individual_fixed_effect) 和个体所属的组 ( group.var = "time_fixed_effect")。就我而言,该组代表同一年注册的观察结果。
我的公式指定没有与特定选择相关的变量,它们在个体之间随机分布(即 之前的变量|)。相比之下,选择仅受个人特征(即x1和x2)的驱动。
在函数的帮助下mlogit,指定可以使用参数panel来使用面板技术。设置panel = TRUE是我在这里所追求的。
问题是只有当 的另一个参数,即不是 时,才panel可以设置为。TRUEmlogitrparNULL
该参数rpar用于指定随机变量的分布:即|.之前的变量。问题是,由于这些变量在我的情况下不存在,我不能使用参数rpar然后 set panel = TRUE。
一个与此相关的有趣问题是here。给出了一些建议,其中一个似乎朝着我的方向发展。不幸的是,没有提供我可以复制的示例,我不明白如何遵循此策略来解决我的问题。
此外,我对使用mlogit,执行此任务的任何有效方法都不是特别感兴趣(例如,我可以使用survival或其他软件包)。
你知道这个问题的解决方案吗?
有兴趣回答的人有两个警告:
| 归档时间: |
|
| 查看次数: |
1349 次 |
| 最近记录: |