【问题标题】:Maximum likelihood in RR中的最大似然
【发布时间】:2015-10-25 19:53:07
【问题描述】:

我对 R 和统计都是新手。我正在玩最大似然估计,但我得到了一些不正确的结果。我想用一个简单的线性函数对 x 建模:

x<-apply(matrix(seq(1,10,1), nrow=1), 1, function(x) 10*x+runif(10,-3,3))
LL<-function(a,b){
    R=apply(x,1,function(y) a*y+b)
    -sum(log(R))
    }
mle(LL, start=list(a=10, b=0))

我得到以下结果:

Coefficients:
    a         b 
43571.957  1338.345 

而不是a~10,b~0。

我根据Spacedman的建议修改了代码:

set.seed(99)
x<-apply(matrix(seq(1,10,1), nrow=1), 1, function(x) 10*x+runif(10,-3,3))
LL<-function(a,b){
R = x[,1] - a*(1:10) + b
-sum(R^2)
}
library(stats4)
mle(LL, start=list(a=11, b=0.3))

Error in solve.default(oout$hessian) : 
Lapack routine dgesv: system is exactly singular: U[1,1] = 0

我不知道如何摆脱这个错误。更改 sees 并再次生成 x 值没有帮助。

【问题讨论】:

  • mle 函数来自哪个包?另外,在生成数据之前使用set.seed(99),这样我们就可以使用相同的随机数
  • @Spacedman mle 来自包 stats4

标签: r statistics


【解决方案1】:

这里有几件事需要注意。为了澄清,我们首先将误差项的分布从均匀分布runif(x, -3, 3) 更改为标准。正态分布:rnorm(x)。我们现在可以轻松地模拟您的数据,然后通过以下方式设置您的(负)对数似然和最大化(最小化):

a <- 10 
b <- 0
set.seed(99)
x <- apply(matrix(seq(1, 10, 1), nrow=1), 1, function(x) b + a * x + rnorm(10))
minuslogL <- function(a, b) -sum(dnorm(x[, 1] - (b + a * 1:10), log = TRUE))
library(stats4)
mle(minuslogL, start = list(a = 11, b = 0.3))

Call:
mle(minuslogl = minuslogL, start = list(a = 11, b = 0.3))

Coefficients:
        a         b 
9.8732793 0.5922192 

请注意,这很好用,因为可能性是平滑的,mle() 使用“BFGS”进行优化,例如。准牛顿梯度法。让我们尝试相同的错误:

set.seed(99)
x <- apply(matrix(seq(1, 10, 1), nrow=1), 1, function(x) b + a * x + runif(10, -3, 3))
minuslogL2 <- function(a,b) -sum(dunif(x[, 1] -(a * 1:10 + b), -3, 3, log = TRUE))
mle(minuslogL2, start = list(a = 11, b = 0.3))

Error in optim(start, f, method = method, hessian = TRUE, ...) : 
  initial value in 'vmmin' is not finite

这失败了!为什么?由于统一误差限制了参数空间,因此您不会得到平滑的可能性。如果您将参数 a、b 与真实值相距太远,您将得到 Inf。如果您移动得足够近,您将获得相同的可能性(例如,许多可能的最小值):

> minuslogL2(11, 0.3)
[1] Inf
> minuslogL2(10, 0)
[1] 17.91759
> minuslogL2(10.02, 0.06)
[1] 17.91759

最大化这种可能性相当于找到集合:{a,b}: -logL(a, b) == -logL(10, 0),可以通过普通搜索算法找到。

【讨论】:

  • 谢谢 J.R. 我认为在最大似然估计期间,我们正在最大化产生数据的分布函数。您是否在此处最大化错误的分布函数?你知道有什么书可以直观地处理这个主题吗?
  • 不客气!是的,我正在最大化错误分布,但这是完全相同的。正常情况下,y=b+ax+e e~N(0,1),对应:dnorm(y,a*x+b,1)dnorm(y-ax-b,0,1)。有数以百万计的介绍性统计书籍包含 MLE。在您自己的研究领域中选择一个或尝试“应用数学统计,第 7 版”
  • 很好的解释。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多