piltdownpunk
2012-Apr-16 04:07 UTC
[R] Gompertz-Makeham hazard models---test for significant difference
Hi, all. I'm working with published paleodemographic data (counts of skeletons that have been assigned into an age-range category, based upon observed morphological characteristics). For example, the following is the age distribution from a prehistoric cemetery in Egypt: naga <- structure(c(15,20,35,50,20,35,50,Inf,46,43,26,14),.Dim=as.integer(c(4,3)),.Dimnames=list(NULL,c("col1","col2","col3")))> nagacol1 col2 col3 [1,] 15 20 46 [2,] 20 35 43 [3,] 35 50 26 [4,] 50 Inf 14 So above, the first two columns are the lower and upper limits of the age-range categories (typically used by paleodemographers), and the third column is the number of skeletons assigned to each group. I've co-opted some R script for fitting a Gompertz-Makeham hazard model to this data... ############################## GM.naga <- function(x,deaths=naga) { a2=x[1] a3=x[2] b3=x[3] shift<-15 nrow<-NROW(deaths) S.t<-function(t) { return(exp(-a2*(t-shift)+a3/b3*(1-exp(b3*(t-shift))))) } d<-S.t(deaths[1:nrow,1])-S.t(deaths[1:nrow,2]) obs<-deaths[,3] lnlk<-as.numeric(crossprod(obs,log(d))) return(lnlk) } optim(c(0.001, 0.01, 0.1),GM.naga,control=list(fnscale=-1)) #################################### And the output: $par [1] 0.05486053 0.31290971 -1.87744033 $value [1] -168.3748 $counts function gradient 174 NA $convergence [1] 0 $message NULL Let's say that I have data from another cemetery, for which I would estimate another set of hazard model parameters. How would I go about comparing the two to see if the resulting parameters for each (and their resulting survival, hazard, and density curves) are significantly different? Also, what if I wanted to include data from even more cemeteries and compare many sets of estimated hazard parameters? Below, I've included a the data/results for the another cemetery that I'd like to compare to the first. Any suggestions are welcome. Thanks so much. --Trey ##################### naqada <- structure(c(15,20,25,50,19,24,49,Inf,26,45,219,30),.Dim=as.integer(c(4,3)),.Dimnames=list(NULL,c("col1","col2","col3"))) GM.naqada <- function(x,deaths=naqada) { a2=x[1] a3=x[2] b3=x[3] shift<-15 nrow<-NROW(deaths) S.t<-function(t) { return(exp(-a2*(t-shift)+a3/b3*(1-exp(b3*(t-shift))))) } d<-S.t(deaths[1:nrow,1])-S.t(deaths[1:nrow,2]) obs<-deaths[,3] lnlk<-as.numeric(crossprod(obs,log(d))) return(lnlk) } optim(c(0.001, 0.01, 0.1),GM.naqada,control=list(fnscale=-1)) And the output: $par [1] 1.544739e-08 1.862670e-02 6.372117e-02 $value [1] -331.1865 $counts function gradient 276 NA $convergence [1] 0 $message NULL ************************ Trey Batey---Anthropology Instructor Division of Social Sciences Mt. Hood Community College Gresham, OR 97030 trey.batey[at]mhcc[dot]edu -- View this message in context: http://r.789695.n4.nabble.com/Gompertz-Makeham-hazard-models-test-for-significant-difference-tp4560550p4560550.html Sent from the R help mailing list archive at Nabble.com.