在R中估计多项式概率模型

时间:2012-11-13 23:37:39

标签: r

我在R中估计多项式概率模型时遇到了问题。我发现了两个包,但我还没有得到满意的结果。我的代码中有错误吗?我是否错误地使用了包裹?

一个小例子:

消费者面临3种选择,加上不采取任何选择的外部选择。外部选项的效用标准化为零:

u_i0 = 0
u_i1 = -20 + 1*age_i + epsilon_i1
u_i2 = 0             + epsilon_i2
u_i3 =  15 - 1*age_i + epsilon_i3

(这里我为消费者编制索引。)

代码在哪里(假设没有错误)年龄在11:50是统一的,而epsilons是iid正常(0,1),与年龄无关:

library(MNP)  # Multinomial probit
library(mlogit)  # Has a probit option

n <- 1000
df <- data.frame(age=sample(11:50, replace=TRUE, size=n))
constant <- c(-20, 0, 15)
coefficients <- rbind(c(1, 0, -1))
epsilon <- matrix(rnorm(n*3), nrow=n, ncol=3)
utility <- (matrix(rep(constant, n), nrow=1000, ncol=3, byrow=TRUE) +
            as.matrix(df) %*% coefficients + epsilon)
isTRUE(all.equal(utility[1, ], as.vector(constant + coefficients * df$age[1] +
                                         epsilon[1, ])))  # True as expected
df$choice <- max.col(utility)
max.utility <- apply(utility, 1, max)
df$choice[max.utility < 0] <- 0  # Take outside option when all product utilities < 0
df$choice <- factor(df$choice)
table(df$choice)

model.mnp <- mnp(choice ~ age, data=df, burnin=100)
summary(model.mnp)  # Many of the 95% intervals don't contain the true value

model.mlogit <- mlogit(choice ~ 0 | age, data=df,
                       varying=NULL, shape="wide", probit=TRUE)
summary(model.mlogit)

我希望模型能够恢复系数,但是mnp的估计似乎是关闭的(或者它们只是非常嘈杂?),mlogit给出了一个错误,说系统在计算上是单数的。

我该怎么办?

编辑:这确实有效(probit = FALSE):

model.mlogit <- mlogit(choice ~ 0 | age, data=df, varying=NULL, shape="wide", probit=FALSE)
summary(model.mlogit)

它给出大约-30,0,22和年龄系数为1.5,0,-1.4的常数。代码运行并且它给出了合理的估计 - 但它们并不完全正确,因为数据是在正常错误的情况下生成的,而对于正确指定的logit,错误必须是极值(参见http://en.wikipedia.org/wiki/Logistic_regression#As_a_latent-variable_model

0 个答案:

没有答案