如何从前四个矩均值、标准差、偏度和峰度中提取 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])
。我知道有一种方法可以从a
和b
中导出时刻,但是有没有相反的方法呢? (这样做可能只是微不足道的数学,但我无法理解)。
我正在将 MATLAB 代码翻译成 python,其中像 johnsonsu 这样的分布是从前四个矩派生的,所以没有其他方法可以做到这一点。
【问题讨论】:
你试过tensorflow
吗? tensorflow.org/probability/api_docs/python/tfp/substrates/jax/… .另外,您可以发布MATLAB pdf的绘图和数据吗?
还有一个问题,在scipy
中johnsonsu
参数loc
和scale
不是均值和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?的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用moments包计算偏度(Skewness)和峰度(Kurtosis)实战:计算偏度(Skewness)和峰度(Kurtosis)确定样本数据是否具有与正态分布匹配的偏度和峰度(假设检验)