turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- JMP User Community
- :
- Discussions
- :
- Discussions
- :
- Peak of a probability distribution

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

Highlighted

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

May 18, 2017 6:02 AM
(2908 views)

Hi

I have a dataset which fits best to the Johnson Su distribution and I was wondering if there is a way to estimate the value of the peak of this distribution. It has just one peak, which is pretty different from the median or the mean. Calling this "mode" might be the best possible solution here but how do I estimate this point?

- Tags:
- johnson su
- mode

1 ACCEPTED SOLUTION

Accepted Solutions

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

One of the things that I love about JMP is that it often gives you many ways to solve a problem. All of the previous suggestions for finding the mode of the fitted Johnson SU density for the data are great, but here is one more option that uses the Profiler.

Once you have used Distribution to fit the Johnson Su distribution to your data, you can choose* Save Density Formula* from the *Fitted Johnson Su* menu. This saves the Johnson Su Density formula to a column in your data table.

Next you can open the Profiler by choosing *Graph>>Profiler*. Cast your density formula as the *Y, Prediction Formula* and click OK. Next turn on the *Desirability Functions* from *Prediction Profiler* menu. After that you choose *Maximize Desirability* from the *Prediction Profiler* menu. This will find the mode (maximum) of your Johnson Su density for this data.

13 REPLIES

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

Unfortunately, the Distribution platform does not provide the mode for an analytical function. I searched but could not find the formula for the mode of a Johnson distribution either.

Another approach is to use the JMP numerical optimizer to search for the solution. My approach is to use the **Maximize()** function to find the maximum density of the fitted distribution, which corresponds to the peak, and then use the **Minimize()** function to find the quantile the produces a probability closest to the maximum. Here is the solution in steps to match what you are trying to do.

- I opened the Injection Molding example from the Sample Data Directory.
- I opened the Distribution platform on the Shrinkage data column.
- I fit the Johnson SU distribution to obtain the Johnson SU parameter estimates.
- I wrote a script with two steps outlined above to find the peak location.

Here is the fitted distribution:

.The script is:

```
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 ) );
```

Notice that the estimates are copied into the function call, which is used twice.

Here is the result in the Log:

Don't be alarmed by all of the messages - it worked just fine! You can see the result at the bottom.

Learn it once, use it forever!

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

Thank you for the response. But somehow it doesn't work for me. It says

"Optimization failed: Failed: Maximum Iterations Exceeded"

I'm using JMP 12, maybe the optimizer has a limited functionality.

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

Are you saying that my solution script didn't work with the original example that you posted (as it did for me) or that it didn't work with a new data set? If it is the latter case, can you share the data?

Did you try Ian's script?

Learn it once, use it forever!

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

It didn't work for your script and for my data set. Same with Ian's script, it says

"Optimization failed: Failed: Cannot Decrease Objective Function".

So I just went ahead with bill's solution, but I consider it as only a temporary fix for my problem.

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

I don't see anything wrong with Ian's script or mine so that leaves the data table or the JMP installation. Let's start with the data table. Can you share it? If so, please identify the data column that you used. Actually, we only need the data column that is causing the problem. You can delete the rest if that is better for you.

Thanks!

Learn it once, use it forever!

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

The optimisation doesn't work in the sample data table also. Also, I used Ian's script which is completely independent of my data. So there must be something wrong with the installation then, as you pointed it out. Should I reinstall JMP now?

I'm attaching the data column anyway.

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

I am not having any problem with the data in this column. Here is a new version that avoids having to manually enter the parameter estimates, borrowing from Ian's solution:

```
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 ) );
```

I get this result with your data:

So it is not the data or the script, it must be JMP (installation).

Learn it once, use it forever!

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

Thank you so much! :)

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

You have a solution using the profiler that will work. As for the scripts not working for you, this article highlights some of the changes made to the Maximize and Minimize functions. Thanks to the JMP Tech Support team to pointing it out to me!

https://community.jmp.com/t5/JMPer-Cable/Minimize-and-Maximize-Functions-in-JSL/ba-p/36355

Dan Obermiller