首页 > 解决方案 > 这行代码在最大化正态似然函数中意味着什么?

问题描述

我正在学习 R 编程并学习如何在 R 中编写函数。下面是我无法理解第 4 行的代码,即 params[!fixed] <- 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`

标签: r

解决方案


检查这个:

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。

像这样的正常索引:c(1,2,3)[2]


推荐阅读