我需要找到二项式数据向量的最大似然估计。
像这样的人:
binvec <- rbinom(1000, 1, 0.5)
我尝试首先创建这个函数,然后使用optim()
优化它。
llbinom <- function(theta, x) {return(sum(dbinom(x=x,
size = theta[1],
prob = theta[2],log=TRUE)))}
mybin <- optim(c(0.5,0.5),fn=llbinom,x=binvec)
mybin
我确实得到了一些结果,但也得到了一些错误消息,即NaN
正在生成,函数不能在初始参数中进行评估。我根据一个适用于正态分布数据的示例构建了它,并认为我在转换它时犯了错误。
这里,我得到的原始代码:
ll <- function(theta,x) {return(-sum(dnorm(x=x,
mean=theta[1],sd=theta[2],log=TRUE)))}
mle <- optim(c(5,3),fn=ll,x=binvec)
发布于 2018-12-04 15:31:56
这里有几个问题。
fnscale=-1
,否则默认情况下fnscale=-1
会最小化,因此需要定义一个负日志似然函数)。size
参数必须是整数size
参数是不寻常的,也是技术上的挑战(如果您想要阅读这项技术,通常使用N-混合模型来完成:例如,参见unmarked
包);通常假设试验的次数是已知的。所以我会尝试llbinom <- function(theta, x) {return(
-sum(dbinom(x=x,
size = 1,
prob = theta[1],log=TRUE)))}
mybin <- optim(c(0.5),fn=llbinom,x=binvec)
要做到这一点有很多理由(数值);如果你真的只需要找到单个二项分布样本x
(独立观测,在s
试验中成功的概率相同)的概率,那么解析解就是sum(x)/sum(s)
.
https://stackoverflow.com/questions/53622728
复制