我尝试使用 MLE 获得模拟结果,但未能获得参数系数 beta 的正确估计结果。我试图放弃固定效应并使用合并 OLS,并且 beta 估计似乎更合理。你有什么想法吗?
rm(list = ls())
set.seed(1234)
# DGP
draws = 1
# set parameters
NumInd = 100
NumPeriod = 100
alpha_sd = 1
theta_sd = 1
error_sd = 1
n_obs = NumInd * NumPeriod
Ind = rep(1:NumInd, each = NumPeriod)
# generate variable
alpha = rep(runif(NumInd), each = NumPeriod) # individual fixed effect
theta = rep(runif(NumPeriod), NumInd) # time fixed effect
X = data.frame(X1 = rnorm(n_obs, 0, 1),
X1 = rnorm(n_obs, 1, 1),
X3 = runif(n_obs))
beta = c(1, 3, 5) # real parameters
error = rnorm(n_obs, 0, error_sd)
y = as.matrix(X) %*% beta + alpha + theta + error # generate outcome
# ### not assuming the fixed effect distribution, the parameters results are not good. ####
obj = function(par, X, y){
beta_h = par[1:3]
error_sd_h = par[4]
alpha_h = rep(par[5:(NumInd+4)], each = NumPeriod)
theta_h = rep(par[(NumInd+5):(NumInd+NumPeriod+4)], NumInd)
likelihood = dnorm(y, mean = alpha_h + theta_h + as.matrix(X) %*% beta_h, sd = error_sd_h)
logll = log(likelihood + 0.0000001)
return(-sum(logll))
}
results = optim(par = c(rep(0.1,3), 1, rnorm(NumInd), rnorm(NumPeriod)), X = X, y = y ,fn = obj)
results$par
贝塔估计是:
> results$par[1:3]
[1] -0.001649883 0.883651588 0.691368696
但是如果我使用合并的 OLS,它工作正常
obj = function(par, X, y){
beta_h = par[1:3]
error_sd_h = par[4]
likelihood = dnorm(y, mean = as.matrix(X) %*% beta_h, sd = error_sd_h)
logll = log(likelihood + 0.0000001)
return(-sum(logll))
}
f = optim(par = rep(0,4) ,X = X, y = y ,fn = obj)
贝塔估计是:
> f$par[1:3]
[1] 0.9896624 3.1958525 6.1668074