带参数数组的MLE功能

用户名

我想知道在数组中给出拟合参数时如何在R中进行最大似然估计。当参数数量很大时,这是必需的。因此,基本上,为了使正态分布适合数据x,我想执行以下操作

LL <- function(param_array) {
   R = dnorm(x, param_array[1], param_array[2])
  -sum(log(R))
}

mle(LL, start = list(param_array = c(1,1)))

(而不是http://www.r-bloggers.com/fitting-a-model-by-maximum-likelihood/的第一部分中的原始代码)如果运行上述代码,将会收到错误消息

dnorm(x,param_array [1],param_array [2])中的错误:缺少参数“ param_array”,没有默认值

谁能让我知道如何以正确的方式实现我想要的?

李哲源

stats4::mle 不是一个长函数,您可以在R控制台中对其进行检查:

> stats4::mle

注意如何start处理:

start <- sapply(start, eval.parent)
nm <- names(start)

情况1

如果您这样做:

LL <- function(mu, sigma) {
   R = dnorm(x, mu, sigma)
  -sum(log(R))
}

mle(LL, start = list(mu = 1, sigma = 1))

你得到:

nm
#[1] "mu"  "sigma"

还,

formalArgs(LL)
#[1] "mu"  "sigma"

情况2

如果您这样做:

LL <- function(param_array) {
   R = dnorm(x, param_array[1], param_array[2])
  -sum(log(R))
}

mle(LL, start = list(param_array = c(1,1)))

你得到

nm
#[1] NULL

formalArgs(LL)
#[1] param_array

问题

LL内部函数的评估stats::mle是通过与nm的形式参数匹配来实现的LL情况1中,匹配没有困难,但是在情况2中,您没有匹配,因此您将无法评估LL


那么,如果人们拥有50个参数,该怎么办?他们会手动输入吗?

经过认真的思考,这不是伪造的论点吗?如果您确实有50个参数,使用数组真的可以节省您的精力吗?

首先,在函数内部LL,必须指定param_array[1],,param_array[2]... param_array[50],,即,仍然需要在正确的位置手动输入50个参数。在指定时start,您仍然需要逐个元素输入长度为50的矢量,对吗?与不使用数组而是使用列表相比,这不是一样多的工作吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章