对数似然值的优化,在不同数据集中传递。

4
我尝试优化正态分布的对数似然函数。对数似然函数的函数运行良好,并且识别传入的数据集,但是优化过程无法识别数据集是否存在? 如果我们设置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
2个回答

5

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

optim(c(0,1), loglike, data_x = your_new_data_set)

这是optim中的...参数允许您执行的操作。有关更多详细信息,请查看?optim

我也尝试过这个,但它仍然没有返回正确的数据......输出如下:      [,1] [1,] 4.996335e+54 [2,] 2.684172e+55但参数应该接近于0和1。例如,如果您将data_x = rnorm(100,0,1)作为函数的参数输入,则可以正常工作,但我需要能够更改数据。 - user1840254
3
我认为你的问题是不同的?optim默认尝试找到函数的最小值。你可以将对数似然函数编写为返回负对数似然度或者在优化中添加control=list(fnscale=-1)作为参数,这将告诉它寻找最大值。但我给出的答案是如何传递不同的数据集。 - Dason
@user1840254,请不要忘记投票并接受答案(http://stackoverflow.com/faq#howtoask)。 - flodel

2

使用...参数进行优化:

y <- 1:100
optimization<-optim(c(0,1), loglike, data_x=y)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接