我正在尝试模拟可以使用嵌套 logit 模型估计的数据。如果 epsilon 是具有嵌套结构 $B_1, ..., B_K $ 和嵌套参数 $\lambda_1, ... \lambda_K$ 的分布式嵌套 logit,则 epsilon 的 CDF 为
我正在寻找一种在 R 中模拟随机偏差的方法。evd 包不允许用户指定特定的嵌套结构。显然,逆 CDF 方法在这里也不起作用。
如有任何建议,我们将不胜感激。
事实上,EVD 确实允许用户模拟嵌套的 logit 偏差。该函数是 rmvevd(随机多元 EVD)。文档提供了如何模拟多元 EVD 偏差的示例,但这有点麻烦,所以我将提供一个简单的嵌套 logit 问题的示例。
D = 4 个备选方案,备选方案 1 在巢 1 中;替代方案 2、3、4 在嵌套 2 中。
lambda_2 = 0.5 是嵌套参数。
B = 由 4 个备选方案组成的所有可能集合的集合:(B = {1}, {2}, {3}, {4}, {1,2} {1,3}, {1 ,4}、{2,3}、{2,4} {3,4}、{1,2,3}、{1,2,4}、{1,3,4}、{2,3, 4}, {1,2,3,4})
mvevd 要求用户指定参数 dep 和 asy。 dep 是 B 中集合上的嵌套参数向量,长度为 2 或更大。 asy(在嵌套 logit 示例中)是指定嵌套结构的列表。在此示例中,asy 将是第 1 个和第 14 个条目中的 1 向量(对应于其自己组中的替代项 1,以及组 2 中的替代项 2,3,4)。 dep 在除第 10 个条目之外的所有条目中都将为 1,该条目等于 lambda_2(因为 {2,3,4} 是 B 中非单位长度的第 10 个元素)。根据本例模拟10个4维嵌套logit偏差的代码示例如下:
library('evd')
vdep <- c(rep(1,9), lambda, 1)
asy_list <- list(1, 0, 0, 0, c(0,0), c(0,0), c(0,0), c(0,0), c(0,0), c(0,0),
c(0,0,0), c(0,0,0), c(0,0,0), c(1,1,1), c(0,0,0,0))
deviates <- rmvevd(10, dep = vdep, asy = asy_list, model = "alog", d = 4)
如果它有用,我编写了这个模拟嵌套 logit 错误的 R 函数https://github.com/wilburtownsend/r-nested-logit。
此函数可以处理比 EVD 更多的替代方案和/或嵌套。