**************************************************************** *! Version 9.0.1, 5 October 2006 *! Author: James Cui, Monash University *! Simulate disease status and censored age for family data *! Original publication: May 2001 STB 61: 8-10 (dm92) **************************************************************** capture program drop phenotype program phenotype version 9.0 gettoken hr 0 : 0, parse(" ,") if (`hr' < 0 ) { di in red "negative numbers invalid" exit 498 } syntax [, Type(string) Alpha(real 4.21) Lambda(real 9.95e-10) /* */ Maxage(real 100) Gamma(real 15) Sex(string) Saving(string)] if "`type'" ~= "" { parse "`type'", parse (" ") gen str1 inher = substr("`1'", 1, 1) } else { gen str1 inher = "d" } if inher ~= "d" & inher ~= "r" { di in red "inheritance type invalid" } if "`sex'" ~= "" { parse "`sex'", parse (" ") gen str1 gender = substr("`1'",1,1) } else { gen str1 gender = "b" } if gender ~= "b" & gender ~= "f" & gender ~= "m" { di in red "sex affect invalid" } if "`saving'" ~= "" { parse "`saving'", parse (" ") local output = "`1'" } else { local output = "temp1.dta" } qui sort famid id qui gen x = uniform() qui gen y = uniform() qui gen z = uniform() qui gen age_dth = int(`maxage'^(y^(1 / `gamma'))) *--------------------------------------------------------------- * 1. ACCORDING TO WEIBULL DISTRIBUTION *--------------------------------------------------------------- #delimit; qui gen age_dis = int((-log(1-x) / `lambda')^(1 / `alpha')) if genotype == "AA" | inher == "r" & genotype == "Aa"; qui replace age_dis = int((-log(1-x) / `lambda' / `hr')^(1 / `alpha')) if inher == "d" & genotype ~= "AA" | inher == "r" & genotype == "aa"; #delimit cr qui replace age_dis = . if gender == "m" & female == 1 | gender == "f" & female == 0 qui gen age_cen = min(age, age_dth, age_dis) qui gen byte disease = cond(age_cen >= age_dis, 1, 0) qui replace disease = 0 if gender == "m" & female == 1 | gender == "f" & female == 0 qui drop x y z inher gender qui save `output', replace di _n in ye `"A new file named "`output'" has been created, which contains disease status and censored age"' end