gpt4 book ai didi

r - 带参数数组的 MLE 函数

转载 作者:行者123 更新时间:2023-12-02 01:23:38 26 4
gpt4 key购买 nike

我想知道在数组中给出拟合参数时如何在 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/ 的第一部分中的原始代码)
如果我运行上面的代码,我会得到一个错误

Error in dnorm(x, param_array[1], param_array[2]) : argument "param_array" is missing, with no default



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

最佳答案

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

问题

函数的评估 LLstats::mle是通过匹配 nmLL 的形式论证.在 案例 1 ,匹配没有难度,但在 案例 2 你没有匹配,因此你将无法评估 LL .

So what do people do if they have like 50 parameters? Do they type them in by hand?



经过仔细思考,这不是一个虚假的论点吗?如果真的有50个参数,使用数组真的省力吗?

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

关于r - 带参数数组的 MLE 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38475612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com