我想知道在数组中给出拟合参数时如何在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] 删除。
我来说两句