概率分布的峰值你好
我有一个最适合 Johnson Su 分布的数据集,我想知道是否有一种方法可以估计该分布的峰值值。 它只有一个峰值,与中值或平均值有很大不同。 将此称为“模式”可能是最好的解决方案,但我如何估计这一点?
回复:概率分布的峰值是否可以扩展配置文件选项以进行分组的数据分发? 对于N个组,需要获取组中每个项目的分布对应的众数。 或者我应该每次都按组子集,然后使用探查器选项。 我使用了 col groupby 然后进行了拟合,但看起来它为整个数据集提供了单个值,而不是为每个组成员提供了单个值。
回复:概率分布的峰值您有一个使用可行的探查器的解决方案。 至于不适合您的脚本,本文重点介绍了对最大化和最小化函数所做的一些更改。 感谢 JMP 技术支持团队向我指出这一点!
https://community.jmp.com/t5/JMPer-Cable/Minimize-and-Maximize-Functions-in-JSL/ba-p/36355
回复:概率分布的峰值劳拉的方法更简洁! 而且更不易出错。 如果您能找到方法,最好让 JMP 为您完成工作。
回复:概率分布的峰值我喜欢 JMP 的原因之一是它经常为您提供多种解决问题的方法。之前所有关于查找数据的拟合 Johnson SU 密度众数的建议都很棒,但这里还有一个使用 Profiler 的选项。
使用分布将 Johnson Su 分布拟合到数据后,您可以选择保存密度公式来自适合约翰逊苏菜单。这会将 Johnson Su 密度公式保存到数据表中的列中。

接下来,您可以通过选择打开 Profiler图>>分析器。将你的密度公式转换为Y,预测公式并单击“确定”。接下来打开意愿函数从预测刻画器菜单。之后你选择最大化意愿来自预测刻画器菜单。这将找到该数据的 Johnson Su 密度的众数(最大值)。

回复:概率分布的峰值太感谢了! 
回复:概率分布的峰值我对本专栏中的数据没有任何问题。 这是一个新版本,借鉴了 Ian 的解决方案,避免了手动输入参数估计:
Names Default to Here( 1 );
dist = Current Data Table() << Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :T10_100 ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Fit Distribution( Johnson Su )
)
);
estimates = Report( dist )["Fitted Johnson Su"][NumberColBox(1)] << Get As Matrix;
dist expr = Substitute(
Expr(
Johnson Su Density(
q, // quantile
ggg, // gamma or first shape parameter
ddd, // delta or second shape parameter
ttt, // theta or location parameter
sss // sigma or scale parameter
)
),
Expr( ggg ), estimates[1],
Expr( ddd ), estimates[2],
Expr( ttt ), estimates[3],
Expr( sss ), estimates[4]
);
peak height = Maximize( dist expr, { q( 0.01, 70 ) } );
difference = Minimize( peak height - dist expr, { q( 0.01, 70 ) } );
Print( "The peak location is " || Char( q ) );
我用你的数据得到这个结果:


