Rev 104 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
# Tests of expected survival## Simple case 1: a single male subject, born 6/6/36 and entered on study 6/6/55.## Compute the 1, 5, 10 and 12 year expected survivaltemp1 <- mdy.date(6,6,36)temp2 <- mdy.date(6,6,55)exp1 <- survexp(~ratetable(year=temp2, age=(temp2-temp1), sex=1),ratetable=survexp.uswhite,times=c(366, 1827, 3653, 4383))# Well, almost easy. The uswhite table assumes that someone age 19 will have# seen 5 leap years-- but this lad has only seen 4. Thus the routine sees# him as 1 day shy of his birthday.# (The age 19 category starts at 6940, but he is 6939 days old at entry).# Thus his passage through the table is a bit more complicated# First epoch: 1 day at age 18, 1954 6/6/55# 365 days at age 19, 1955 6/7/55 - 6/5/56# Second 365 days at age 20, 1956 6/6/56 - 6/5/57# 365 days at age 21, 1957 6/6/57 - 6/5/58# 366 days at age 22, 1958 6/6/58 - 6/6/59# 365 days at age 23, 1959 6/7/59 - 6/5/60# Third 365 days at age 24, 1960 6/6/60 - 6/5/61# 365 days at age 25, 1961 6/6/61 - 6/5/62# 366 days at age 26, 1962 6/6/62 - 6/6/63# 365 days at age 27, 1963 6/7/63 - 6/5/64# 365 days at age 28, 1964 6/6/64 - 6/5/64# Fourth 365 days at age 29, 1965 6/6/65 - 6/5/66# 365 days at age 30, 1966 6/6/66 - 6/5/67# remember, a first subscript of "1" is for age 0xx <- survexp.uswhite[,1,]check <- c( (.6*xx[19,1] + .4*xx[19,2]) +365* (.5*xx[20,1] + .5*xx[20,2]) ,365* (.4*xx[21,1] + .6*xx[21,2]) +365* (.3*xx[22,1] + .7*xx[22,2]) +366* (.2*xx[23,1] + .8*xx[23,2]) +365* (.1*xx[24,1] + .9*xx[24,2]) ,365* ( xx[25,2] ) +365* (.9*xx[26,2] + .1*xx[26,3]) +366* (.8*xx[27,2] + .2*xx[27,3]) +365* (.7*xx[28,2] + .3*xx[28,3]) +365* (.6*xx[29,2] + .4*xx[29,3]) ,365* (.5*xx[30,2] + .5*xx[30,3]) +365* (.4*xx[31,2] + .6*xx[31,3]) )print(exp1$surv)print(exp(-cumsum(check)))# This does not pass the "all.equal" test. Because of leap year (again),# the internal S code does not do exactly what is stated above. US# rate tables are special: the entry for age 20 in 1950 is the probability# that someone who becomes 20 years old in 1950 will reach his 21st birthday.# In order to fit this into the general "cutpoints" calculations of# person-years, dates are adjusted so that everyone appears to have a# birthday on Jan 1. But because of leap years, a birthday then moves to# Dec 31 sometimes -- this happens in each of the 366 day intervals above,# e.g., 1 day at age 22 with 1957 rates, 365 at age 22 with 1958 rates.# Upshot: they only agree to 6 decimals. Close enough for me!rm(temp1, temp2, exp1, check, xx)