我试图通过模拟频率并将它们用作概率(我无法直接计算)来最大化离散选择中的模拟可能性(Lerman and Manski (1981))。然而,R 从未设法找到任何最优值(最大化总是产生起始值)。作为一个最小的例子,这里我的代码用于一个非常简单的概率估计:
### simulate data
set.seed(5849)
N <- 2000
b.cons <- 8
b.x <- 10
x <- cbind(rep(1, N), runif(N)) #"observed variables"
e <- rnorm(N) # "unobserved error"
k <- runif(N)*10+7 # threshold: something random, but high enough to guarantee some variation in i
t <- x%*%c(b.cons, b.x)+e
i <- 1*(k>t) #participation dummy
### likelihood function
R <- 1000 # number of draws
err <- matrix(rnorm(R*N), N, R) # draw error terms (outside of likelihood function to speed up estimation)
# estimate b.i, sig.i
probit.sim <- function(params, I, K, X) {
part =matrix(NA, N, R)
T = X%*%params%*%rep(1, R) + err
for (i in 1:R) part[,i] = K>T[,i]
pr.i1 = rowSums(part)/R
pr.i1[pr.i1==0] <- 0.001
pr.i1[pr.i1==1] <- 0.999
pr.i0 = 1-pr.i1
llik = t(I)%*%log(pr.i1) + t(1-I)%*%log(pr.i0)
-llik
}
### maximize likelihood
optim(c(1,1), probit.sim, I = i, K = k, X = x)
是因为概率不够平滑吗?有没有办法最大化那些不是超级平滑的东西?在图表上,最大值看起来仍然很清楚......或者我完全错过了其他东西?
我真的是一个初学者,所以我提前感谢您提供任何有用的建议!
(还有任何关于如何编写这样一个模拟最大似然函数的细节的参考资料——我看到的大多数参考资料仍然非常理论化)