所以它不是数据或脚本,它一定是JMP(安装)。
回复:概率分布的峰值该优化在示例数据表中也不起作用。 另外,我使用了 Ian 的脚本,它完全独立于我的数据。 所以,正如您所指出的那样,安装肯定有问题。 我现在应该重新安装 JMP 吗?
无论如何我都会附上数据列。
回复:概率分布的峰值我没有发现 Ian 的脚本或我的脚本有任何问题,因此保留了数据表或 JMP 安装。 我们先从数据表开始。 你能分享一下吗? 如果是这样,请标识您使用的数据列。 实际上,我们只需要导致问题的数据列。 如果对您来说更好,您可以删除其余的内容。
谢谢!
回复:概率分布的峰值它不适用于您的脚本和我的数据集。 与伊恩的剧本相同,它说
“优化失败:失败:无法降低目标函数”。
所以我只是继续使用比尔的解决方案,但我认为它只是解决我的问题的临时方法。
回复:概率分布的峰值您是说我的解决方案脚本不适用于您发布的原始示例(就像它对我一样),还是不适用于新的数据集? 如果是后一种情况,可以分享一下数据吗?
你试过伊恩的剧本吗?
回复:概率分布的峰值马克的方法很巧妙。 这是直接使用该函数的替代方案:
NamesDefaultToHere(1);
ClearLog();
// Make some representative data
dt = NewTable("Johnson Su", NewColumn("Data", Numeric, Continuous, Formula(Random Johnson Su( 5, 2, 1, 1 ))));
dt << addRows(50);
// Fit the data
dist = dt << Distribution(Continuous Distribution( Column( :Data ), Fit Distribution( Johnson Su ) ));
// Get the fitted parameters
params = Report(dist)[NumberColBox(3)] << get;
gamma = params[1]; // Shape
delta = params[2]; // Shape
theta = params[3]; // Location
sigma = params[4]; // Scale
// http://www.mathwave.com/articles/johnson_su_distribution.html
// f(x) = delta/(lambda * Sqrt(2*pi()) * Sqrt(z^2 + 1)) * exp( -1/2*(gamma + delta * ln(z + Sqrt(z^2+1)))^2 );
// where:
// z = (x - eta)/lambda;
// and:
// delta > 0 lambda > 0
jsu = Expr(delta/(lambda * Sqrt(2*pi()) * Sqrt(z^2 + 1)) * exp( -1/2*(gamma + delta * ln(z + Sqrt(z^2+1)))^2 ) );
SubstituteInto(jsu, Expr(z), Expr((x - eta)/lambda));
// Use the fitted parameter values
// Note the change in parameter names! 'lambda' -> 'sigma' and 'eta' -> 'theta'
SubstituteInto(jsu,
Expr(gamma), Eval(gamma),
Expr(delta), Eval(delta),
Expr(eta), Eval(theta),
Expr(lambda), Eval(sigma)
);
// Get upper and lower bounds for the optimisation (either side of the (assumed) single peak)
vals = Column(dt, "Data") << getValues;
low = Quantile(0.25, vals);
high = Quantile(0.75, vals);
// Do the maximization
Maximize(jsu, {x(low, high)}, << Tolerance(10^-10), << showDetails(true));
Print(x);
(“通过眼睛”似乎有效,但当然没有测试)。
回复:概率分布的峰值感谢您的答复。 但不知怎的,它对我不起作用。 它说
“优化失败:失败:超出最大迭代次数”
我正在使用 JMP 12,也许优化器的功能有限。
回复:概率分布的峰值只是补充一下。
Mark 的方法确实是获得峰值的最佳方法,但要快速获得估计值,您可以拟合曲线,然后使用“工具”菜单或菜单栏上的 JMP 十字线工具。 单击该工具,然后将十字准线符号放在您认为最能代表峰值的位置,然后会弹出一个值。 如果您使用 JMP 13,您将获得带有十字准线工具的放大镜,可帮助您靠近。
华泰
回复:概率分布的峰值不幸的是,分发平台不提供分析功能的模式。 我进行了搜索,但也找不到约翰逊分布众数的公式。
另一种方法是使用 JMP 数值优化器来搜索解。 我的方法是使用最大化()函数找到拟合分布的最大密度(对应于峰值),然后使用最小化()函数来查找分位数,产生最接近最大值的概率。 以下是与您想要执行的操作相匹配的解决方案步骤。
- 我从示例数据目录中打开了注塑示例。
- 我在“收缩”数据栏上打开了“分布”平台。
- 我拟合 Johnson SU 分布以获得 Johnson SU 参数估计值。
- 我编写了一个包含上述两个步骤的脚本来查找峰值位置。
这是拟合分布:

.脚本是:
peak height = Maximize(
Johnson Su Density(
q, // quantile
-25.83224, // gamma or first shape parameter
1.5352821, // delta or second shape parameter
-3.912839, // theta or location parameter
2.5166e-6 // sigma or scale parameter
),
{ q( 0.01, 70 ) }
);
difference = Minimize(
peak height - Johnson Su Density(
q, // quantile
-25.83224, // gamma or first shape parameter
1.5352821, // delta or second shape parameter
-3.912839, // theta or location parameter
2.5166e-6 // sigma or scale parameter
),
{ q( 0.01, 70 ) }
);
Print( "The peak location is " || Char( q ) );
请注意,估计值被复制到函数调用中,该函数调用使用了两次。
这是日志中的结果:

不要对所有消息感到惊慌 - 它工作得很好! 您可以在底部看到结果。