我正在使用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))
答案 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模型中它通常表示产生病理结果的数据情况。)