如何从前四个矩均值、标准差、偏度和峰度中提取 johnsonsu.rvs() 分布的 a、b?

Posted

技术标签:

【中文标题】如何从前四个矩均值、标准差、偏度和峰度中提取 johnsonsu.rvs() 分布的 a、b?【英文标题】:How to extract a, b of johnsonsu.rvs() distribution from the first four moments mean, stdev, skewness and kurtosis? 【发布时间】:2021-07-21 23:38:53 【问题描述】:

所以让我们看看我有一个代码:

mu=0 # first moment
rms=3 # second moment
skew=1 # third moment - skewness
kurt=3 # fourth moment - kurtosis

问题是我想使用这些参数作为输入并从中提取一些a, b 来提供我的johnsonsu.rvs(a=?, b=?, loc=mu, scale=rms, size=[N,N])。我知道有一种方法可以从ab 中导出时刻,但是有没有相反的方法呢? (这样做可能只是微不足道的数学,但我无法理解)。

我正在将 MATLAB 代码翻译成 python,其中像 johnsonsu 这样的分布是从前四个矩派生的,所以没有其他方法可以做到这一点。

【问题讨论】:

你试过tensorflow吗? tensorflow.org/probability/api_docs/python/tfp/substrates/jax/… .另外,您可以发布MATLAB pdf的绘图和数据吗? 还有一个问题,在scipyjohnsonsu 参数locscale 不是均值和StdDev,而是xi 和lambda。所以它基本上是在 gamma (a)、delta (b)、xi (loc) 和 lambda (scale) 上参数化的。 MATLAB中有一个工具箱可以从mu, sd, skew, kurt中获取gamma, delta, xi, lambda it.mathworks.com/matlabcentral/fileexchange/… 这是一个与纳米表面模拟相关的代码。可能如果我上传它,我会让事情变得更复杂。但我想以这种方式这样做的主要原因是因为在 JohnshonSU 模拟之前,我做了一个使用前四个矩的高斯模拟。之后我用它来生成非高斯曲面。所有关于表面模拟的论文都使用前四个矩。 非常感谢兄弟!你是神! 【参考方案1】:

我已经移植了 MATLAB 代码来从矩估计约翰逊分布参数

https://www.mathworks.com/matlabcentral/fileexchange/46123-johnson-curve-toolbox

到 Python

https://github.com/maxdevblock/j_johnson_M

用法

from j_johnson_M import f_johnson_M

coef, j_type, err = f_johnson_M(mu, sd, skew, kurt)

gamma, delta, xi, lam = coef

【讨论】:

以上是关于如何从前四个矩均值、标准差、偏度和峰度中提取 johnsonsu.rvs() 分布的 a、b?的主要内容,如果未能解决你的问题,请参考以下文章

应用统计学分布的偏度和峰度

应用统计学分布的偏度和峰度

在 stargazer 中计算偏度和峰度

数据的偏度和峰度

绘制清晰的图表以显示偏度和峰度

R语言使用moments包计算偏度(Skewness)和峰度(Kurtosis)实战:计算偏度(Skewness)和峰度(Kurtosis)确定样本数据是否具有与正态分布匹配的偏度和峰度(假设检验)