оптимизация логарифмического правдоподобия, передача разных наборов данных

Я пытаюсь выполнить оптимизацию логарифмической вероятности нормального распределения. Функция логарифмического правдоподобия работает и распознает переданный набор данных, но оптимизация не распознает наличие набора данных? Если мы установили 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

person user1840254    schedule 23.11.2012    source источник


Ответы (2)


optim позволяет передать оптимизируемой функции дополнительные параметры. В этом случае нужно просто добавить data_x=your_new_data_set к оптимальным параметрам.

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

Это то, что позволяет вам сделать параметр ... для optim. Проверьте ?optim для более подробной информации.

person Dason    schedule 23.11.2012
comment
я тоже пробовал это, но он все еще не возвращает правильные данные... это дает вывод: [,1] [1,] 4,996335e+54 [2,] 2,684172e+55, но параметры должны быть близки к 0 и 1. если вы вводите data_x=rnorm(100,0,1), например, в качестве аргумента функции, это работает, но мне нужно иметь возможность изменять данные - person user1840254; 24.11.2012
comment
Я думаю, что ваша проблема в другом? opt по умолчанию пытается найти минимальное значение для функции. Вы можете либо написать свою функцию логарифмического правдоподобия, чтобы возвращать отрицательную логарифмическую вероятность, либо добавить control=list(fnscale=-1) в качестве параметра внутри optim, который сообщит ему вместо этого найти максимальное значение. Но ответ, который я дал, заключается в том, как вы передадите другой набор данных. - person Dason; 24.11.2012
comment
@ user1840254, не забудьте проголосовать и принять ответ (stackoverflow.com/faq#howtoask). - person flodel; 24.11.2012

Используйте аргумент ... для оптимизации:

y <- 1:100
optimization<-optim(c(0,1), loglike, data_x=y)
person Matthew Lundberg    schedule 23.11.2012