【问题标题】:Extracting log-normal random coefficients from the mlogit R package从 mlogit R 包中提取对数正态随机系数
【发布时间】:2012-02-05 12:58:42
【问题描述】:

我正在使用 R 中的 mlogit 包来估计具有对数正态参数的混合 logit 模型。该包运行良好,但有没有办法提取随机系数,特别是对于非正态分布的参数?

使用“Kenneth Train 使用 R 的 mlogit 包进行的练习”中的示例,第 22 页,

library(mlogit)
data("Electricity", package = "mlogit")
Electr <- mlogit.data(Electricity, id = "id", choice = "choice", 
               varying = 3:26, shape = "wide", sep = "")

Electr$rev.tod <- -1*Electr$tod  # Reverse sign on tod parameter
Elec.mxl <- mlogit(choice ~ pf + cl + loc + wk + rev.tod + seas | 0, data=Electr, 
               rpar = c(cl = "n", loc = "n", wk = "u", rev.tod = "ln", seas = "n"),
               R = 100, halton = NA, print.level = 0, panel = TRUE)
summary(Elec.mxl)

生成这个(截断的)输出:

Coefficients :
            Estimate Std. Error t-value  Pr(>|t|)    
pf         -0.866325   0.032452 -26.696 < 2.2e-16 ***
cl         -0.203770   0.013411 -15.194 < 2.2e-16 ***
loc         2.038715   0.079918  25.510 < 2.2e-16 ***
wk          1.481339   0.065181  22.727 < 2.2e-16 ***
rev.tod     2.105324   0.033971  61.973 < 2.2e-16 ***
seas       -8.490331   0.279262 -30.403 < 2.2e-16 ***
sd.cl       0.360140   0.017474  20.610 < 2.2e-16 ***
sd.loc      1.575765   0.089507  17.605 < 2.2e-16 ***
sd.wk       1.600303   0.122982  13.012 < 2.2e-16 ***
sd.rev.tod  0.390088   0.021940  17.780 < 2.2e-16 ***
sd.seas     1.997713   0.106031  18.841 < 2.2e-16 ***

random coefficients
              Min.    1st Qu.     Median       Mean     3rd Qu.     Max.
cl            -Inf -0.4466810 -0.2037701 -0.2037701  0.03914082      Inf
loc           -Inf  0.9758776  2.0387151  2.0387151  3.10155255      Inf
wk      -0.1189636  0.6811879  1.4813394  1.4813394  2.28149087 3.081642
rev.tod  0.0000000  6.3104924  8.2097637  8.8587752 10.68065958      Inf
seas          -Inf -9.8377681 -8.4903311 -8.4903311 -7.14289412      Inf

有没有办法提取这些随机系数的平均值?这主要是非正态分布参数的问题。正如 Train & Croissant 所指出的,您可以使用以下代码来计算对数正态分布参数的平均系数,但我想知道是否有更直接(更简单!)的方法。

-exp(coef(Elec.mxl)["rev.tod"]+(0.5*(coef(Elec.mxl)["sd.rev.tod"])**2))

【问题讨论】:

  • 由于这个问题更多的是关于统计而不是编程,您可能想在 stats.stackexchange.com 上尝试一下

标签: r statistics


【解决方案1】:

实际上......它不会产生任何输出。您还必须执行summary(Elec.mxl)。除了不告诉我们输出的来源之外,另一个问题是包含 -Inf 的序列的平均值将是 -Inf 或未定义,具体取决于系统作者的兴趣。如果您指的是名为“平均值”的列,那么(在查看摘要对象的结构之后)这应该可以解决问题:

     summary(Elec.mxl)$summary.rpar[ , "Mean"]
#        cl        loc         wk    rev.tod       seas 
#-0.2551692  1.9159597  1.6331273  8.9872786 -8.4093959 

您确实说过您只想要随机系数,对吧? (你不担心一个 logit 模型会产生大约 8 的系数吗?至少在常规 logit 模型中,它通常表明数据情况会产生病态结果。)

【讨论】:

  • 是的...谢谢!至于示例中的系数,我并不特别担心,因为它不是我的模型,我只是用它来说明我的问题。幸运的是,我的应用程序中的系数表现得更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 2017-05-18
  • 2023-04-03
  • 2019-02-21
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
相关资源
最近更新 更多