In PROC QLIM, missing or zero standard errors and missing t and p -values commonly occur when the Hessian matrix is singular or nearly singular. This can happen for many different reasons depending on the data and/or model. One very common situation that can result in the Hessian being singular or nearly singular is poorly scaled variables. In the following example, a poorly scaled variable in the model results in zero standard errors and missing t and p -values. You can avoid the problem by rescaling the variable.
The following statements create the data set to be modeled. In these data, Hours is the number of hours the wife worked outside the household in a given year, Yrs_Ed is the years of education, and Yrs_Exp is the years of work experience. The variable, Hrs_Exp, is created giving work experience measured in minutes.
data test;
input Hours Yrs_Ed Yrs_Exp;
Min_Exp = Yrs_Exp*365*24*60;
datalines;
0 8 9
0 8 12
0 9 10
0 10 15
0 11 4
0 11 6
1000 12 1
1960 12 29
0 13 3
2100 13 36
3686 14 11
1920 14 38
0 15 14
1728 16 3
1568 16 19
1316 17 7
0 17 15
;
Notice that when measured on the minute scale, the values of work experience are quite large.
proc print data=test noobs;
var Hours Yrs_Ed Min_Exp;
run;
| Hours | Yrs_Ed | Min_Exp |
| 0 | 8 | 4730400 |
| 0 | 8 | 6307200 |
| 0 | 9 | 5256000 |
| 0 | 10 | 7884000 |
| 0 | 11 | 2102400 |
| 0 | 11 | 3153600 |
| 1000 | 12 | 525600 |
| 1960 | 12 | 15242400 |
| 0 | 13 | 1576800 |
| 2100 | 13 | 18921600 |
| 3686 | 14 | 5781600 |
| 1920 | 14 | 19972800 |
| 0 | 15 | 7358400 |
| 1728 | 16 | 1576800 |
| 1568 | 16 | 9986400 |
| 1316 | 17 | 3679200 |
| 0 | 17 | 7884000 |
Fitting a tobit model to the above data results in zero standard error for the Min_Exp parameter. The corresponding t value and p -value are missing.
proc qlim data=test;
model Hours = Yrs_Ed Min_Exp;
endogenous Hours ~ censored(lb=0);
run;
| Parameter Estimates | |||||
| Parameter | DF | Estimate | Standard Error | t Value | Approx |
| Pr > |t| | |||||
| Intercept | 1 | -5598.64 | 28.27529 | -198 | <.0001 |
| Yrs_Ed | 1 | 373.1477 | 54.38262 | 6.86 | <.0001 |
| Min_Exp | 1 | 0.000121 | 0 | . | . |
| _Sigma | 1 | 1582.87 | 391.186 | 4.05 | <.0001 |
The problem is caused by the extremely large values of the work experience predictor when measured in minutes. You can avoid the problem by rescaling this predictor to have smaller values. By using work experience measured in years (Yrs_Exp) rather than in minutes (Min_Exp), the information is retained but the values are much smaller.
proc print data=test noobs;
var Hours Yrs_Ed Yrs_Exp;
run;
| Hours | Yrs_Ed | Yrs_Exp |
| 0 | 8 | 9 |
| 0 | 8 | 12 |
| 0 | 9 | 10 |
| 0 | 10 | 15 |
| 0 | 11 | 4 |
| 0 | 11 | 6 |
| 1000 | 12 | 1 |
| 1960 | 12 | 29 |
| 0 | 13 | 3 |
| 2100 | 13 | 36 |
| 3686 | 14 | 11 |
| 1920 | 14 | 38 |
| 0 | 15 | 14 |
| 1728 | 16 | 3 |
| 1568 | 16 | 19 |
| 1316 | 17 | 7 |
| 0 | 17 | 15 |
Refitting the model using the rescaled predictor produces a reasonable standard error estimate as well as t and p -values.
proc qlim data=test;
model Hours = Yrs_Ed Yrs_Exp;
endogenous Hours ~ censored(lb=0);
run;
| Parameter Estimates | |||||
| Parameter | DF | Estimate | Standard Error | t Value | Approx |
| Pr > |t| | |||||
| Intercept | 1 | -5598.3 | 27.69222 | -202.16 | <.0001 |
| Yrs_Ed | 1 | 373.1233 | 53.98888 | 6.91 | <.0001 |
| Yrs_Exp | 1 | 63.33625 | 36.5513 | 1.73 | 0.0831 |
| _Sigma | 1 | 1582.86 | 390.0765 | 4.06 | <.0001 |