优化对数似然,传入不同的数据集

use*_*254 4 optimization r function normal-distribution

我正在尝试优化正态分布的对数似然.对数似然的函数有效,它识别传入的数据集,但优化无法识别数据集是否存在?如果我们设置data_x=rnorm(100,0,1)此代码返回正确答案,但我需要能够传入不同的数据集.

x <- rnorm ( 100, 0, 1)
loglike <- function( pars, data_x=x) {
  mu <- pars[1]
  sigma2 <- pars[2]^2
  numobs <- length( data_x )
  sumsq <- sum( ( data_x-mu )^2 )
  val.log.like <- -numobs / 2 * log( sigma2 ) - ( 1 / (2*sigma2) ) * sumsq
  return( val.log.like )
}

optimization <- optim( c( 0, 1), loglike)
answer <- matrix( optimization$par, 2, 1) 
answer
Run Code Online (Sandbox Code Playgroud)

Das*_*son 5

optim允许您将其他参数传递给您正在优化的函数.在这种情况下,只需添加data_x=your_new_data_set到optim参数即可.

optim(c(0,1), loglike, data_x = your_new_data_set)
Run Code Online (Sandbox Code Playgroud)

这是允许您执行的...参数optim.查看?optim更多详细信息.

  • 我认为你的问题不同了吗?默认情况下,optim尝试查找函数的最小值.您可以编写loglikelihood函数来返回负对数似然,也可以将`control = list(fnscale = -1)`添加为optim内部的参数,这将告诉它找到最大值.但我给出的答案是如何传递不同的数据集. (3认同)