【问题标题】:Implementing Newton's method for the Mle of a Logistic Distribution in R在 R 中为 Logistic 分布的 Mle 实现牛顿法
【发布时间】:2014-01-02 17:08:55
【问题描述】:

考虑下面的逻辑密度:

乳胶:$$ f \left( x; \theta \right) \frac{\exp\left\{- \left( x_i-\theta \right)\right\}}{\left(1+\ exp\left\{-\left(x_i-\theta \right) \right\} \right)^2} $$

对应的对数似然由下式给出:

乳胶:$$l \left( \theta \right)= n\theta -n \bar{x}-2\sum_{i=1}^{n} log\left(1+\exp\left\{-\left( x_i -\theta \right) \right\} \right)$$

不幸的是,$\theta$ 的 mle,它的平均值,不能以封闭的形式获得,因此我必须编写一个数值优化算法。我认为使用牛顿法寻找 $ l \prime \left( \theta \right)=0$

的点是个好主意

现在,如果我们要使用牛顿法,我们将需要对数似然的一阶和二阶导数,它们由下式给出:

乳胶:$$l \prime \left( \theta \right)=n-2 \sum_{i=1}^n \frac{\exp\left\{- \left(x_i-\theta \right)\right\}}{\left(1+\exp\left\{-\left(x_i-\theta \right) \right\} \right)} $$

乳胶:$$ l\prime \prime \left( \theta \right) =-2 \sum_{i=1}^n \frac{\exp\left\{- \left( x_i-\theta \right)\right\}}{\left(1+\exp \left\{-\left(x_i-\theta \right) \right\} \right)^2} $$

由于逻辑分布类似于正常分布,我们可以从使用样本均值作为初始猜测 $\theta^{(0)}$ 开始,然后根据熟悉的公式继续:

乳胶:$$\theta^{(1)}=\theta^{(0)}- \frac{l^\prime \left( \theta^{(0)} \right)}{l^{\prime \prime} \left( \theta^{(0)} \right) }$$

我是 R 新手,因此我希望能在编写代码时得到一些帮助。


提前谢谢你

编辑:我看到统计网站上的一些人明智地决定将其迁移到这里,因为我的 LaTeX 代码没有显示,而且人们不是使用过分布的统计学家。如果可以,请提供帮助,但我可以理解为什么我的主题看起来难以理解。

【问题讨论】:

  • @dickoa 我知道算法必须一直运行到指定的小值。但我不知道如何让它做迭代。我已经用 LaTeX 写下了公式,但没有显示出来,我希望有人能告诉我需要使用哪些命令。
  • 我有一些关于迭代重加权最小二乘的课堂笔记:ms.mcmaster.ca/~bolker/classes/s4c03/notes/week3B.pdfms.mcmaster.ca/~bolker/classes/s4c03/notes/week4A.pdf 。后者在 R 中给出了一个最小的 IRLS 实现。
  • 您确定不能将您的方程式改造成unirootoptim 可以处理的形式?
  • 顺便说一句,如果您添加“MathAnywhere”插件,LaTex 代码至少会在 Chrome 下显示出来。
  • @CarlWitthoft 我现在可以看到它,这是一个奇迹!谢谢!

标签: r simulation


【解决方案1】:

虽然您在这里提出了一个非常具体的问题,但我将回答更广泛的问题,即如何通过最大化可能性来获得 MLE。在这种情况下,我将简单地使用 R 的内置逻辑函数来获取每个点的对数似然并最大化总和。如果您出于特定原因希望更多地“手动”执行此操作,请说明您的限制是什么。

theta=30生成一些随机数据:

n <- 1000
theta <- 30
x <- rlogis(n, theta)

优化对数似然度:

optimize(function(theta) -sum(dlogis(x, location=theta, log=TRUE)), c(-100,100))
## $minimum
## [1] 29.97946
## 
## $objective
## [1] 2024.383

【讨论】:

  • 这是一个方便的快捷方式,非常感谢!这正是我需要知道的。如果我理解得很好,通过指定 log=TRUE R 获取该函数的日志?
  • 是的,在这种情况下;它返回对数似然而不是似然。但它不是用于所有其他函数的通用参数。
  • 我还想问你为什么在对数似然之和前面加上一个减号?
  • 因为默认情况下,optimize 会找到最小值。您可以改用maximum=TRUE。见?optimize
【解决方案2】:

为帮助页面键入?uniroot。然后写出你的方程,这样你就有了像f(x) = left(x)-right(x)这样的函数,你希望找到它的根,即x的值将f(x)设置为零。然后将该函数填入uniroot

【讨论】:

  • 我有一个观察向量 x,n=1000x, n=1000,我想找到使一阶导数(请参见上文)等于零的 θ 值。我试过命令 >uniroot(fction(y) -2*sum(exp(-(x-y))/(1+exp(-(x-y)),lower=-100,upper=100,tol=10^( -8),maxiter=10) 但它似乎不起作用。错误是 Error: unexpected ',' in "uniroot(fction(y) -2*sum(exp(-(x-y))/(1+exp) (-(x-y)),"出了什么问题?
  • @JohnK 通常这表明括号不匹配,因此逗号出现在错误的函数中。我希望你确实正确拼写了“function”!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-24
  • 2019-09-08
  • 2015-06-11
  • 2013-10-30
  • 1970-01-01
  • 2019-06-16
  • 2019-06-19
相关资源
最近更新 更多