背景
我正在尝试将分配符合95%CI和模式。 我使用的成本函数解决了0的两个函数:P(X = 2.5 |μ,sigma)= 0.025,P(X = 7.5 |μ,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 。
注意:这个问题基于[交叉验证] [1]提出的问题,除了这个版本是关于R的nlm()优化算法的功能,而CV问题是关于查找一个更合适的分布。
答案 0 :(得分:1)
尝试优化功能的替代配方。对数正态分布的95%置信区间的对数由mu-2 * sigma和mu + 2 * sigma给出。所以你基本上可以尝试最小化abs(mu - 2 * sigma - log(2.5))+ abs(mu + 2 * sigma - log(7.5))+ abs(mu - sigma ^ 2 - log(3.3))。< / p>
当我最小化这个时,我发现置信区间非常紧密,而模式稍微偏离。根据应用程序的性质,您可能希望以不同方式对三个术语进行加权
答案 1 :(得分:1)
优化“不起作用”的原因是a
,b
和c
三个参数的比例不匹配。 a
和b
衡量概率的差异,并且通过选择标准差(parms[2]
)的非常小的值,可以始终设置为不大于0.025,从那时起plnorm(2.5, parms[1], parms[2])
c
1}}将为0(7.5相同)。对于x
,相同的误差量(0.025)是不可察觉的 - 这是缩放不匹配。
您可以重写优化函数,以便通过将分位数与2.5和7.5进行比较,在所有三个条件的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)
}
标度上测量错误:
a^2+b^2_c^2
这与Ramnath建议的类似,不同之处在于对数刻度。这种方法在左尾方面并不是很好,因为分布是正确的:第2.5个百分位数的位置的微小变化导致2.5的百分位数的大变化,而7.5的情况则不然。 Ramnath关于在对数尺度上工作的建议解决了这个问题,因为对数正态分布在对数尺度上是对称的。
提高适合度的另一种方法是更改优化标准。现在,您正在最小化平均绝对误差。这意味着只要其他两个错误项非常小,一个大错误就可以了。您可以通过最小化均方误差(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)
}
)来对大错误施加更大的惩罚。这个最新版本(在对数刻度上)从我的角度产生最佳估计。
{{1}}