Complex probit estimation made simple

JMP offers a lot of sophisticated statistical analyses that are easy to use because of its well-designed user interfaces. Nonlinear estimation is not as easy to use because the incredible flexibility of that platform may challenge even a statistically savvy person. However, with JMP Scripting Language (JSL), it is easy to create a simple application that is tailored to the specific needs of an application area and is suitable for fast repeatable usage.

Estimating parameters of nonlinear functions starts with creating of columns within the data table that contain formulae to specify the parameters to be estimated as part of the regression function and a loss function that shall be minimized to find the final regression estimate (if that shouldn’t be done by least squares).

Probit regression is a frequently used analysis for dose response experiments with binary outcomes (response / no response). Its application is thoroughly described in JMP Help and Books, but its usage requires at least a basic mathematical understanding; also, it is tedious to use, especially when needed frequently. The solution here is to write a JSL script. All you need to do is to assign the right variables in your data set to the roles needed for the regression using your typical nomenclature and let JMP do the rest.

The data set needs to contain the columns for dose, total number of items under test and number of items that responded, as you can see in Figure 1: Data.

Figure 1: Data

The JSL script is simple as well. It consists of three parts: the user dialog (Figure 2: Dialog), the insertion of the formula columns and the application of the Nonlinear platform.

Figure 2: Dialog

You don’t need to write the evaluation statements from scratch because you can do the analysis interactively and save the script to your script window. Then all statements are there, and you only need to substitute the variable names from the program. An additional advantage of the scripting solution is that you can cover specific requests , like the calculation of various inverse predictions. They are automatically generated, and the user doesn’t need to call them from the context menu separately.

Figure 3: Result

You can distribute and install the whole script as a one-click operation when it is wrapped as an add-in.

You can download this JSL application from the JMP File Exchange.

tags: Add-Ins, JMP Scripting Language, Statistics


  1. Siamak Roshandel
    Posted May 24, 2012 at 4:51 am | Permalink

    I want to know can I use proc probit for calculating LT50? And if it possible in which section I can find it

    • Bernd Heinen Bernd Heinen
      Posted June 1, 2012 at 3:53 am | Permalink

      Hi Siamak,

      your responding to my blog that is about probit analysis in JMP and there is no Proc Probit but rather a nonlinear platform. If you run this, the result report always has the red triangle (hot spot) from which you can select Estimates--> Inverse Prediction. It opens a table in which you can enter several ED values that you want to be calculated.

      If on the other hand you are using SAS Stat and the Proc Probit there, then you need to enter the INVERSECL option with this syntax: INVERSECL<(PROB=rates)> .

      I hope I could help

  2. Sajeewa Amaradasa
    Posted November 12, 2012 at 4:40 pm | Permalink

    Hi Bernd;

    Can you explain how to use JMP to calculate EC50 (effective concentration for 50% growth inhibition) for a fungicide? I want to find EC50 for different isolates of a fungus. I have different % inhibitions from 4 replicates for different fungicide doses per each isolate.Can I use the same application posted above for my analysis.

  3. Karen Clyde
    Posted November 27, 2012 at 5:56 pm | Permalink

    I'd like to use this for >200 separate data groups. Without a "by" option, there doesn't seem to be an easy way to do this (unlike if you launch the analysis using fit model / generalized linear model). Any ideas?

  4. Gail Massari Gail Massari
    Posted January 10, 2014 at 8:44 am | Permalink

    You can submit SAS code from JMP. If you are looking for an equivalent capability in JMP, consider participating in the JMP Software Community Forum for questions and answers to specific questions. JMP users find that is the quickest way to get help from other users. JMP developers and technical support people also participate. See

  5. Tisha King-Heiden
    Posted July 2, 2014 at 6:20 pm | Permalink

    I have successfully used this script to calculate LC50s in JMP11, and want to use the LC50 ratio to compare different LC50s across treatments. To do this, I need the Covariance. I determined that the LDParm is the slope, and am wondering if covariance is also labeled differently. If not, how can I determine the covariance?

    • Bernd Heinen Bernd Heinen
      Posted July 18, 2014 at 9:09 am | Permalink

      Hello Tisha,
      First of all your observation is correct, the value associated with LDParm is the slope of the regression line.

      An additional hint: above the Solution outline there is a key for Confidence limits. You can specify your confidence level and then confidence limits for both parameters are obtained. Each confidence bound requires separate iterations. The results are displayed in additional columns in the parameter table. They may be of help for your comparisons also.

      Unfortunately the covariance matrix is not printed in the report. The only way to get it is to go to the hot spot (the red triangle in front of “Nonlinear Fit” and Save Formulas --> Save Std Error of Predicted. This inserts a new column into your data table with a formula. You can open this formula and the first part therein is the covariance matrix. You can copy and paste it and so use it for your calculations.

      I hope, I could help with my explanation.

      Best regards

  6. Steve
    Posted August 5, 2014 at 1:00 pm | Permalink

    Hi there I need help with the probit estimation JSL, so some reason i cannot figure each time i try to run the I get an error message " cannot set value for the column 'Dose' because the row number (-1) is not valid"

    Does anyone know what I am doing wrong? Please help Need urgent help to do some dose response curves for my thesis

    • Bernd Heinen Bernd
      Posted August 13, 2014 at 4:03 am | Permalink

      Hello Steve,

      the probit calculation itself is a bit tedious, but the results of the respective experiments can be reported in a very simple structure. It may look like this table:
      Dose | No. of Units under Test | No. of events observed
      10,000 | 10 | 10
      1,000 | 10 | 10
      100 | 10 | 9
      10 | 10 | 6
      1 | 10 | 3
      0.1 | 10 | 0

      These columns correspond to the fields (Log) Dose, # Total and # Responses in the scripts dialogue. No matter in which form your data is originally, JMP has all the tools to reshape it in its Tables menue.

      • Joe
        Posted September 3, 2014 at 9:45 am | Permalink

        I am having the same problem as Steve. I have 3 columns; one for dose, one for total organisms, one for total events. When I use the probit add-on, I receive the same error message that he did "Cannot set value for the column 'Dose' because the row number (-1) is not valid."

        • Bernd Heinen Bernd Heinen
          Posted September 5, 2014 at 3:53 am | Permalink

          Hello Joe,
          I was not able to reproduce that error, could you please send me your JMP data table to

  7. David
    Posted October 28, 2014 at 5:31 am | Permalink

    Hi Bernd,
    Is this JSL script still available from the JMP File Exchange? I cannot find it searching for "probit" or "regression"

    • Bernd Heinen Bernd Heinen
      Posted November 10, 2014 at 9:29 am | Permalink

      Hello David,
      I apologize for having been a bit inattentive. Now it's available again and a keyword search for "probit" will bring you there.

      Best regards

  8. Please Help
    Posted January 26, 2015 at 11:55 am | Permalink

    Is it still available for download? I cannot seem to find it. Thanks.

Post a Comment

Your email is never published nor shared. Required fields are marked *


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>