首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于MLE的Newton Raphson代码-需要TRUE/FALSE的缺失值

用于MLE的Newton Raphson代码-需要TRUE/FALSE的缺失值
EN

Stack Overflow用户
提问于 2017-11-19 21:05:00
回答 1查看 556关注 0票数 0
代码语言:javascript
复制
newtonraphson <- function(ftn, x0, tol = 1e-9, max.iter = 100) {
 x <- x0
 fx <- ftn(x)     
 iter <- 0
 while ((abs(fx[1]) > tol) & (iter < max.iter)) {
  x <- x - fx[1]/fx[2]
  fx <- ftn(x)
  iter <- iter + 1
  cat("At iteration", iter, "value of x is:", x, "\n")
 }
 if (abs(fx[1]) > tol) {
  cat("Algorithm failed to converge\n")
  return(NULL)}
  else {
  cat("Algorithm converged\n")
  return(x)}
}

X <- c(3,1,2,0,6,8,4,5,7,0)    
n <- 10
lambda <- seq(0,10,0.01)
ftn <- function(p) {
 for (i in 1:10){
 fp <- sum(X[i])*log(lambda) - 10*lambda
 dfp <- (1/lambda)*sum(X[i]) - 10
 }
 return(c(fp,dfp))
}

newtonraphson(ftn, 0.1, 1e-06)

这是我的代码,用于找到lambda的最大似然估计。然而,我得到了这个错误:

代码语言:javascript
复制
Error in while ((abs(fx[1]) >= tol) & (iter <= max.iter)) { : 
missing value where TRUE/FALSE needed

我似乎不能解决这个问题。有人能帮上忙吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-11-20 03:40:35

您正在从泊松分布中寻找lambda的最大似然估计。然而,您正在求解ftn(lambda)=0,它不会给出最大的可能性(假设参数p实际上是lambda的一个值)。

Poisson distribution in Wikipedia来看,lambda的最大似然估计是sum(X)/length(X)

您应该将ftn的导数设置为零,并为lambda解算。为此,您不需要您的newtonraphson

解出(1/lambda)*sum(X[i]) - 10=0,它会给出维基百科中的表达式。(10是length(X))。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47377180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档