概率分布的峰值你好
我有一个最适合 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 的选项。
使用 Distribution 将 Johnson Su 分布拟合到您的数据后,您可以选择保存密度公式来自装约翰逊苏菜单。这会将 Johnson Su 密度公式保存到数据表中的列中。

接下来,您可以通过选择打开 Profiler图表>>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 ) );
请注意,估计值被复制到函数调用中,该函数调用被使用了两次。
这是日志中的结果:

不要被所有的信息惊慌——它工作得很好! 你可以在底部看到结果。