Что означает эта строка кода в максимизации нормальной функции правдоподобия? - PullRequest
0 голосов
/ 29 апреля 2019

Я изучаю программирование на R и изучаю, как писать функции на R. Ниже приведен фрагмент кода, в котором я не могу понять 4-ю строку, то есть params [! Fixed] <- p. </p>

make.NegLogLik <- function(data, fixed=c(FALSE,FALSE)) { 
    params <- fixed
    function(p) { 
    params[!fixed] <- p
        mu <- params[1]
        sigma <- params[2]
        a <- -0.5*length(data)*log(2*pi*sigma^2) 
        b <- -0.5*sum((data-mu)^2) / (sigma^2) 
        -(a+b)
    }
}

set.seed(1); 
normals <- rnorm(100, 1, 2)
nLL <- make.NegLogLik(normals)
nLL


optim(c(mu = 0, sigma = 1), nLL)$par


nLL <- make.NegLogLik(normals, c(FALSE, 2))  
optimize(nLL, c(-1, 3))$minimum`

1 Ответ

0 голосов
/ 29 апреля 2019

Проверьте это:

fixed = c(FALSE, FALSE)

params <- fixed
params
params[!fixed]

[1] FALSE FALSE

Первоначально вы просто передаете вектор с двумя логическими значениями.

fixed = c(FALSE, 2)

params <- fixed
params
params[!fixed]

!fixed

> params
[1] 0 2
> params[!fixed]
[1] 0

Но когда вы даете своей функции аргумент, вы видите, что нетFALSE.Это из-за того, что называется принуждением.FALSE приводится к 0.

Так что теперь происходит так: вы получаете элемент params, который НЕ является вторым элементом в вашем векторе, а это 0.

Normalиндексирование, как это: c(1,2,3)[2]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...