This example illustrates the use of parameter initial value specification to help overcome convergence difficulties.
The following statements create a SAS data set.
data raw; input censor x c1 @@; datalines; 0 16 0.00 0 17 0.00 0 18 0.00 0 17 0.04 0 18 0.04 0 18 0.04 0 23 0.40 0 22 0.40 0 22 0.40 0 33 4.00 0 34 4.00 0 35 4.00 1 54 40.00 1 54 40.00 1 54 40.00 1 54 400.00 1 54 400.00 1 54 400.00 ; run;
Output 50.3.1 shows the contents of the data set raw.
Obs | censor | x | c1 |
---|---|---|---|
1 | 0 | 16 | 0.00 |
2 | 0 | 17 | 0.00 |
3 | 0 | 18 | 0.00 |
4 | 0 | 17 | 0.04 |
5 | 0 | 18 | 0.04 |
6 | 0 | 18 | 0.04 |
7 | 0 | 23 | 0.40 |
8 | 0 | 22 | 0.40 |
9 | 0 | 22 | 0.40 |
10 | 0 | 33 | 4.00 |
11 | 0 | 34 | 4.00 |
12 | 0 | 35 | 4.00 |
13 | 1 | 54 | 40.00 |
14 | 1 | 54 | 40.00 |
15 | 1 | 54 | 40.00 |
16 | 1 | 54 | 400.00 |
17 | 1 | 54 | 400.00 |
18 | 1 | 54 | 400.00 |
The following SAS statements request that a Weibull regression model be fit to the data:
title 'OLS (default) initial values'; proc lifereg data=raw; model x*censor(1) = c1 / distribution = Weibull itprint; run;
Convergence was not attained in 50 iterations for this model, as the following messages to the log indicate:
WARNING: Convergence was not attained in 50 iterations. You might want to increase the maximum number of iterations (MAXITER= option) or change the convergence criteria (CONVERGE = value) in the MODEL statement. WARNING: The procedure is continuing in spite of the above warning. Results shown are based on the last maximum likelihood iteration. Validity of the model fit is questionable.
The first line (iter=0) of the iteration history table, shown in Output 50.3.2, shows the default initial ordinary least squares (OLS) estimates of the parameters.
OLS (default) initial values |
Iteration History for Parameter Estimates | |||||
---|---|---|---|---|---|
Iter | Ridge | Loglikelihood | Intercept | c1 | Scale |
0 | 0 | -22.891088 | 3.2324769714 | 0.0020664542 | 0.3995754195 |
1 | 0 | -16.427074 | 3.5337141598 | 0.0028713635 | 0.3283544365 |
2 | 0 | -13.216768 | 3.4480787541 | 0.0052801225 | 0.3816964358 |
3 | 0 | -5.0786635 | 3.1966395335 | 0.0191439929 | 0.2325418958 |
4 | 0 | -2.0018885 | 3.1848047525 | 0.0275425402 | 0.1963590539 |
5 | 0 | -0.1814984 | 3.1478989655 | 0.0374731819 | 0.2103607621 |
6 | 0 | 2.90712131 | 3.0858183316 | 0.0659946149 | 0.1818245261 |
7 | 0.063 | 2.9991781 | 3.1014479187 | 0.0661096622 | 0.1648677081 |
8 | 0.063 | 3.01557837 | 3.0995493638 | 0.0662333056 | 0.1670552505 |
9 | 0.063 | 3.0301815 | 3.0992317977 | 0.0663580659 | 0.1669529486 |
10 | 0.063 | 3.0448013 | 3.0989901232 | 0.0664827053 | 0.1667371524 |
11 | 0.063 | 3.05941254 | 3.0987507448 | 0.0666071514 | 0.1665197313 |
12 | 0.063 | 3.07401474 | 3.0985118143 | 0.0667314052 | 0.1663026517 |
13 | 0.063 | 3.08860788 | 3.0982732928 | 0.066855467 | 0.1660859472 |
14 | 0.063 | 3.10319193 | 3.0980351787 | 0.0669793371 | 0.1658696184 |
15 | 0.063 | 3.11776689 | 3.0977974713 | 0.0671030156 | 0.1656536651 |
16 | 0.063 | 3.13233272 | 3.0975601698 | 0.0672265029 | 0.1654380873 |
17 | 0.063 | 3.1468894 | 3.0973232737 | 0.0673497993 | 0.165222885 |
18 | 0.063 | 3.16143692 | 3.0970867821 | 0.0674729049 | 0.1650080579 |
19 | 0.063 | 3.17597526 | 3.0968506943 | 0.06759582 | 0.1647936061 |
20 | 0.063 | 3.19050439 | 3.0966150098 | 0.0677185449 | 0.1645795293 |
21 | 0.063 | 3.2050243 | 3.0963797277 | 0.0678410799 | 0.1643658275 |
22 | 0.063 | 3.21953496 | 3.0961448474 | 0.0679634252 | 0.1641525006 |
23 | 0.063 | 3.23403635 | 3.0959103682 | 0.068085581 | 0.1639395483 |
24 | 0.063 | 3.24852845 | 3.0956762896 | 0.0682075476 | 0.1637269705 |
25 | 0.063 | 3.26301123 | 3.0954426107 | 0.0683293253 | 0.1635147672 |
26 | 0.063 | 3.27748468 | 3.095209331 | 0.0684509143 | 0.163302938 |
27 | 0.063 | 3.29194878 | 3.0949764498 | 0.0685723149 | 0.1630914829 |
28 | 0.063 | 3.3064035 | 3.0947439665 | 0.0686935273 | 0.1628804017 |
29 | 0.063 | 3.32084881 | 3.0945118805 | 0.0688145517 | 0.1626696942 |
30 | 0.063 | 3.3352847 | 3.0942801911 | 0.0689353885 | 0.1624593601 |
31 | 0.063 | 3.34971114 | 3.0940488977 | 0.0690560378 | 0.1622493994 |
32 | 0.063 | 3.36412812 | 3.0938179997 | 0.0691765 | 0.1620398118 |
33 | 0.063 | 3.3785356 | 3.0935874965 | 0.0692967752 | 0.1618305971 |
34 | 0.063 | 3.39293356 | 3.0933573875 | 0.0694168637 | 0.161621755 |
35 | 0.063 | 3.40732199 | 3.093127672 | 0.0695367658 | 0.1614132855 |
36 | 0.063 | 3.42170085 | 3.0928983495 | 0.0696564816 | 0.1612051882 |
37 | 0.063 | 3.43607013 | 3.0926694194 | 0.0697760116 | 0.1609974629 |
38 | 0.063 | 3.45042979 | 3.0924408811 | 0.0698953558 | 0.1607901095 |
39 | 0.063 | 3.46477983 | 3.092212734 | 0.0700145146 | 0.1605831276 |
40 | 0.063 | 3.4791202 | 3.0919849776 | 0.0701334882 | 0.160376517 |
41 | 0.063 | 3.4934509 | 3.0917576112 | 0.0702522768 | 0.1601702775 |
42 | 0.063 | 3.50777188 | 3.0915306343 | 0.0703708808 | 0.1599644088 |
43 | 0.063 | 3.52208314 | 3.0913040464 | 0.0704893002 | 0.1597589108 |
44 | 0.063 | 3.53638465 | 3.0910778468 | 0.0706075354 | 0.159553783 |
45 | 0.063 | 3.55067637 | 3.0908520349 | 0.0707255867 | 0.1593490254 |
46 | 0.063 | 3.5649583 | 3.0906266104 | 0.0708434542 | 0.1591446376 |
47 | 0.063 | 3.57923039 | 3.0904015725 | 0.0709611382 | 0.1589406193 |
48 | 0.063 | 3.59349263 | 3.0901769207 | 0.0710786389 | 0.1587369703 |
49 | 0.063 | 3.607745 | 3.0899526546 | 0.0711959567 | 0.1585336903 |
50 | 0.063 | 3.62198746 | 3.0897287734 | 0.0713130916 | 0.1583307791 |
The log-logistic distribution is more robust to large values of the response than the Weibull distribution, so one approach to improving the convergence performance is to fit a log-logistic distribution, and if this converges, use the resulting parameter estimates as initial values in a subsequent fit of a model with the Weibull distribution.
The following statements fit a log-logistic distribution to the data:
proc lifereg data=raw; model x*censor(1) = c1 / distribution = llogistic; run;
The algorithm converges, and the maximum likelihood estimates for the log-logistic distribution are shown in Output 50.3.3
OLS (default) initial values |
Analysis of Maximum Likelihood Parameter Estimates | |||||||
---|---|---|---|---|---|---|---|
Parameter | DF | Estimate | Standard Error | 95% Confidence Limits | Chi-Square | Pr > ChiSq | |
Intercept | 1 | 2.8983 | 0.0318 | 2.8360 | 2.9606 | 8309.43 | <.0001 |
c1 | 1 | 0.1592 | 0.0133 | 0.1332 | 0.1852 | 143.85 | <.0001 |
Scale | 1 | 0.0498 | 0.0122 | 0.0308 | 0.0804 |
The following statements refit the Weibull model by using the maximum likelihood estimates from the log-logistic fit as initial values:
proc lifereg data=raw outest=outest; model x*censor(1) = c1 / itprint distribution = weibull intercept=2.898 initial=0.16 scale=0.05; output out=out xbeta=xbeta; run;
Examination of the resulting output in Output 50.3.4 shows that the convergence problem has been solved by specifying different initial values.
OLS (default) initial values |
Model Information | |
---|---|
Data Set | WORK.RAW |
Dependent Variable | Log(x) |
Censoring Variable | censor |
Censoring Value(s) | 1 |
Number of Observations | 18 |
Noncensored Values | 12 |
Right Censored Values | 6 |
Left Censored Values | 0 |
Interval Censored Values | 0 |
Number of Parameters | 3 |
Name of Distribution | Weibull |
Log Likelihood | 11.232023272 |
Algorithm converged. |
Analysis of Maximum Likelihood Parameter Estimates | |||||||
---|---|---|---|---|---|---|---|
Parameter | DF | Estimate | Standard Error | 95% Confidence Limits | Chi-Square | Pr > ChiSq | |
Intercept | 1 | 2.9699 | 0.0326 | 2.9059 | 3.0338 | 8278.86 | <.0001 |
c1 | 1 | 0.1435 | 0.0165 | 0.1111 | 0.1758 | 75.43 | <.0001 |
Scale | 1 | 0.0844 | 0.0189 | 0.0544 | 0.1308 | ||
Weibull Shape | 1 | 11.8526 | 2.6514 | 7.6455 | 18.3749 |
As an example of an alternative way of specifying initial values, the following invocation of PROC LIFEREG, using the INEST= data set to provide starting values for the three parameters, is equivalent to the previous invocation:
data in; input intercept c1 scale; datalines; 2.898 0.16 0.05 ; proc lifereg data=raw inest=in outest=outest; model x*censor(1) = c1 / itprint distribution = weibull; output out=out xbeta=xbeta; run;