从mlogit R包中提取对数正态随机系数

时间:2012-01-08 20:10:28

标签: r statistics

我正在使用R中的mlogit包来估计带有log-normal参数的混合logit模型。包运行正常,但有没有办法可以随机系数,特别是对于非正态分布的参数?

使用“Kenneth Train使用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&amp; amp;羊角面包,您可以使用以下代码计算对数正态分布参数的平均系数,但我想知道是否有更简单(更简单!)的方法。

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

1 个答案:

答案 0 :(得分:0)

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

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

你说你只想要随机系数,对吗? (你不是有点担心产生大约8的系数的logit模型吗?至少在常规logit模型中它通常表示产生病理结果的数据情况。)