【问题标题】:How to extract a, b of johnsonsu.rvs() distribution from the first four moments mean, stdev, skewness and kurtosis?如何从前四个矩均值、标准差、偏度和峰度中提取 johnsonsu.rvs() 分布的 a、b?
【发布时间】: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 模拟之前,我做了一个使用前四个矩的高斯模拟。之后我用它来生成非高斯曲面。所有关于表面模拟的论文都使用前四个矩。
  • 非常感谢兄弟!你是神!

标签: python-3.x scipy scipy.stats


【解决方案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

【讨论】:

    最近更新 更多