|  | 
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]
st: Survival Forecasting....help needed replicating results outside of Stata
| From | Jon Haveman <[email protected]> | 
| To | [email protected] | 
| Subject | st: Survival Forecasting....help needed replicating results outside of Stata | 
| Date | Tue, 13 May 2008 09:59:17 -0700 | 
Hi All,
I am working with mortgage data and am trying to forecast the  
probability of default in each of the next 72 months for particular  
loans.  I have a question at the bottom about how to take Stata's  
predictions and replicate them outside of Stata.
My data are organized on a monthly basis, with time varying covariates  
(e.g., home price appreciation).
Here is my approach:
1) stset a sample of historical data
stset enddate, time0(startdate) origin(time omonths)
	enter(time omonths) exit(prepay==1 time thismonth)
	id(numericloanid) failure(default==1)
where 	enddate is the current month and startdate is enddate - 1
	omonths is the month in which the loan was originated
	different loans are indicated by numericloanid
	default is a dummy variable for default
	prepay is a dummy variable for prepayment
	thismonth indicates the current month and right censoring for
		any loan that is still alive today
2) streg <covariates>, distribution(llogistic) iter(100)
3) stset a loan that is still alive, for which I want to predict default
stset enddate, time0(startdate) origin(time omonths)
	enter(time origmonths) exit(prepay==1 time thismonth+72)
	id(numericloanid) failure(default==1)
This is the same as before, but moves the right censoring out 72  
months.  All of the underlying covariates have been forecast out 72  
months.
4) predict survival rate: 	predict s, surv
   predict the hazard rate:	predict h, haz
5) generate the conditional probability of default in each month
		f = s * h;
Now, I get very sensible results this way, but I'm a bit confused on  
several matters.  I had thought that I should be able to replicate (S)  
using the following:
gen s = (1+(exp(-xb)*_t)^(1/gamma))^(-1)
But this obviously does not work:
. predict s, surv;
. gen gamma = exp(-.657325);
. predict xb, xb;
. gen s1 = 1/(1+(exp(-xb)*_t)^(1/gamma));
. list enddate _t _t0 s s1;
     +-------------------------------------------+
     | enddate    _t   _t0          s         s1 |
     |-------------------------------------------|
  1. |     554     1     0   .9727553   .9526516 |
  2. |     555     2     1   .9034937   .8407519 |
  3. |     556     3     2   .8404005   .7034764 |
  4. |     557     4     3   .8025259   .5773274 |
  5. |     558     5     4   .7860863   .4721465 |
     |-------------------------------------------|
  6. |     559     6     5   .7856199    .393317 |
  7. |     560     7     6   .7904842   .3272628 |
  8. |     561     8     7   .7988772   .2743748 |
  9. |     562     9     8   .8090085   .2328688 |
 10. |     563    10     9   .8190303   .1975901 |
My question is how do I replicate "s" without using the predict command?
Is this possible?  Is this sensible?
Any assistance that anybody can provide would be very much appreciated.
Thanks in advance,
Jon
*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/