最大似然估计

数据挖掘 r 统计数据 绘图
2021-09-15 15:55:06

给定一个样本X1,X2X100和密度函数 f(x;θ)=1π(1+(xθ)2), 找到一个近似解 θ^MLE.

我的尝试:

我找到了联合可能性L(θ;x1,x2x100)=i=1100(1π(1+(xiθ)2))

l=log(L)=100ln(π)i=1100(ln(1+(xθ)2).

我不确定这一步

θ(log(L))=i=1100(2(xiθ)1+(xiθ)2

然后我用牛顿的方法找到最大值。

这是我用来计算最大值的脚本

#deravitive of log(L).
fun1 <- function(theta){
  y1 <- 0
  for(i in 1:length(x)){
    y1 <- y1 + (2*(theta-x[i]))/(1+(x[i]-theta)^2)
  }
  return(y1)
}


#derivative of fun1.
fun1.tag <- function(theta){
  y <- 0
  for(i in 1:length(x)){
    y <- 2*(theta^2+(x[i]^2)-20*x[i]-1)/((1+(x[i]-theta)^2)^2)
  }
  return(y)
}


# The Newton's method.


guess <- function(theta_guess){
  theta2 <- theta_guess - fun1(theta_guess)/fun1.tag(theta_guess)
  return(theta2)
}
theta1 <- median(data$x)
epsilon <- 1

theta_before <- 0

while(epsilon >0.0001){
  theta1 <- guess(theta1)
  epsilon <- (theta_before- theta1)^2
  theta_before <- theta1
}

我得到的是θ^MLE=5.166

我现在正在尝试绘制数据(在我的情况下为 x)并检查是否θ^MLE=5.166实际上是一个最大值。

2个回答

您的公式中有错字

#derivative of fun1.
fun1.tag <- function(theta){
  y <- 0
  for(i in 1:length(x)){
    y <- y + 2*(theta^2+(x[i]^2)-20*x[i]-1)/((1+(x[i]-theta)^2)^2)
  }
  return(y)
}

循环内部y + 缺少。

似乎更容易了

MLE 定义为

θMLE=argmax(100lnπ+i=1100ln(1+(xiθ)2))

所以你需要最小化对数的总和并将指数应用于总和的每个元素不会改变 argmin 的结果,因为它是一个单调递增函数,所以在一天结束时你必须解决

θMLE=argmini=1100(xiθ)2

并且由于它显然是凸的,因此可以在导数为零的地方找到 argmin,因此

(i=1100(xiθ)2))θ=0

所以最后

θMLE=1100i=1100xi

这是观测分布的质量中心