【发布时间】:2010-12-15 01:53:43
【问题描述】:
背景
我正在尝试将分布拟合到 95% CI 和模式。 我使用的成本函数解决了 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
问题
优化两点紧密,所有的错误都在第三点。但是,我希望它能够均匀地拟合这些点。
我怎样才能让函数对 a、b 和 c 项的大小赋予同等权重?看来该函数只适合 a 和 c。
注意: 这个问题是基于 [crossvalidated][1] 提出的一个问题,除了这个版本专门关于 R 的 nlm() 优化算法的功能,而 CV 问题是关于寻找更合适的分布。
【问题讨论】:
-
也许我遗漏了一些东西,但我没有看到参数 X 在名为 Prior 的成本函数中是如何使用的。
-
@Samsdram,你是对的,我已经修复了错误。在原始代码中,x 用于设置 CI,即 x = c(2.5, 7.5),但我决定修复帖子中的值以简化它。
-
我怀疑你是否一直在正确解释你得到的东西。如果将mode从previous函数中去掉,结果差别很小。
-
@DWin 我看到了,但我不清楚为什么会发生这种情况。是给你的吗?
-
尝试在感兴趣的范围内绘制你的函数:plot(seq(0,10,0.1), abs(plnorm(seq(0,10,0.1), 1.3197251, 0.3546866) - 0.025) + abs(plnorm(seq(0,10,0.1), 1.3197251, 0.3546866) - 0.975)+ exp(1.3197251 - 0.3546866^2))
标签: optimization r probability