- 已编辑
为什么我的极大似然估计总是显示“initial value in 'vmmin' is not finite”?
各位大大,小弟使用R写了一个简单的极大似然估计来估计probit模型,但是最后总是显示“initial value in 'vmmin' is not finite”,求教如何改进下面的程序,不想使用mle等相关的package,只使用似然函数和最优化。
目前查了一下原因,程序本身是没有问题的,问题出在数据当中因变量和自变量当中都存在缺失值,我在stata里面删掉缺失样本后的数据用下面的程序是可以跑的,想请问一下在R里面如何在不删除缺失样本的前提下,直接修改下面程序求解:
----------------------- copy starting from the next line -----------------------
* Example generated by -dataex-. To install: ssc install dataex
library(haven)
library(summarytools)
library(matrixStats)
# --- prepare data ---
xtlogit_data <- read_dta("C:\\Users\\ThinkPad\\Desktop\\MSL for R\\xtlogit_data.dta")
attach(xtlogit_data)
# model matrix `X` and response `Y`
X <- cbind(1, age , grade , not_smsa , south)
Y <- union
K<- ncol(X)
# initial guess on coefficients
ans_logit <- glm(union ~ age + grade + not_smsa + south,
family = binomial(link = "logit"),
data = xtlogit_data)
vi <- c(coef(ans_logit))
# requires model matrix `X` and binary response `Y`
probit.nll <- function (beta) {
# linear predictor
eta <- X %*% beta
# probability
p <- pnorm(eta)
# negative log-likelihood
-sum((1 - Y) * log(1 - p) + Y * log(p))
}
# requires model matrix `X` and binary response `Y`
probit.gr <- function (beta) {
# linear predictor
eta <- X %*% beta
# probability
p <- pnorm(eta)
# chain rule
u <- dnorm(eta) * (Y - p) / (p * (1 - p))
# gradient
-crossprod(X, u)
}
fit <- optim(vi, probit.nll , method = "BFGS", hessian = TRUE)
# comparison
fit$par
end
------------------ copy up to and including the previous line ------------------
数据在下面的链接当中:链接:https://pan.baidu.com/s/1NCwt3pimR9dwXBPU1Dg0yw 提取码:jvvf
望各位不吝赐教,不胜感激