Workshop frailty models
Luc Duchateau, Rosemary Nguti and Paul Janssen
Contents
• The statistical package R• The data set: time to first insemination• Inference for shared gamma frailty models
– Theoretical considerations– Fitting parametric and semiparametric models
• More flexible shared gamma frailty models– Time-varying covariates– Smoothing splines
• Other approaches for frailty models– Choice of the frailty density– A Bayesian approach for frailty models
The statistical package R
• Freeware (unlike Splus)
• Powerful statistical package
• Data handling a bit less powerful
• Downloadable from the Internet– Base– Libraries
• From within R• Download library yourself
Installing R via Internet
• Go to www.r-project.org
• Choose option download
• Choose closest mirrorsite http://cran.za.r-project.org/
• Choose operating systemWindows (95 and later)
• Choose subdirectory base
• Choose rw1090.exe
Installing additional packages
• Automatically within R– Menu item « Packages»
• « Install Packages from CRAN … »• Choose « survival »
– New session, specify « library(survival) »
• Download zipped package from CRAN– Unzip it under directory
« c:\Program Files\R\rw1091\library »
The data set: Time to first insemination
• Database of regional Dairy Herd Improvement Association (DHIA)– Milk recording service– Artificial insemination– Select sample– Subset of 2567 cows from 49 dairy farms
Fixed covariates data setinsemfix.dat
Time-varying covariates data setinsemtvc.dat
Fitting parametric frailty models (1)
• Read the data– insemfix<-read.table("c://insemfix.dat",header=T)
• Create vectors
heifer<- herd stat timeto
insem$heifer110...11
1
1..
49..49
011...11
5332
201...
10338
Fitting parametric frailty models (2)
• Derive quantities n, Di and e– n<-length(levels(as.factor(herd)) 49
– Di<-aggregate(stat,by=list(herd),FUN=sum)[,2]
– e<-sum(Di)
1 2 3 … 49
11 23 … 34
Fitting parametric frailty models (3)
• Observable likelihood for constant hazard
Fitting parametric frailty models (4)
• Calculate observable likelihood for parameters– h=1/p[1], =1/p[2], =p[3]
• Cumulative hazard
• Hazard
Timeto*exp(heifer*p[3])/p[1]cumhaz
aggregate(cumhaz,by=list(herd),FUN=sum)[,2]cumhaz
stat*log(exp(heifer*p[3])/p[1]))lnhaz
aggregate(lnhaz,by=list(herd),FUN=sum)[,2]lnhaz
Fitting parametric frailty models (5)
likelihood.exponential<-function(p){cumhaz<-(timeto*exp(heifer*p[3]))/p[1]cumhaz<-aggregate(cumhaz,by=list(herd),FUN=sum)[,2]lnhaz<-stat*log(exp(heifer*p[3])/p[1])lnhaz<-aggregate(lnhaz,by=list(herd),FUN=sum)[,2]lik<-e*log(1/p[2])-n*log(gamma(p[2]))+sum(log(gamma(Di+p[2])))-sum((Di+p[2])*log(1+cumhaz/p[2]))+sum(lnhaz)-lik}
Fitting parametric frailty models (6)
0.0317 theta-0.1965,beta ,0146.0 h
days 58))exp(/(2log:heiferson inseminati toeMedian tim betah
initial<-c(100,17,0)t<-nlm(likelihood.exponential,initial,print.level=2)h<-1/t$estimate[1]htheta<-1/t$estimate[2]thetabeta<-t$estimate[3]beta
days 5.47/2log:smultiparouon inseminati toeMedian tim h
Interpretation
• From , the heterogeneity parameter, to density for median time to event
calcm<-function(m){(log(2)/(theta*h))^(1/theta) *(1/m)^(1+1/theta)* (1/gamma(1/theta)) *exp(-log(2)/(theta*h*m))}med<-seq(1,100)fmed<-sapply(med,calcm)plot(med,fmed,type="l",xlab="Median time",ylab="Density")
Interpretation
Median time
De
nsi
ty
0 20 40 60 80 100
0.0
0.0
10
.02
0.0
30
.04
Fitting semiparametric models
library(survival)coxph(Surv(timeto,stat)~heifer+frailty(herd))
Call:coxph(formula = Surv(timeto, stat) ~ heifer + frailty(herd)) coef se(coef) se2 Chisq DF p heifer -0.24 0.0432 0.0430 30.9 1.0 2.7e-08frailty(herd) 205.3 40.9 0.0e+00
Iterations: 10 outer, 23 Newton-Raphson Variance of random effect= 0.123 I-likelihood = -16953
Degrees of freedom for terms= 1.0 40.9 Likelihood ratio test=281 on 41.9 df, p=0 n= 2579
HR=exp(-0.24)=0.79
Time-varying covariates data
Contribtion to the denominator:
tij=10 : 2.29tij=55 : 2.61
Fitting Cox models withtime-varying covariates (1)
#Read datainsemtvc<-read.table("c://insemtvc.dat",header=T)#Create four column vectors, four different variablesherd<-insemtvc$herdbegin<-insemtvc$beginend<-insemtvc$endstat<-insemtvc$statureum<-insemtvc$ureumheifer<-insemtvc$heiferlibrary(survival)coxph(Surv(begin,end,stat)~heifer+ureum+frailty(herd))
Fitting Cox models withtime-varying covariates (2)
Call:coxph(formula = Surv(begin, end, stat) ~ heifer + ureum + frailty(herd)) coef se(coef) se2 Chisq DF p heifer -0.22820 0.0466 0.0464 23.99 1.0 9.7e-07ureum -0.00349 0.0366 0.0358 0.01 1.0 9.2e-01frailty(herd) 177.64 39.4 0.0e+00
Iterations: 10 outer, 23 Newton-Raphson Variance of random effect= 0.116 I-likelihood = -14401.2 Degrees of freedom for terms= 1.0 1.0 39.4 Likelihood ratio test=251 on 41.3 df, p=0 n= 23076
HR=exp(-0.00349)=0.997
Fitting Cox models withsmoothing splines (1)
#Read datainsemtvc<-read.table("c://insemtvc.dat",header=T)#Create four column vectors, four different variablesherd<-insemtvc$herdbegin<-insemtvc$beginend<-insemtvc$endstat<-insemtvc$statureum<-insemtvc$ureumheifer<-insemtvc$heiferlibrary(survival)fit<-coxph(Surv(begin,end,stat)~heifer+pspline(ureum,nterm=3,theta=0.5))temp<-order(ureum)plot(ureum[temp],predict(fit,type='terms')[temp,2],type='l',xlab='Ureum',ylab='Risk score')
Fitting Cox models withsmoothing splines (2)
Call:coxph(formula = Surv(begin, end, stat) ~ heifer + pspline(ureum, nterm = 3, theta = 0.5))
coef se(coef) se2 Chisq DF p heifer -0.2284 0.0457 0.0457 24.97 1.00 5.8e-07pspline(ureum, nterm = 3, 0.0094 0.0379 0.0349 0.06 1.00 8.0e-01pspline(ureum, nterm = 3, 3.31 1.18 8.7e-02
Iterations: 1 outer, 3 Newton-Raphson Theta= 0.5 Degrees of freedom for terms= 1.0 2.2 Likelihood ratio test=30.2 on 3.18 df, p=1.56e-06 n= 23076
Fitting Cox models withsmoothing splines (3)
Ureum
Ris
k sc
ore
1 2 3 4 5 6 7
-0.2
5-0
.20
-0.1
5-0
.10
-0.0
50
.0
Fitting the shared normal frailty model (1)
#Read datainsemfix<-read.table("c://docs//onderwijs//frailtymodels//insemfix.dat",header=T)#Create four column vectors, four different variablesherd<-insemfix$herdtimeto<-insemfix$timeto-min(insemfix$timeto)stat<-insemfix$statheifer<-insemfix$heifercoxph(Surv(timeto,stat)~heifer+frailty(herd,distribution="gaussian"))
Fitting the shared normal frailty model (2)
Call:coxph(formula = Surv(timeto, stat) ~ heifer + frailty(herd, distribution = "gaussian"))
coef se(coef) se2 Chisq DF p heifer -0.241 0.0431 0.043 31.1 1.0 2.4e-08frailty(herd, distributio 199.9 38.6 0.0e+00
Iterations: 6 outer, 14 Newton-Raphson Variance of random effect= 0.0916 Degrees of freedom for terms= 1.0 38.6 Likelihood ratio test=276 on 39.5 df, p=0 n= 2579
Top Related