如何在R

时间:2019-01-21 00:06:31

标签: r multinomial mlogit

长话短说:

我需要对R中的个体和时间固定效应进行多项式logit回归。 我以为可以使用mlogitsurvival软件包来实现此目的,但是我找不到包含固定效果的方法。

长话短说:

我在各种与堆栈相关的网站上发现了有关此主题的许多问题,但没有一个能够提供答案。此外,对于具有固定效果的多项式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} },glmnetVGAMnnetglobaltest

只有后者似乎能够使用适当的估计策略来明确处理面板结构。因此,我决定尝试一下。但是,我只能运行没有固定影响的多项式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或其他软件包没问题)。

您知道该问题的任何解决方案吗?

两个有兴趣回答的人注意事项:

  1. 我对固定效果感兴趣,而不对随机效果感兴趣。但是,如果您认为没有其他方法可以利用R中我的数据的纵向结构(确实存在于Stata中,但我不想使用它),请随时共享您的代码。
  2. 我对贝叶斯学习不感兴趣。因此,如果可能,请不要建议这种方法。

0 个答案:

没有答案