gpt4 book ai didi

optimization - 为什么这段代码没有针对所有三点进行优化?

转载 作者:行者123 更新时间:2023-12-03 16:56:11 26 4
gpt4 key购买 nike

背景

我正在尝试将分布拟合到 95% CI 和众数。我用的cost function对0求解三个函数:P(X=2.5 | mu, sigma)=0.025, P(X=7.5|mu, sigma)=0.975, log-N(mu, sigma)的模) = 3.3。注意:对数正态分布的模式是 = $e^{\mu-\sigma^2)}$:

方法

首先我写了一个代价函数,prior

prior <- function(parms) {
a <- abs(plnorm(2.5, parms[1], parms[2]) - 0.025)
b <- abs(plnorm(7.5, parms[1], parms[2]) - 0.975)
mode <- exp(parms[1] - parms[2]^2)
c <- abs(mode-3.3)
return(a + b + c)
}

然后我寻找最小化代价函数的参数

v = nlm(prior,c(log(3.3),0.14))

很明显,函数对于 LCL 模式而非 UCL 模式最大化。

abs(plnorm(7.5, parms[1], parms[2]) - 0.975)
> [1] 0.02499989

这是在所需的 95%CI 处用虚线绘制的图:

x <- seq(0,10,0.1)
plot(x,dlnorm(x, v$estimate[1],v$estimate[2]),type='l')
abline(v=c(2.5,7.5), lty=2) #95%CI

问题

优化两点紧密,所有错误都在第三点。但是,我希望它能均匀地拟合这些点。

如何让函数对abc 项赋予相同的权重?看起来该函数仅适用于 ac

注意:这个问题基于 [cross validated][1] 上的一个问题,除了这个版本专门关于 R 的 nlm() 优化算法的功能,而 CV 问题是关于寻找更合适的分布。

最佳答案

您的优化“不起作用”的原因是三个参数 abc 的比例不正确匹配。 ab 测量概率的差异,并且始终可以通过选择一个非常小的标准差值(parms[ 2]),从那时起 plnorm(2.5, parms[1], parms[2]) 将为 0(与 7.5 相同)。对于 c,相同数量的错误 (0.025) 将不会引起注意 - 这是缩放不匹配。

您可以重写您的优化函数,以便通过将分位数与 2.5 和 7.5 进行比较,在所有三个标准的 x 尺度上测量误差:

prior2 <- function(parms) { 
a <- abs(qlnorm(0.025, parms[1], parms[2]) - 2.5)
b <- abs(qlnorm(0.975, parms[1], parms[2]) - 7.5)
mode <- exp(parms[1] - parms[2]^2)
c <- abs(mode-3.3)
return(a + b + c)
}

这与 Ramnath 的建议类似,只是不是在对数尺度上。这种方法在左尾上效果不佳,因为分布向右倾斜:较低 2.5% 位置的微小变化会导致百分位数在 2.5 处发生较大变化,而在 7.5 处情况并非如此。 Ramnath 关于在对数尺度上工作的建议解决了这个问题,因为对数正态分布在对数尺度上是对称的。

另一种提高拟合度的方法是更改​​优化标准。现在你正在最小化平均绝对误差。这意味着只要其他两个误差项真的很小,一个大的误差就可以了。您可以通过最小化均方误差 (a^2+b^2_c^2) 来对较大的错误施加更大的惩罚。从我的角度来看,这个最新版本(在对数尺度上)产生了最好看的估计。

prior3 <- function(parms) { 
a <- abs(parms[1] - 1.96*parms[2] - log(2.5))
b <- abs(parms[1] + 1.96*parms[2] - log(7.5))
c <- abs(parms[1] - parms[2]^2 - log(3.3))
return(a^2 + b^2 + c^2)
}

关于optimization - 为什么这段代码没有针对所有三点进行优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4368080/

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