/* Elinaikamallien SAS-demoja */ /* Kopioidaan data omaan hakemistoon. Alla C:\MyTemp\ea_sas */ /* Annetaan oletushakemiston polku, jossa data sijaitsee. */ libname d 'C:\MyTemp\ea_sas'; /* Luetaan tekstitiedosto enstul.dat SASiin, nimetään muuttujat ja annetaan aineistolle nimeksi lapset. Aineisto tallentuu omaan hakemistoon. */ data d.lapset; infile 'C:\MyTemp\ea_sas\enstul.dat'; input num time delta sukup tup lapsia; run; /* Tehdään uudet dikotomiset muuttujat, jotka kuvaavat sisarusten lukumäärää siten, että lapsia2=1, jos lapsia=2 lapsia3=1, jos lapsia=3 */ data d.lapset2; set d.lapset; lapsia2=0; lapsia3=0; if lapsia=2 then lapsia2=1; if lapsia=3 then lapsia3=1; run; /* Tutkitaan ensin elinaikojen jakaumaa mallissa, jossa ei ole selittäjiä mukana. */ proc lifereg data = d.lapset2; model time*delta(0) = / dist=exponential; run; /* Tutkitaan, miten logaritmisen uskottavuusfunktion arvo muuttuu, kun lisätään selittäjiä malliin. */ proc lifereg data = d.lapset2; model time*delta(0) = lapsia2 lapsia3 / dist=exponential; run; proc lifereg data = d.lapset2; model time*delta(0) = lapsia2 lapsia3 tup/ dist=exponential; run; proc lifereg data = d.lapset2; model time*delta(0) = lapsia2 lapsia3 tup sukup/ dist=exponential; run; /* Valitaan malliin selittäjät lapsia2 ja lapsia3 ja sovitetaan Weibull-jakauma. */ proc lifereg data = d.lapset2; model time*delta(0) = lapsia2 lapsia3 tup sukup/ dist=gamma; run; /* Plotataan kertymäfunktio perusmallille. */ proc lifereg data = d.lapset2; model time*delta(0) = / dist=exponential; output out=kf cdf=prob; run; proc sort data = kf; by prob; run; goptions reset=all; symbol1 i=spline; proc gplot data = kf; plot prob*time; run; /* Coxin regressiomalli, jossa selittäjänä kaikki mjat. */ proc phreg data = d.lapset2; model time*delta(0) = tup sukup lapsia2 lapsia3; run; /* Piirretään Coxin mallin antamat välttöfunktioestimaatit kahdelle tup-muuttujan luokalle. */ data tupak; input tup; datalines; 0 1 ; run; proc phreg data = d.lapset2; model time*delta(0) = tup; baseline covariates=tupak out=d.Surv1 survival=S / nomean; run; symbol1 i=spline c=black; symbol2 i=spline c=red; proc gplot data = d.Surv1; plot S*time=tup; run; /* Piirretään Coxin mallin antamat välttöfunktioestimaatit kolmelle lapsia-muuttujan luokalle. */ data lapsia; input lapsia2 lapsia3; datalines; 0 0 1 0 0 1 ; run; proc phreg data=d.lapset2; model time*delta(0) = lapsia2 lapsia3; baseline covariates=lapsia out=surv1 survival=S / nomean; run; /* Lisätään dataan lapsia-muuttuja piirtämistä varten. */ data surv2; set surv1; if lapsia2=1 and lapsia3=0 then lapsia=2; else if lapsia2=0 and lapsia3=1 then lapsia=3; else lapsia=1; run; goptions reset=all; symbol1 i=spline c=black; symbol2 i=spline c=red; symbol3 i=spline c=blue; proc gplot data=surv2; plot S*time=lapsia; run; /* Plotataan martingaali- ja devianssiresiduaalit, jotka paljastavat mahdolliset poikkevat havainnot. */ proc phreg data=d.lapset2; model time*delta(0)=lapsia2 lapsia3 tup sukup; output out=residuaalit resmart=mart resdev=dev; run; /* Lisätään piirtämistä varten dataan indeksit. */ data apu; set d.lapset2; keep num; run; data residuaalit2; set residuaalit; set apu; run; goptions reset=all; symbol1 value=circle; proc gplot data=residuaalit2; plot (mart dev)*num; run; /* Plotataan perusmalliin liittyvät martingaaliresiduaalit lapsia2 ja lapsia3 -muuttujan arvoja vastaan, vaikka se ei olekaan dikotomisten mjien tapauksessa järkevää. */ proc phreg data=d.lapset2; model time*delta(0)=; output out=residuaalit resmart=mart; run; data apu; set d.lapset2; keep lapsia2 lapsia3; run; data residuaalit2; set residuaalit; set apu; run; proc gplot data=residuaalit2; plot mart*(lapsia2 lapsia3); run;