\documentclass[10pt]{article} \bibliographystyle{cj} \usepackage{longtable} % allows tables to break \usepackage[pdftex]{lscape} % allows tables to be landscaped %\usepackage[pdftex]{graphicx} \usepackage{pdfpages} \usepackage[letterpaper,margin=1in]{geometry} \usepackage{setspace,relsize} % needed for latex(describe()), \code \usepackage{moreverb} % for verbatimtabinput % \usepackage{tabularx} %\usepackage{colortbl} %\usepackage{placeins} %\usepackage[dotinlabels]{titletoc} %\usepackage{amsmath} %\usepackage{amsfonts} \usepackage{amssymb} \usepackage{fancyhdr} \usepackage{graphicx, subfigure} %\usepackage{vmargin} \usepackage{lscape} \usepackage{rotating} \usepackage{endnotes} \usepackage{color} \def\linkcol{blue} % \usepackage{tabularx} % required in the preamble %\setpapersize{USletter} % \usepackage{tabularx} % required in the preamble %\setpapersize{USletter} \begin{document} %Define the sub directory for placement of graphics \SweaveOpts{prefix.string=pspdf/nonparm} %Define all graphics to be 100\% of their width \setkeys{Gin}{width=1.0\textwidth} %default is 0.8 %\def\printid{1} \section{Introduction} Access to highly active antiretroviral therapy (HAART) is expanding in Latin America. Many patients require 2$^{nd}$ and 3$^{rd}$ line therapy due to toxicity/tolerability and/or failure. Information regarding the potential number of patients in need of 3$^{rd}$ line HAART, essential for program planning, is lacking in the region. The Caribbean, Central and South America network (CCASAnet) is a consortium of HIV care centers sharing a repository of data. \vspace{0.1in} This paper summarizes the analysis aimed at accomplishing the following objectives: \begin{itemize} \item describe the population of subjects who started a third line regimen, excluding those who were enrolled in a clinical trial. \item describe the types of third line regimens used \item describe the population of subjects who started a 2$^{nd}$ line regimen and those who failed one \item calculate the cumulative incidence of having virologic failure on a 2$^{nd}$ line regimen or starting a 3$^{rd}$ line regimen with death treated as a competing risk \item calculate the hazard ratios for time to failure on a 2$^{nd}$ line regimen or start of a 3$^{rd}$ line regimen using Cox models. \end{itemize} \vspace{0.1in} \section{Methods} Antiretroviral-naive patients $\geq$ 18 years of age who started their first HAART after 2000 from CCASAnet sites in Argentina, Brazil, Honduras, Mexico, and Peru were included in the analysis. Clinical trial participants were excluded. Third line HAART was defined as the use of at least one of the following drugs: darunavir, tirpanavir, etravirine, enfuvirtide, maraviroc, or raltegravir. Need of 3$^{rd}$ line HAART was defined as virologic failure while on 2$^{nd}$ line HAART. Second line HAART was defined as any of the following transitions: \begin{itemize} \item boosted PI to boosted PI (requiring backbone PI to be switched) or a regimen classifed as OTHER that includes an NNRTI and boosted PI \item NNRTI to boosted PI or OTHER regimen that includes an NNRTI and boosted PI \end{itemize} A subject failed a 2$^{nd}$ line regimen if any of the following criteria were met: \begin{itemize} \item the first viral load measurement after the first 180 days of the second line regimen is detectable after having no measurements in the first 180 days or all measurements in the first 180 days are detectable; \item one undetectable viral load measurement is followed by two subsequent detectable measurements; \item one viral load measurement > 1000 after second line initiation. \end{itemize} An additional analysis in which virologic failures after gaps of a year or more in viral load measurements were censored at the start of the year gap was also done. A secondary analysis in which the criterion for a viral load > 1000 was excluded was done. In addition, an analysis was done restricted to those whose first HAART was an NNRTI and with both definitions of virologic failure used with second line regimen definition restricted to the NNRTI to boosted PI or OTHER regimen that included an NNRTI and boosted PI was done. \vspace{0.1in} Two additional analyses were added to the original analysis plan: \begin{itemize} \item Cumulative incidences with the primary virologic failure definition, which includes the 1000 criteria, were calculated adding in subjects who were a part of a clinical trial but still excluding those whose first HAART was a third line regimen. \item The primary analysis (cumulative incidences as well as Cox models) with the primary virologic failure definition was repeated treating the start of second line regimen as baseline. This analysis therefore only includes those who started a second line regimen. \end{itemize} \vspace{0.1in} Descriptive statistics are presented as median (Interquartile Range [IQR]) or percentage (N), as appropriate. Cumulative incidence of needing or starting 3$^{rd}$ line HAART after initiation was estimated considering death as a competing event. Hazard ratios (HR) were computed using multivariable Cox models including sex, age, probable route of infection, and AIDS, calendar year, CD4 viral load (log-transformed) at first HAART start, and type of first HAART (non-NNRTI vs NNRTI) stratified by site. Age and calendar year, as well as CD4 and viral load at HAART initiation were fit with restricted cubic splines (all with 3 knots) in order to avoid assuming a linear relationship with the outcome. Probable route of infection was collapsed into two categories -- heterosexual transmission and non-heterosexual transmission. Different fields recorded AIDS at first HAART using different metrics. A subject was deemed as having AIDS at initiation of first HAART if their CDC stage was one of ``C", ``C1",``C2",``C3", their WHO stage was 4, or an indicator variable designated them as having AIDS at first HAART with all measurements made no more than 30 days after HAART initiation or date of enrollment. Baseline CD4 was the CD4 measurement made closest to the date of HAART initiation and within 180 days prior to until 7 days after HAART start. In cases where measurements both before and after HAART initiation fell within the window, those before HAART were given priority. Baseline viral load was the viral load closest to the date of HAART initiation and within 180 days prior to HAART start. Missing data were multiply imputed using 5 imputation replications. All analyses were performed using the software programming language, R, Version 2.15.2. A more complete reference for R and the packages used in this analysis can be found in the appendix. <>= #-----------------------------# # Some default settings # #-----------------------------# rm(list=ls()) options(width=180) #-----------------------------# # Loading libraries # #-----------------------------# library(Hmisc) library(cmprsk) library(rms) library(mi) #-----------------------------# # Functions # #-----------------------------# source('virologic_failure_function.R') source('time_to_evt_function.R') source('time_to_evt_nnrti_function.R') source('find_max_date.R') source('aids_at_fhaart_function.R') source('second_line_regimen_function.R') source('t2evt_data_mgmt_function.R') source('time_to_evt_function_new_start.R') summary.fun <- function(switch,mod,cd4.comp,age.comp,year.comp){ if(switch=='all'){ summ. <- summary(mod, male.factor='Female', baseline_cd4=cd4.comp,aids_at_fhaart.factor='Not AIDS', initial_haart_nnrti.factor='NNRTI', age_fhaart=age.comp, transmission_risk_larger_cat.factor = 'Heterosexual', year_fhaart=year.comp) } else { summ. <- summary(mod, male.factor='Female', baseline_cd4=cd4.comp,aids_at_fhaart.factor='Not AIDS', age_fhaart=age.comp, transmission_risk_larger_cat.factor = 'Heterosexual', year_fhaart=year.comp) } return(summ.) } summary.fun.wvl <- function(switch,mod,cd4.comp,age.comp,vl.comp,year.comp){ if(switch == 'all'){ summ. <- summary(mod, male.factor='Female', baseline_cd4=cd4.comp,aids_at_fhaart.factor='Not AIDS', initial_haart_nnrti.factor='NNRTI', age_fhaart=age.comp, transmission_risk_larger_cat.factor = 'Heterosexual', baseline_log_rna=vl.comp, year_fhaart=year.comp) } else { summ. <- summary(mod, male.factor='Female', baseline_cd4=cd4.comp,aids_at_fhaart.factor='Not AIDS', age_fhaart=age.comp, transmission_risk_larger_cat.factor = 'Heterosexual', baseline_log_rna=vl.comp, year_fhaart=year.comp) } } summary.fun.2nd <- function(switch,mod,cd4.comp,age.comp,year.comp){ summ. <- summary(mod, male.factor='Female', second_haart_cd4=cd4.comp,aids_at_fhaart.factor='Not AIDS', age_at_second_haart=age.comp, transmission_risk_larger_cat.factor = 'Heterosexual', year_second_haart=year.comp) return(summ.) } summary.fun.wvl.2nd <- function(switch,mod,cd4.comp,age.comp,vl.comp,year.comp){ summ. <- summary(mod, male.factor='Female', second_haart_cd4=cd4.comp,aids_at_fhaart.factor='Not AIDS', age_at_second_haart=age.comp, transmission_risk_larger_cat.factor = 'Heterosexual', second_haart_log10_rna=vl.comp, year_second_haart=year.comp) } #-----------------------------# # Loading data # #-----------------------------# art <- read.csv('Data/art.csv',header=TRUE,sep=',',stringsAsFactors=FALSE,na.strings=c(NA,'')) art <- subset(art, !is.na(patient)) basic <- read.csv('Data/basic.csv',header=TRUE,sep=',',stringsAsFactors=FALSE,na.strings=c(NA,'','.')) basic$enrol_d <- basic$baseline_d basic <- upData(basic, drop='baseline_d') follow <- read.csv('Data/follow.csv',header=TRUE,sep=',',stringsAsFactors=FALSE,na.strings=c(NA,'')) cd4 <- read.csv('Data/lab_cd4.csv',header=TRUE,sep=',',stringsAsFactors=FALSE,na.strings=c(NA,'')) rna <- read.csv('Data/lab_rna.csv',header=TRUE,sep=',',stringsAsFactors=FALSE,na.strings=c(NA,'')) visit <- read.csv('Data/visit.csv',header=TRUE,sep=',',stringsAsFactors=FALSE,na.strings=c(NA,'')) ltfu <- read.csv('Data/third-line-ltfu.csv',header=TRUE,sep=',',stringsAsFactors=FALSE,na.strings=c(NA,'')) #------------------------------# # HAART regimen codes # #------------------------------# regimen_codes <- data.frame('Drug_type'=c(rep('Entry inhibitors',2), rep('NNRTI',4), rep('NRTI',7), rep('Integrase inhibitors',2), rep('PI',9)), 'Drug_name'=c('Enfuvirtide','Maraviroc','Delavirdine', 'Efavirenz','Etravirine','Nevirapine', 'Abacavir','Didanosine','Emtricitabine', 'Lamivudine','Stavudine','Tenofovir', 'Zidovudine','Raltegravir','Elvitegravir','Atazanavir', 'Darunavir','Fosamprenavir','Indinavir', 'Lopinavir/Ritonavir','Nelfinavir', 'Ritonavir','Saquinavir','Tipranavir'), 'Drug_code'=c('ENV','MVC','DLV','EFV','ETR','NVP', 'ABC','ddl','FTC','3TC','d4T','TDF','ZDV/AZT', 'RAL','EVG','ATV','DRV','FPV', 'IDV','LPV/r','NFV','RTV','SQV','TPV')) @ <>= #-------------------------------------------# # Creating unique patient identifiers # #-------------------------------------------# art$unique_id <- paste(art$site, art$patient, sep='.') basic$unique_id <- paste(basic$site, basic$patient, sep='.') follow$unique_id <- paste(follow$site, follow$patient, sep='.') cd4$unique_id <- paste(cd4$site, cd4$patient, sep='.') rna$unique_id <- paste(rna$site, rna$patient, sep='.') visit$unique_id <- paste(visit$site, visit$patient, sep='.') #----------------------------------------# # Setting 1900-01-01 dates to missing # #----------------------------------------# basic$birth_d <- ifelse(basic$birth_d == '1900-01-01',NA,basic$birth_d) basic$enrol_d <- ifelse(basic$enrol_d == '1900-01-01',NA,basic$enrol_d) follow$death_d <- ifelse(follow$death_d == '1900-01-01',NA,follow$death_d) visit$visit_d <- as.Date(visit$visit_d, format='%Y-%m-%d') visit$visit_d <- ifelse(visit$visit_d == '1900-01-01',NA,visit$visit_d) visit$visit_d <- as.Date(visit$visit_d, origin='1970-01-01') # Putting regimen_class valuethat is 'other' back in caps as in previous versions of the data art$regimen_class <- ifelse(art$regimen_class == 'other' & !is.na(art$regimen_class),'OTHER', ifelse(is.na(art$regimen_class),'OTHER',art$regimen_class)) # One art_ed value was incorrect art$art_ed <- ifelse(art$unique_id == 'brazil.14310' & art$art_ed == '2012-06-29','2002-06-29',art$art_ed) #--------------------------------------------------# # Excluding subjects from Haiti # # and Chile # #--------------------------------------------------# art <- subset(art, site %nin% c('haiti','chile')) basic <- subset(basic, site %nin% c('haiti','chile')) follow <- subset(follow, site %nin% c('haiti','chile')) cd4 <- subset(cd4, site %nin% c('haiti','chile')) rna <- subset(rna, site %nin% c('haiti','chile')) visit <- subset(visit, site %nin% c('haiti','chile')) #---------------------------------------------------# # Removing subjects enrolled in a clinical trial # #---------------------------------------------------# ids.bf.clinical_trial <- length(unique(art$unique_id)) clinical_trial_ids <- unique(art$unique_id[which(art$art_id %in% c('3TC,ABC,EFV,FTC,MRV/PBO,TDF', '3TC,AZT,EFV/PBO,MRV/PBO', 'DRV,ELV/PBO,RAL/PBO,RTV,TDF', 'EFV/PBO,FTC,RAL/PBO,TDF','EVG/PBO', 'ELV/PBO,FTC,LPV,RAL/PBO,RTV,TDF', 'EFV/PBO,FTC,RPV/PBO,TDF', 'FTC,MRV/PBO,RAL/PBO,TDF', 'LPV,RAL/PBO,RTV,TDF', 'DRV,ELV/PBO,ETR,RAL/PBO,RTV', 'EFV,FTC,MRV/PBO,TDF'))]) length.clinical.trial.ids <- length(clinical_trial_ids) @ <>= # Saving information on those enrolled in a clinical trial determined either by clinicaltrial_y variable or as above based on regimen clinical_trial_ids <- unique(c(clinical_trial_ids,basic$unique_id[which(basic$clinicaltrial_y == 1)])) rct_basic.df <- subset(basic, unique_id %in% clinical_trial_ids) rct_art.df <- subset(art, unique_id %in% clinical_trial_ids) rct_follow.df <- subset(follow, unique_id %in% clinical_trial_ids) rct_visit.df <- subset(visit, unique_id %in% clinical_trial_ids) rct_cd4.df <- subset(cd4, unique_id %in% clinical_trial_ids) rct_rna.df <- subset(rna, unique_id %in% clinical_trial_ids) # Removing all who had clinicaltrial_y = 1 basic <- subset(basic, clinicaltrial_y == 0) ids.in.analysis <- length(unique(basic$unique_id)) art <- subset(art, unique_id %in% basic$unique_id) follow <- subset(follow, unique_id %in% basic$unique_id) visit <- subset(visit, unique_id %in% basic$unique_id) cd4 <- subset(cd4, unique_id %in% basic$unique_id) rna <- subset(rna, unique_id %in% basic$unique_id) @ <>= # Calculating date of first haart (date_fhaart) art$art_sd <- as.Date(art$art_sd) art <- art[order(art$unique_id, art$art_sd),] art$art_ed <- as.Date(art$art_ed) art <- art[order(art$unique_id, art$art_sd),] date_first_regimen <- art[!duplicated(art$unique_id),c('unique_id','art_sd')] art$date_first_regimen <- date_first_regimen[match(art$unique_id, date_first_regimen$unique_id,nomatch=NA),'art_sd'] art$enrol_d <- basic[match(art$unique_id, basic$unique_id,nomatch=NA),'enrol_d'] art$enrol_d <- as.Date(art$enrol_d, format='%Y-%m-%d') # Not all regimens in 'art' are HAART regimens. Need to make sure grab the first HAART regimen. For those who # had ART before HAART, need to exclude them art <- art[order(art$unique_id,art$art_sd),] not_ART_naive <- art[!duplicated(art$unique_id),c('unique_id','regimen_class')] not_ART_naive$prior_ART <- ifelse(not_ART_naive$regimen_class == 'nonHAART',1,0) art$prior_art <- not_ART_naive[match(art$unique_id, not_ART_naive$unique_id,nomatch=NA),'prior_ART'] art$recart_y <- basic[match(art$unique_id,basic$unique_id,nomatch=NA),'recart_y'] art$birth_d <- basic[match(art$unique_id,basic$unique_id,nomatch=NA),'birth_d'] art$birth_d <- as.Date(art$birth_d,format=c('%Y-%m-%d')) #-----------------------------# # Subsetting based on # # incluson criteria # #-----------------------------# art <- subset(art, prior_art == 0 & date_first_regimen >= '2000-01-01' & recart_y == 0) date_fhaart <- art[!duplicated(art$unique_id),c('unique_id','art_sd')] # Setting date_fhaart art$date_fhaart <- date_fhaart[match(art$unique_id,date_fhaart$unique_id,nomatch=NA),'art_sd'] art$age_fhaart <- as.numeric(difftime(art$date_fhaart,art$birth_d,units='days'))/365.25 # Subsetting out pediatric patients; Also removing those with missing regimen classes (e.g., argentina.1121) art <- subset(art, age_fhaart >= 18 & !is.na(age_fhaart) & !is.na(regimen_class)) # Subsetting all other data sets to only include subjects in the art data set. basic <- subset(basic, unique_id %in% art$unique_id) follow <- subset(follow, unique_id %in% art$unique_id) cd4 <- subset(cd4, unique_id %in% art$unique_id) rna <- subset(rna, unique_id %in% art$unique_id) visit <- subset(visit, unique_id %in% art$unique_id) @ <>= # Need to define first HAART for those in clinical trials and then mark those whose first HAART was a 3rd line regimen rct_art.df$art_sd <- as.Date(rct_art.df$art_sd) rct_art.df <- rct_art.df[order(rct_art.df$unique_id, rct_art.df$art_sd),] rct_art.df$art_ed <- as.Date(rct_art.df$art_ed) rct_art.df <- rct_art.df[order(rct_art.df$unique_id, rct_art.df$art_sd),] date_first_regimen <- rct_art.df[!duplicated(rct_art.df$unique_id),c('unique_id','art_sd')] rct_art.df$date_first_regimen <- date_first_regimen[match(rct_art.df$unique_id, date_first_regimen$unique_id,nomatch=NA),'art_sd'] rct_art.df$enrol_d <- rct_basic.df[match(rct_art.df$unique_id, rct_basic.df$unique_id, nomatch=NA),'enrol_d'] rct_art.df$enrol_d <- as.Date(rct_art.df$enrol_d, format='%Y-%m-%d') rct_art.df <- rct_art.df[order(rct_art.df$unique_id, rct_art.df$art_sd),] not_ART_naive <- rct_art.df[!duplicated(rct_art.df$unique_id),c('unique_id','regimen_class')] not_ART_naive$prior_ART <- ifelse(not_ART_naive$regimen_class == 'nonHAART',1,0) rct_art.df$prior_art <- not_ART_naive[match(rct_art.df$unique_id,not_ART_naive$unique_id,nomatch=NA),'prior_ART'] rct_art.df$recart_y <- rct_basic.df[match(rct_art.df$unique_id, rct_basic.df$unique_id,nomatch=NA),'recart_y'] rct_art.df$birth_d <- rct_basic.df[match(rct_art.df$unique_id,rct_basic.df$unique_id,nomatch=NA),'birth_d'] rct_art.df$birth_d <- as.Date(rct_art.df$birth_d, format=c('%Y-%m-%d')) sub_rct_art.df <- subset(rct_art.df, prior_art == 0 & date_first_regimen >= '2000-01-01' & recart_y == 0) date_fhaart <- sub_rct_art.df[!duplicated(sub_rct_art.df$unique_id),c('unique_id','art_sd')] sub_rct_art.df$date_fhaart <- date_fhaart[match(sub_rct_art.df$unique_id, date_fhaart$unique_id, nomatch=NA),'art_sd'] sub_rct_art.df$age_fhaart <- as.numeric(difftime(sub_rct_art.df$date_fhaart, sub_rct_art.df$birth_d,units='days'))/365.25 # Subsetting other RCT data sub_rct_basic.df <- subset(rct_basic.df, unique_id %in% sub_rct_art.df$unique_id) sub_rct_follow.df <- subset(rct_follow.df, unique_id %in% sub_rct_art.df$unique_id) sub_rct_cd4.df <- subset(rct_cd4.df, unique_id %in% sub_rct_art.df$unique_id) sub_rct_rna.df <- subset(rct_rna.df, unique_id %in% sub_rct_art.df$unique_id) sub_rct_visit.df <- subset(rct_visit.df, unique_id %in% sub_rct_art.df$unique_id) @ <>= #--------------------------------------------------# # Looking for year gap in viral load measurement # #--------------------------------------------------# rna$date_fhaart <- art[match(rna$unique_id, art$unique_id, nomatch=NA),'date_fhaart'] rna$rna_d <- as.Date(rna$rna_d, format='%Y-%m-%d') rna <- rna[order(rna$unique_id,rna$rna_d),] rna_gap <- lapply(split(subset(rna, select=c(unique_id,rna_d,rna_v,date_fhaart)),rna$unique_id),FUN=function(y){ y <- subset(y, rna_d >= date_fhaart & !is.na(rna_v)) if(dim(y)[1] > 1){ rna_d_lag <- c(y[1,'rna_d'],y[1:(dim(y)[1]-1),'rna_d']) date_diff <- as.numeric(y[,'rna_d'] - rna_d_lag) # For 1 year gap if(any(!is.na(date_diff) & date_diff > 365.25)){ which.row <- which(date_diff > 365.25)-1 year_gap_date <- min(y[which.row,'rna_d'],na.rm=TRUE) } else { year_gap_date <- NA } } else { year_gap_date <- NA } df <- data.frame('unique_id'=y[1,'unique_id'], 'year_gap_date'=year_gap_date) return(df) } ) rna_gap.df <- do.call('rbind',rna_gap) rna$year_gap_date <- rna_gap.df[match(rna$unique_id,rna_gap.df$unique_id,nomatch=NA),'year_gap_date'] rna$year_gap_date <- as.Date(rna$year_gap_date, origin='1970-01-01') no_w_year_rna_gap <- length(which(!is.na(rna$year_gap_date[!duplicated(rna$unique_id)]))) rna_new <- subset(rna, is.na(year_gap_date) | rna_d <= year_gap_date) # Adding to all other data sets basic$year_gap_date <- rna_new[match(basic$unique_id,rna_new$unique_id,nomatch=NA),'year_gap_date'] art$year_gap_date <- rna_new[match(art$unique_id,rna_new$unique_id,nomatch=NA),'year_gap_date'] visit$year_gap_date <- rna_new[match(visit$unique_id,rna_new$unique_id,nomatch=NA),'year_gap_date'] cd4$year_gap_date <- rna_new[match(cd4$unique_id,rna_new$unique_id,nomatch=NA),'year_gap_date'] follow$year_gap_date <- rna_new[match(follow$unique_id,rna_new$unique_id,nomatch=NA),'year_gap_date'] @ <>= #--------------------------------------------------------------# # Looking for year gap in viral load measurement in RCT data # #--------------------------------------------------------------# sub_rct_rna.df$date_fhaart <- sub_rct_art.df[match(sub_rct_rna.df$unique_id, sub_rct_art.df$unique_id, nomatch=NA),'date_fhaart'] sub_rct_rna.df$rna_d <- as.Date(sub_rct_rna.df$rna_d, format='%Y-%m-%d') sub_rct_rna.df <- sub_rct_rna.df[order(sub_rct_rna.df$unique_id,sub_rct_rna.df$rna_d),] rct_rna_gap <- lapply(split(subset(sub_rct_rna.df, select=c(unique_id,rna_d,rna_v,date_fhaart)),sub_rct_rna.df$unique_id),FUN=function(y){ y <- subset(y, rna_d >= date_fhaart & !is.na(rna_v)) if(dim(y)[1] > 1){ rna_d_lag <- c(y[1,'rna_d'],y[1:(dim(y)[1]-1),'rna_d']) date_diff <- as.numeric(y[,'rna_d'] - rna_d_lag) # For 1 year gap if(any(!is.na(date_diff) & date_diff > 365.25)){ year_gap_date <- min(y[(which(date_diff > 365.25)-1),'rna_d'],na.rm=TRUE) } else { year_gap_date <- NA } } else { year_gap_date <- year_plus_gap_date <- NA } df <- data.frame('unique_id'=y[1,'unique_id'], 'year_gap_date'=year_gap_date) return(df) } ) rct_rna_gap.df <- do.call('rbind',rct_rna_gap) sub_rct_rna.df$year_gap_date <- rct_rna_gap.df[match(sub_rct_rna.df$unique_id,rct_rna_gap.df$unique_id,nomatch=NA),'year_gap_date'] sub_rct_rna.df$year_gap_date <- as.Date(sub_rct_rna.df$year_gap_date, origin='1970-01-01') rct_no_w_year_rna_gap <- length(which(!is.na(sub_rct_rna.df$year_gap_date[!duplicated(sub_rct_rna.df$unique_id)]))) rct_rna_new <- subset(sub_rct_rna.df, is.na(year_gap_date) | rna_d <= year_gap_date) # Adding to all other data sets sub_rct_basic.df$year_gap_date <- rct_rna_new[match(sub_rct_basic.df$unique_id,rct_rna_new$unique_id,nomatch=NA),'year_gap_date'] sub_rct_art.df$year_gap_date <- rct_rna_new[match(sub_rct_art.df$unique_id,rct_rna_new$unique_id,nomatch=NA),'year_gap_date'] sub_rct_visit.df$year_gap_date <- rct_rna_new[match(sub_rct_visit.df$unique_id,rct_rna_new$unique_id,nomatch=NA),'year_gap_date'] sub_rct_cd4.df$year_gap_date <- rct_rna_new[match(sub_rct_cd4.df$unique_id,rct_rna_new$unique_id,nomatch=NA),'year_gap_date'] sub_rct_follow.df$year_gap_date <- rct_rna_new[match(sub_rct_follow.df$unique_id,rct_rna_new$unique_id,nomatch=NA),'year_gap_date'] @ <>= # Defining those whose first HAART was an NNRTI nnrti_d <- subset(art, art_sd == date_first_regimen) nnrti_d <- subset(nnrti_d, regimen_class == 'NNRTI') nnrti_ids <- unique(nnrti_d$unique_id) # And in RCTs rct_nnrti_d <- subset(sub_rct_art.df, art_sd == date_first_regimen) rct_nnrti_d <- subset(rct_nnrti_d, regimen_class == 'NNRTI') rct_nnrti_ids <- unique(rct_nnrti_d$unique_id) @ <>= # Creating long data frame to find max date of follow-up and min date of event cd4$date <- cd4$cd4_d cd4$id_date <- paste(cd4$unique_id, cd4$date, sep='.') rna$date <- rna$rna_d rna$id_date <- paste(rna$unique_id, rna$date, sep='.') all_data <- find_max_date(art,cd4,rna,follow,basic) all_visits <- all_data[['all_visits']] basic <- all_data[['basic']] art <- all_data[['art']] cd4 <- all_data[['cd4']] rna <- all_data[['rna']] follow <- all_data[['follow']] # For clinical trial participants sub_rct_cd4.df$date <- sub_rct_cd4.df$cd4_d sub_rct_cd4.df$id_date <- paste(sub_rct_cd4.df$unique_id, sub_rct_cd4.df$date, sep='.') sub_rct_rna.df$date <- sub_rct_rna.df$rna_d sub_rct_rna.df$id_date <- paste(sub_rct_rna.df$unique_id, sub_rct_rna.df$date, sep='.') rct_all_data <- find_max_date(sub_rct_art.df, sub_rct_cd4.df, sub_rct_rna.df, sub_rct_follow.df,sub_rct_basic.df) rct_all_visits <- rct_all_data[['all_visits']] sub_rct_basic.df <- rct_all_data[['basic']] sub_rct_art.df <- rct_all_data[['art']] sub_rct_cd4.df <- rct_all_data[['cd4']] sub_rct_rna.df <- rct_all_data[['rna']] sub_rct_follow.df <- rct_all_data[['follow']] @ <>= aids_at_fhaart <- aids_at_fhaart_function(all_visits,visit,basic) all_visits <- aids_at_fhaart[['all_visits']] visit <- aids_at_fhaart[['visit']] basic <- aids_at_fhaart[['basic']] sub_rct_basic.df$aids_d <- as.Date(sub_rct_basic.df$aids_d,format='%Y-%m-%d') sub_rct_basic.df$enrol_d <- as.Date(sub_rct_basic.df$enrol_d, format='%Y-%m-%d') rct_aids_at_fhaart <- aids_at_fhaart_function(rct_all_visits,sub_rct_visit.df,sub_rct_basic.df) rct_all_visits <- rct_aids_at_fhaart[['all_visits']] sub_rct_visit.df <- rct_aids_at_fhaart[['visit']] sub_rct_basic.df <- rct_aids_at_fhaart[['basic']] @ <>= # Adding in whether lost to follow-up based on l_alive_d in follow database and # whether that date is more than 1 year before database closing # 2013-06-14 for Brazil # 2013-05-07 for Mexico # 2010-12-31 for Chile # 2013-04-25 for Honduras all_visits$l_alive_d <- follow[match(all_visits$unique_id,follow$unique_id,nomatch=NA),'l_alive_d'] all_visits$l_alive_d <- as.Date(all_visits$l_alive_d) rct_all_visits$l_alive_d <- rct_follow.df[match(rct_all_visits$unique_id,rct_follow.df$unique_id,nomatch=NA),'l_alive_d'] rct_all_visits$l_alive_d <- as.Date(rct_all_visits$l_alive_d) # There are some missing values for lost1 so need to find out if l_alive_d is more than 1 year before closing date for site all_visits$db_closing_date <- ifelse(all_visits$site == 'brazil','2013-06-14', ifelse(all_visits$site == 'mexico','2013-05-07', ifelse(all_visits$site == 'chile','2010-12-31', ifelse(all_visits$site == 'honduras','2013-04-25',NA)))) all_visits$db_closing_date <- as.Date(all_visits$db_closing_date) all_visits$lost1 <- ltfu[match(all_visits$unique_id, ltfu$unique_id, nomatch=NA),'lost1'] all_visits$lost1 <- ifelse(is.na(all_visits$lost1) & !is.na(all_visits$db_closing_date) & (all_visits$db_closing_date - all_visits$l_alive_d)/365.25 > 1.0,1, ifelse(is.na(all_visits$lost1) & !is.na(all_visits$db_closing_date) & (all_visits$db_closing_date - all_visits$l_alive_d)/365.25 <= 1.0,0,all_visits$lost1)) @ <>= #------------------------------# # Defining 3rd line HAART # #------------------------------# third_line_regimen <- as.character(regimen_codes[which(regimen_codes$Drug_name %in% c('Darunavir','Tipranavir','Etravirine', 'Enfuvirtide','Maraviroc','Raltegravir','Elvitegravir')),'Drug_code']) by_regimen <- strsplit(art$art_id, ',') junk <- sapply(by_regimen, FUN=function(y){ tmp <- strsplit(y,',') if(any(unlist(tmp) %in% third_line_regimen)){ third_line <- 1 } else { third_line <- 0 }},simplify=TRUE) junk.df <- data.frame('art_id'=art$art_id, 'third_line_regimen'=as.numeric(junk)) art$third_line_regimen <- junk.df[match(art$art_id,junk.df$art_id,nomatch=NA),'third_line_regimen'] art$third_line_regimen_date <- NA split(art$third_line_regimen_date, art$unique_id) <- lapply(split(subset(art, select=c(unique_id,art_sd,third_line_regimen)), art$unique_id),FUN=function(y){ if(any(y[,'third_line_regimen'] == 1, na.rm=TRUE)){ which.row <- min(which(y[,'third_line_regimen'] == 1),na.rm=TRUE) return(y[which.row,'art_sd']) } else { return(NA) } }) art$third_line_regimen_date <- as.Date(art$third_line_regimen_date, origin='1970-01-01') # Someone had a third line regimen as their first HAART so will manually remove from data until Karu updates data id.w.3rd.line.at.fhaart <- art$unique_id[which(art$date_fhaart == art$third_line_regimen_date)] art <- subset(art, unique_id %nin% id.w.3rd.line.at.fhaart) basic <- subset(basic, unique_id %nin% id.w.3rd.line.at.fhaart) follow <- subset(follow, unique_id %nin% id.w.3rd.line.at.fhaart) cd4 <- subset(cd4, unique_id %nin% id.w.3rd.line.at.fhaart) rna <- subset(rna, unique_id %nin% id.w.3rd.line.at.fhaart) visit <- subset(visit, unique_id %nin% id.w.3rd.line.at.fhaart) all_visits <- subset(all_visits, unique_id %nin% id.w.3rd.line.at.fhaart) nnrti_ids <- nnrti_ids[which(nnrti_ids %nin% id.w.3rd.line.at.fhaart)] ids.final <- length(unique(art$unique_id)) sub_by_regimen <- strsplit(sub_rct_art.df$art_id, ',') junk <- sapply(sub_by_regimen, FUN=function(y){ tmp <- strsplit(y,',') if(any(unlist(tmp) %in% third_line_regimen)){ third_line <- 1 } else { third_line <- 0 }},simplify=TRUE) junk.df <- data.frame('art_id'=sub_rct_art.df$art_id, 'third_line_regimen'=as.numeric(junk)) sub_rct_art.df$third_line_regimen <- junk.df[match(sub_rct_art.df$art_id,junk.df$art_id,nomatch=NA),'third_line_regimen'] sub_rct_art.df$third_line_regimen_date <- NA split(sub_rct_art.df$third_line_regimen_date, sub_rct_art.df$unique_id) <- lapply(split(subset(sub_rct_art.df, select=c(unique_id,art_sd,third_line_regimen)), sub_rct_art.df$unique_id),FUN=function(y){ if(any(y[,'third_line_regimen'] == 1, na.rm=TRUE)){ which.row <- min(which(y[,'third_line_regimen'] == 1),na.rm=TRUE) return(y[which.row,'art_sd']) } else { return(NA) } }) sub_rct_art.df$third_line_regimen_date <- as.Date(sub_rct_art.df$third_line_regimen_date, origin='1970-01-01') # Someone had a third line regimen as their first HAART so will manually remove from data until Karu updates data rct_ids_bf_removing <- length(unique(rct_all_visits$unique_id)) rct_id.w.3rd.line.at.fhaart <- unique(sub_rct_art.df$unique_id[which(sub_rct_art.df$date_fhaart == sub_rct_art.df$third_line_regimen_date)]) sub_rct_art.df <- subset(sub_rct_art.df, unique_id %nin% rct_id.w.3rd.line.at.fhaart) sub_rct_basic.df <- subset(sub_rct_basic.df, unique_id %nin% rct_id.w.3rd.line.at.fhaart) sub_rct_follow.df <- subset(sub_rct_follow.df, unique_id %nin% rct_id.w.3rd.line.at.fhaart) sub_rct_cd4.df <- subset(sub_rct_cd4.df, unique_id %nin% rct_id.w.3rd.line.at.fhaart) sub_rct_rna.df <- subset(sub_rct_rna.df, unique_id %nin% rct_id.w.3rd.line.at.fhaart) sub_rct_visit.df <- subset(sub_rct_visit.df, unique_id %nin% rct_id.w.3rd.line.at.fhaart) rct_all_visits <- subset(rct_all_visits, unique_id %nin% rct_id.w.3rd.line.at.fhaart) art$regimen_number <- NA split(art$regimen_number, art$unique_id) <- lapply(split(art$art_sd,art$unique_id),FUN=function(y){ seq(1:length(y))}) third_line_info <- lapply(split(subset(art, select=c(unique_id,art_rs,third_line_regimen,regimen_number,art_id)), art$unique_id),FUN=function(y){ if(any(y[,'third_line_regimen'] == 1,na.rm=TRUE)){ which.row <- min(which(y[,'third_line_regimen'] == 1),na.rm=TRUE) if(which.row > 1){ reason <- y[(which.row-1),'art_rs'] reg_num <- y[(which.row-1),'regimen_number'] reg_prior_to_3rd_line <- y[(which.row-1),'art_id'] } else { reason <- reg_num <- reg_prior_to_3rd_line <- NA } } else { reason <- reg_num <- reg_prior_to_3rd_line <- NA } df <- data.frame('unique_id'=y[1,'unique_id'], 'third_line_regimen_reason'=reason, 'reg_num_prior_to_3rd_line'=reg_num, 'reg_prior_to_3rd_line'=reg_prior_to_3rd_line) return(df) }) third_line_info.df <- do.call('rbind',third_line_info) art$third_line_regimen_reason <- third_line_info.df[match(art$unique_id,third_line_info.df$unique_id,nomatch=NA), 'third_line_regimen_reason'] art$reg_num_prior_to_3rd_line <- third_line_info.df[match(art$unique_id,third_line_info.df$unique_id,nomatch=NA), 'reg_num_prior_to_3rd_line'] art$reg_prior_to_3rd_line <- third_line_info.df[match(art$unique_id,third_line_info.df$unique_id,nomatch=NA), 'reg_prior_to_3rd_line'] all_visits$third_line_regimen_date <- art[match(all_visits$unique_id,art$unique_id,nomatch=NA),'third_line_regimen_date'] all_visits$third_line_regimen <- ifelse(all_visits$date == all_visits$third_line_regimen_date & !is.na(all_visits$third_line_regimen_date),1,0) all_visits$third_line_regimen_reason <- art[match(all_visits$unique_id,art$unique_id,nomatch=NA),'third_line_regimen_reason'] all_visits$third_line_regimen_reason <- factor(all_visits$third_line_regimen_reason) all_visits$reg_num_prior_to_3rd_line <- art[match(all_visits$unique_id,art$unique_id,nomatch=NA),'reg_num_prior_to_3rd_line'] all_visits$reg_prior_to_3rd_line <- art[match(all_visits$unique_id,art$unique_id,nomatch=NA),'reg_prior_to_3rd_line'] all_visits$overall_third_line_regimen <- 0 split(all_visits$overall_third_line_regimen, all_visits$unique_id) <- lapply(split(all_visits$third_line_regimen, all_visits$unique_id),FUN=function(y){ max(y)}) all_visits$overall_third_line_regimen.factor <- factor(all_visits$overall_third_line_regimen, levels=c(0,1),labels=c('No','Yes')) ids.w.3rd.line <- table(all_visits$third_line_regimen)[2] @ <>= # Adding in for RCT data sub_rct_art.df$regimen_number <- NA split(sub_rct_art.df$regimen_number, sub_rct_art.df$unique_id) <- lapply(split(sub_rct_art.df$art_sd,sub_rct_art.df$unique_id),FUN=function(y){ seq(1:length(y))}) sub_third_line_info <- lapply(split(subset(sub_rct_art.df, select=c(unique_id,art_rs,third_line_regimen,regimen_number,art_id)), sub_rct_art.df$unique_id),FUN=function(y){ if(any(y[,'third_line_regimen'] == 1,na.rm=TRUE)){ which.row <- min(which(y[,'third_line_regimen'] == 1),na.rm=TRUE) if(which.row > 1){ reason <- y[(which.row-1),'art_rs'] reg_num <- y[(which.row-1),'regimen_number'] reg_prior_to_3rd_line <- y[(which.row-1),'art_id'] } else { reason <- reg_num <- reg_prior_to_3rd_line <- NA } } else { reason <- reg_num <- reg_prior_to_3rd_line <- NA } df <- data.frame('unique_id'=y[1,'unique_id'], 'third_line_regimen_reason'=reason, 'reg_num_prior_to_3rd_line'=reg_num, 'reg_prior_to_3rd_line'=reg_prior_to_3rd_line) return(df) }) sub_third_line_info.df <- do.call('rbind',sub_third_line_info) sub_rct_art.df$third_line_regimen_reason <- sub_third_line_info.df[match(sub_rct_art.df$unique_id,sub_third_line_info.df$unique_id,nomatch=NA), 'third_line_regimen_reason'] sub_rct_art.df$reg_num_prior_to_3rd_line <- sub_third_line_info.df[match(sub_rct_art.df$unique_id,sub_third_line_info.df$unique_id,nomatch=NA), 'reg_num_prior_to_3rd_line'] sub_rct_art.df$reg_prior_to_3rd_line <- sub_third_line_info.df[match(sub_rct_art.df$unique_id,sub_third_line_info.df$unique_id,nomatch=NA), 'reg_prior_to_3rd_line'] rct_all_visits$third_line_regimen_date <- sub_rct_art.df[match(rct_all_visits$unique_id,sub_rct_art.df$unique_id,nomatch=NA),'third_line_regimen_date'] rct_all_visits$third_line_regimen <- ifelse(rct_all_visits$date == rct_all_visits$third_line_regimen_date & !is.na(rct_all_visits$third_line_regimen_date),1,0) rct_all_visits$third_line_regimen_reason <- sub_rct_art.df[match(rct_all_visits$unique_id,sub_rct_art.df$unique_id,nomatch=NA),'third_line_regimen_reason'] rct_all_visits$third_line_regimen_reason <- factor(rct_all_visits$third_line_regimen_reason) rct_all_visits$reg_num_prior_to_3rd_line <- sub_rct_art.df[match(rct_all_visits$unique_id,sub_rct_art.df$unique_id,nomatch=NA),'reg_num_prior_to_3rd_line'] rct_all_visits$reg_prior_to_3rd_line <- sub_rct_art.df[match(rct_all_visits$unique_id,sub_rct_art.df$unique_id,nomatch=NA),'reg_prior_to_3rd_line'] rct_all_visits$overall_third_line_regimen <- 0 split(rct_all_visits$overall_third_line_regimen, rct_all_visits$unique_id) <- lapply(split(rct_all_visits$third_line_regimen, rct_all_visits$unique_id),FUN=function(y){ max(y)}) rct_all_visits$overall_third_line_regimen.factor <- factor(rct_all_visits$overall_third_line_regimen, levels=c(0,1),labels=c('No','Yes')) # # Need to remove those whose first HAART was a 3rd line regimen rct_ids.w.3rd.line <- table(rct_all_visits$third_line_regimen)[2] @ <>= # Initial HAART regimen class for Table 1 fhaart.df <- subset(art, date_fhaart == art_sd,select=c(unique_id,regimen_class)) all_visits$fhaart <- fhaart.df[match(all_visits$unique_id, fhaart.df$unique_id,nomatch=NA),'regimen_class'] all_visits$fhaart.factor <- factor(all_visits$fhaart) all_visits$site.factor <- factor(all_visits$site) all_visits$fu_ignoring_outcomes <- as.numeric(difftime(all_visits$max_date,all_visits$date_fhaart, units='days')/365.25) all_visits$fhaart_nnrti <- ifelse(all_visits$unique_id %in% nnrti_ids,1,0) all_visits$fu_nnrti <- NA all_visits$fu_nnrti[which(all_visits$fhaart_nnrti == 1)] <- all_visits$fu_ignoring_outcomes[which(all_visits$fhaart_nnrti == 1)] all_visits$transmission_risk <- as.factor(all_visits$transmission_risk) @ <>= # Initial HAART regimen class in RCTs sub_fhaart.df <- subset(sub_rct_art.df, date_fhaart == art_sd,select=c(unique_id,regimen_class)) rct_all_visits$fhaart <- sub_fhaart.df[match(rct_all_visits$unique_id, sub_fhaart.df$unique_id,nomatch=NA),'regimen_class'] rct_all_visits$fhaart.factor <- factor(rct_all_visits$fhaart) rct_all_visits$site.factor <- factor(rct_all_visits$site) rct_all_visits$fu_ignoring_outcomes <- as.numeric(difftime(rct_all_visits$max_date,rct_all_visits$date_fhaart, units='days')/365.25) rct_all_visits$fhaart_nnrti <- ifelse(rct_all_visits$unique_id %in% rct_nnrti_ids,1,0) rct_all_visits$fu_nnrti <- NA rct_all_visits$fu_nnrti[which(rct_all_visits$fhaart_nnrti == 1)] <- rct_all_visits$fu_ignoring_outcomes[which(rct_all_visits$fhaart_nnrti == 1)] rct_all_visits$transmission_risk <- as.factor(rct_all_visits$transmission_risk) @ <>= # Table 1 summary all_visits$all_patients <- 1 rct_all_visits$all_patients <- 1 tbl1.summ <- summary(all_patients ~ male.factor + age_fhaart + transmission_risk_larger_cat.factor + aids_at_fhaart.factor + baseline_cd4 + baseline_log_rna + overall_third_line_regimen.factor + third_line_regimen_reason + overall_death_indicator.factor + fhaart.factor + site.factor + fu_ignoring_outcomes + fu_nnrti, data=all_visits,subset=!duplicated(unique_id), method='reverse') tbl1.summ$labels <- c('Sex','Age of first HAART', 'Possible route of infection', 'AIDS at first HAART', 'Baseline CD4','Baseline log viral load', 'Started 3rd line regimen','Reason for starting 3rd line regimen', 'Death','Initial HAART','Site','Follow-up, ignoring outcomes','Follow-up for NNRTI first HAART, ignoring outcomes') @ <>= # Describing those who started a 3rd line regimen (which is only those who had one of the specific drugs) # Need time from date_fhaart t0 third_line_regimen_date all_visits$years_from_fhaart_to_3rd_line <- as.numeric(difftime(all_visits$third_line_regimen_date,all_visits$date_fhaart, units='days'))/365.25 all_visits$site.factor <- factor(all_visits$site) # Need to find CD4 closest to 3rd line regimen cd4$third_line_regimen_date <- all_visits[match(cd4$unique_id,all_visits$unique_id,nomatch=NA),'third_line_regimen_date'] cd4$overall_third_line_regimen <- all_visits[match(cd4$unique_id,all_visits$unique_id,nomatch=NA),'overall_third_line_regimen'] cd4 <- cd4[order(cd4$unique_id,cd4$date),] cd4$third_line_date_diff <- as.numeric(difftime(cd4$date,cd4$third_line_regimen_date,units='days')) cd4_sub <- subset(cd4, !is.na(cd4_v) & overall_third_line_regimen == 1) cd4_sub <- cd4_sub[order(cd4_sub$unique_id,cd4_sub$date),] cd4_closest_to_3rd_line <- lapply(split(subset(cd4_sub, select=c(unique_id,third_line_date_diff,cd4_v)),cd4_sub$unique_id), FUN=function(y){ if(any(!is.na(y[,'third_line_date_diff']) & y[,'third_line_date_diff'] <= 0 & abs(y[,'third_line_date_diff']) <= 180)){ max.before <- max(y[which(round(y[,'third_line_date_diff']) %in% c(-180:0)),'third_line_date_diff'],na.rm=TRUE) } else { max.before <- NA } if(any(!is.na(y[,'third_line_date_diff']) & y[,'third_line_date_diff'] > 0 & y[,'third_line_date_diff'] <= 7)){ min.after <- min(y[which(round(y[,'third_line_date_diff']) %in% c(0:7)),'third_line_date_diff'],na.rm=TRUE) } else { min.after <- NA } min.distance <- ifelse(is.na(max.before) & is.na(min.after),NA, ifelse(is.na(max.before),min.after,max.before)) if(!is.na(min.distance)){ cd4_closest_to_3rd_line <- as.numeric(y[which(y[,'third_line_date_diff'] == min.distance),'cd4_v']) } else { cd4_closest_to_3rd_line <- NA } df <- data.frame('unique_id' = y[1,'unique_id'], 'min_distance'=min.distance, 'cd4_closest_to_3rd_line'=cd4_closest_to_3rd_line) return(df) }) cd4_closest_to_3rd_line.df <- do.call('rbind',cd4_closest_to_3rd_line) cd4$cd4_closest_to_3rd_line <- cd4_closest_to_3rd_line.df[match(cd4$unique_id, cd4_closest_to_3rd_line.df$unique_id,nomatch=NA), 'cd4_closest_to_3rd_line'] all_visits$cd4_closest_to_3rd_line <- cd4[match(all_visits$unique_id,cd4$unique_id,nomatch=NA),'cd4_closest_to_3rd_line'] # And rna closest to 3rd line regimen rna$third_line_regimen_date <- all_visits[match(rna$unique_id,all_visits$unique_id,nomatch=NA),'third_line_regimen_date'] rna$overall_third_line_regimen <- all_visits[match(rna$unique_id,all_visits$unique_id,nomatch=NA),'overall_third_line_regimen'] rna <- rna[order(rna$unique_id,rna$date),] rna$third_line_date_diff <- as.numeric(difftime(rna$date,rna$third_line_regimen_date,units='days')) rna_sub <- subset(rna, !is.na(rna_v) & overall_third_line_regimen == 1) rna_sub <- rna_sub[order(rna_sub$unique_id,rna_sub$date),] rna_closest_to_3rd_line <- lapply(split(subset(rna_sub, select=c(unique_id,third_line_date_diff,rna_v)),rna_sub$unique_id), FUN=function(y){ if(any(!is.na(y[,'third_line_date_diff']) & y[,'third_line_date_diff'] <= 0 & abs(y[,'third_line_date_diff']) <= 180)){ min.distance <- max(y[which(y[,'third_line_date_diff'] >= -180 & y[,'third_line_date_diff'] <= 0),'third_line_date_diff'],na.rm=TRUE) } else { min.distance <- NA } if(!is.na(min.distance)){ rna_closest_to_3rd_line <- as.numeric(y[which(y[,'third_line_date_diff'] == min.distance),'rna_v']) } else { rna_closest_to_3rd_line <- NA } df <- data.frame('unique_id'=y[1,'unique_id'], 'min_distance'=min.distance, 'rna_closest_to_3rd_line'=rna_closest_to_3rd_line) return(df) }) rna_closest_to_3rd_line.df <- do.call('rbind',rna_closest_to_3rd_line) rna$rna_closest_to_3rd_line <- rna_closest_to_3rd_line.df[match(rna$unique_id, rna_closest_to_3rd_line.df$unique_id,nomatch=NA), 'rna_closest_to_3rd_line'] all_visits$rna_closest_to_3rd_line <- rna[match(all_visits$unique_id,rna$unique_id,nomatch=NA),'rna_closest_to_3rd_line'] all_visits$log_rna_closest_to_3rd_line <- log10(all_visits$rna_closest_to_3rd_line) tmp <- subset(all_visits, !duplicated(unique_id) & overall_third_line_regimen == 1) tmp$reg_num_prior_to_3rd_line <- ifelse(tmp$third_line_regimen == 1,0,tmp$reg_num_prior_to_3rd_line) tmp$reg_prior_to_3rd_line <- factor(tmp$reg_prior_to_3rd_line) tmp$years_from_3rd_line_to_death <- round(as.numeric(difftime(tmp$death_d,tmp$third_line_regimen_date,units='days'))/365.25,2) tmp$site.factor <- factor(tmp$site) third_line_summ2. <- summary(all_patients ~ age_fhaart + male.factor + transmission_risk_larger_cat.factor + aids_at_fhaart.factor + baseline_cd4 + cd4_closest_to_3rd_line + baseline_log_rna + log_rna_closest_to_3rd_line + years_from_fhaart_to_3rd_line + reg_num_prior_to_3rd_line + site.factor + overall_death_indicator.factor, data=tmp, method='reverse') third_line_summ2.$labels <- c('Age at first HAART','Sex', 'Possible route of infection', 'AIDS at first HAART', 'CD4 at start of first HAART','CD4 closest to 3rd line regimen', 'HIV1-RNA at start of first HAART (log-transformed)', 'HIV1-RNA closest to 3rd line regimen', 'Years from HAART start to 3rd line regimen', 'Number of regimens prior to 3rd line','Site', 'Died') @ <>= # Describing those who started a 3rd line regimen (which is only those who had one of the specific drugs) # Need time from date_fhaart t0 third_line_regimen_date rct_all_visits$years_from_fhaart_to_3rd_line <- as.numeric(difftime(rct_all_visits$third_line_regimen_date,rct_all_visits$date_fhaart, units='days'))/365.25 rct_all_visits$site.factor <- factor(rct_all_visits$site) # Need to find CD4 closest to 3rd line regimen sub_rct_cd4.df$third_line_regimen_date <- rct_all_visits[match(sub_rct_cd4.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'third_line_regimen_date'] sub_rct_cd4.df$overall_third_line_regimen <- rct_all_visits[match(sub_rct_cd4.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'overall_third_line_regimen'] sub_rct_cd4.df <- sub_rct_cd4.df[order(sub_rct_cd4.df$unique_id,sub_rct_cd4.df$date),] sub_rct_cd4.df$third_line_date_diff <- as.numeric(difftime(sub_rct_cd4.df$date,sub_rct_cd4.df$third_line_regimen_date,units='days')) sub_rct_cd4.df_sub <- subset(sub_rct_cd4.df, !is.na(cd4_v) & overall_third_line_regimen == 1) sub_rct_cd4.df_sub <- sub_rct_cd4.df_sub[order(sub_rct_cd4.df_sub$unique_id,sub_rct_cd4.df_sub$date),] sub_cd4_closest_to_3rd_line <- lapply(split(subset(sub_rct_cd4.df_sub, select=c(unique_id,third_line_date_diff,cd4_v)),sub_rct_cd4.df_sub$unique_id), FUN=function(y){ if(any(!is.na(y[,'third_line_date_diff']) & y[,'third_line_date_diff'] <= 0 & abs(y[,'third_line_date_diff']) <= 180)){ max.before <- max(y[which(round(y[,'third_line_date_diff']) %in% c(-180:0)),'third_line_date_diff'],na.rm=TRUE) } else { max.before <- NA } if(any(!is.na(y[,'third_line_date_diff']) & y[,'third_line_date_diff'] > 0 & y[,'third_line_date_diff'] <= 7)){ min.after <- min(y[which(round(y[,'third_line_date_diff']) %in% c(0:7)),'third_line_date_diff'],na.rm=TRUE) } else { min.after <- NA } min.distance <- ifelse(is.na(max.before) & is.na(min.after),NA, ifelse(is.na(max.before),min.after,max.before)) if(!is.na(min.distance)){ cd4_closest_to_3rd_line <- as.numeric(y[which(y[,'third_line_date_diff'] == min.distance),'cd4_v']) } else { cd4_closest_to_3rd_line <- NA } df <- data.frame('unique_id' = y[1,'unique_id'], 'min_distance'=min.distance, 'cd4_closest_to_3rd_line'=cd4_closest_to_3rd_line) return(df) }) sub_cd4_closest_to_3rd_line.df <- do.call('rbind',sub_cd4_closest_to_3rd_line) sub_rct_cd4.df$cd4_closest_to_3rd_line <- sub_cd4_closest_to_3rd_line.df[match(sub_rct_cd4.df$unique_id, sub_cd4_closest_to_3rd_line.df$unique_id,nomatch=NA), 'cd4_closest_to_3rd_line'] rct_all_visits$cd4_closest_to_3rd_line <- sub_rct_cd4.df[match(rct_all_visits$unique_id,sub_rct_cd4.df$unique_id,nomatch=NA),'cd4_closest_to_3rd_line'] # And rna closest to 3rd line regimen sub_rct_rna.df$third_line_regimen_date <- rct_all_visits[match(sub_rct_rna.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'third_line_regimen_date'] sub_rct_rna.df$overall_third_line_regimen <- rct_all_visits[match(sub_rct_rna.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'overall_third_line_regimen'] sub_rct_rna.df <- sub_rct_rna.df[order(sub_rct_rna.df$unique_id,sub_rct_rna.df$date),] sub_rct_rna.df$third_line_date_diff <- as.numeric(difftime(sub_rct_rna.df$date,sub_rct_rna.df$third_line_regimen_date,units='days')) sub_rct_rna.df_sub <- subset(sub_rct_rna.df, !is.na(rna_v) & overall_third_line_regimen == 1) sub_rct_rna.df_sub <- sub_rct_rna.df_sub[order(sub_rct_rna.df_sub$unique_id,sub_rct_rna.df_sub$date),] sub_rna_closest_to_3rd_line <- lapply(split(subset(sub_rct_rna.df_sub, select=c(unique_id,third_line_date_diff,rna_v)),sub_rct_rna.df_sub$unique_id), FUN=function(y){ if(any(!is.na(y[,'third_line_date_diff']) & y[,'third_line_date_diff'] <= 0 & abs(y[,'third_line_date_diff']) <= 180)){ min.distance <- max(y[which(y[,'third_line_date_diff'] >= -180 & y[,'third_line_date_diff'] <= 0),'third_line_date_diff'],na.rm=TRUE) } else { min.distance <- NA } if(!is.na(min.distance)){ rna_closest_to_3rd_line <- as.numeric(y[which(y[,'third_line_date_diff'] == min.distance),'rna_v']) } else { rna_closest_to_3rd_line <- NA } df <- data.frame('unique_id'=y[1,'unique_id'], 'min_distance'=min.distance, 'rna_closest_to_3rd_line'=rna_closest_to_3rd_line) return(df) }) sub_rna_closest_to_3rd_line.df <- do.call('rbind',sub_rna_closest_to_3rd_line) sub_rct_rna.df$rna_closest_to_3rd_line <- sub_rna_closest_to_3rd_line.df[match(sub_rct_rna.df$unique_id, sub_rna_closest_to_3rd_line.df$unique_id,nomatch=NA), 'rna_closest_to_3rd_line'] rct_all_visits$rna_closest_to_3rd_line <- sub_rct_rna.df[match(rct_all_visits$unique_id,sub_rct_rna.df$unique_id,nomatch=NA),'rna_closest_to_3rd_line'] rct_all_visits$log_rna_closest_to_3rd_line <- log10(rct_all_visits$rna_closest_to_3rd_line) rct_tmp <- subset(rct_all_visits, !duplicated(unique_id) & overall_third_line_regimen == 1) rct_tmp$reg_num_prior_to_3rd_line <- ifelse(rct_tmp$third_line_regimen == 1,0,rct_tmp$reg_num_prior_to_3rd_line) rct_tmp$reg_prior_to_3rd_line <- factor(rct_tmp$reg_prior_to_3rd_line) rct_tmp$years_from_3rd_line_to_death <- round(as.numeric(difftime(rct_tmp$death_d,rct_tmp$third_line_regimen_date,units='days'))/365.25,2) rct_tmp$site.factor <- factor(rct_tmp$site) @ <>= # Need what the actual third line regimen is cj <- subset(art, third_line_regimen == 1 & unique_id %in% all_visits$unique_id,select=c(unique_id,art_id)) cj <- cj[!duplicated(cj$unique_id),] tmp$third_line_regimen_list <- cj[match(tmp$unique_id,cj$unique_id,nomatch=NA),'art_id'] tmp$third_line_regimen_list <- factor(tmp$third_line_regimen_list) third_line_regimens <- summary(all_patients ~ third_line_regimen_list, data=tmp, method='reverse') third_line_regimens$labels <- 'Third line regimens' @ <>= # And for RCT folks rct_cj <- subset(sub_rct_art.df, third_line_regimen == 1 & unique_id %in% rct_all_visits$unique_id,select=c(unique_id,art_id)) rct_cj <- rct_cj[!duplicated(rct_cj$unique_id),] rct_tmp$third_line_regimen_list <- rct_cj[match(rct_tmp$unique_id,rct_cj$unique_id,nomatch=NA),'art_id'] rct_tmp$third_line_regimen_list <- factor(rct_tmp$third_line_regimen_list) rct_third_line_regimens <- summary(all_patients ~ third_line_regimen_list, data=rct_tmp, method='reverse') rct_third_line_regimens$labels <- 'Third line regimens' @ <>= # Summarizing third line regimens differently for Carina third_line_components <- lapply(split(tmp$third_line_regimen_list, tmp$unique_id), FUN=function(y){ splt <- strsplit(as.character(y),split=',') drv_ind <- as.numeric('DRV' %in% unlist(splt)) tpv_ind <- as.numeric('TPV' %in% unlist(splt)) enf_ind <- as.numeric('ENF' %in% unlist(splt)) ral_ind <- as.numeric('RAL' %in% unlist(splt)) evg_ind <- as.numeric('EVG' %in% unlist(splt)) etr_ind <- as.numeric('ETR' %in% unlist(splt)) df <- data.frame(drv_ind, tpv_ind, enf_ind, ral_ind, evg_ind,etr_ind) return(df) }) splt.df <- do.call('rbind',third_line_components) tmp <- cbind(tmp, splt.df) component_summary <- summary(all_patients ~ drv_ind + tpv_ind + enf_ind + ral_ind + evg_ind + etr_ind, data=tmp, method='reverse') component_summary$labels <- c('DRV','TPV','ENF','RAL','EVG','ETR') @ <>= # And for RCT folks rct_third_line_components <- lapply(split(rct_tmp$third_line_regimen_list, rct_tmp$unique_id), FUN=function(y){ splt <- strsplit(as.character(y),split=',') drv_ind <- as.numeric('DRV' %in% unlist(splt)) tpv_ind <- as.numeric('TPV' %in% unlist(splt)) enf_ind <- as.numeric('ENF' %in% unlist(splt)) ral_ind <- as.numeric('RAL' %in% unlist(splt)) evg_ind <- as.numeric('EVG' %in% unlist(splt)) etr_ind <- as.numeric('ETR' %in% unlist(splt)) df <- data.frame(drv_ind, tpv_ind, enf_ind, ral_ind, evg_ind,etr_ind) return(df) }) rct_splt.df <- do.call('rbind',rct_third_line_components) rct_tmp <- cbind(rct_tmp, rct_splt.df) rct_component_summary <- summary(all_patients ~ drv_ind + tpv_ind + enf_ind + ral_ind + evg_ind + etr_ind, data=rct_tmp, method='reverse') rct_component_summary$labels <- c('DRV','TPV','ENF','RAL','EVG','ETR') @ <>= # List of regimens for each person who eventually started a third line regimen art$overall_third_line_regimen <- tmp[match(art$unique_id,tmp$unique_id,nomatch=NA),'overall_third_line_regimen'] sub_art <- subset(art, overall_third_line_regimen == 1,select=c(unique_id,regimen_number,art_sd,art_id,art_rs,site)) sub_art$site.factor <- factor(sub_art$site) @ <>= # And for RCT folks sub_rct_art.df$overall_third_line_regimen <- rct_tmp[match(sub_rct_art.df$unique_id,rct_tmp$unique_id,nomatch=NA),'overall_third_line_regimen'] @ \clearpage <>= #----------------------------------------------# # Defining second line regimens # #----------------------------------------------# # First need to indicate which boosted PI switch indicates a switch to a second line regimen (requires switching the PI) second_line_determination <- second_line_regimen_function(art,cd4,rna) art <- second_line_determination[['art']] cd4 <- second_line_determination[['cd4']] rna <- second_line_determination[['rna']] sub_second_line_determination <- second_line_regimen_function(sub_rct_art.df,sub_rct_cd4.df,sub_rct_rna.df) sub_rct_art.df <- sub_second_line_determination[['art']] sub_rct_cd4.df <- sub_second_line_determination[['cd4']] sub_rct_rna.df <- sub_second_line_determination[['rna']] @ <>= # Adding in date second line regimen date information to rna data to check virologic failure on all viral loads from the first second line regimen forward rna$min_second_line_start_date_nnrti <- art[match(rna$unique_id,art$unique_id,nomatch=NA),'min_second_line_start_date_nnrti'] rna$min_second_line_start_date_nnrti <- as.Date(rna$min_second_line_start_date_nnrti, origin='1970-01-01') rna$min_second_line_start_date_bpi_or_nnrti <- art[match(rna$unique_id,art$unique_id,nomatch=NA),'min_second_line_start_date_bpi_or_nnrti'] rna$min_second_line_start_date_bpi_or_nnrti <- as.Date(rna$min_second_line_start_date_bpi_or_nnrti, origin='1970-01-01') # Need to be able to map in rna data when someone was on or not on a BPI or approved 'OTHER regimen after the switch rna$bpi_after_bpi <- rna$bpi_after_nnrti <- rna$bpi_after_bpi_or_nnrti <- 0 art.tmp <- subset(art, select=c(unique_id,art_sd,art_ed,bpi_after_bpi,bpi_after_nnrti,bpi_after_bpi_or_nnrti)) # Entering in today for end dates that are missing art.tmp$art_ed[which(is.na(art.tmp$art_ed))] <- '2013-06-14' for(i in 1:nrow(rna)){ # For bpi_after_bpi indicator loop.tmp <- art.tmp[which(art.tmp$unique_id == rna$unique_id[i]),] loop.tmp$art_sd[which(loop.tmp$bpi_after_bpi == 0)] <- NA loop.tmp$art_ed[which(loop.tmp$bpi_after_bpi == 0)] <- NA inside <- !is.na(loop.tmp$art_sd) & loop.tmp$art_sd <= rna$rna_d[i] & loop.tmp$art_ed > rna$rna_d[i] if(any(inside)){ rna$bpi_after_bpi[i] <- loop.tmp$bpi_after_bpi[inside] } # For bpi_after_nnrti indicator loop.tmp <- art.tmp[which(art.tmp$unique_id == rna$unique_id[i]),] loop.tmp$art_sd[which(loop.tmp$bpi_after_nnrti == 0)] <- NA loop.tmp$art_ed[which(loop.tmp$bpi_after_nnrti == 0)] <- NA inside <- !is.na(loop.tmp$art_sd) & loop.tmp$art_sd <= rna$rna_d[i] & loop.tmp$art_ed > rna$rna_d[i] if(any(inside)){ rna$bpi_after_nnrti[i] <- loop.tmp$bpi_after_nnrti[inside] } } rna$bpi_after_bpi_or_nnrti <- ifelse(rna$bpi_after_bpi == 1 | rna$bpi_after_nnrti == 1,1,0) # Creating overall indicators for those who switched to second line with the PI/r to PI/r definition art$overall_second_line_bpi <- NA split(art$overall_second_line_bpi,art$unique_id) <- lapply(split(art$bpi_after_bpi,art$unique_id),FUN=function(y){ max(y) }) # Creating overall indicators for those who switched to second line with the NNRTI to PI/r definition art$overall_second_line_nnrti <- NA split(art$overall_second_line_nnrti,art$unique_id) <- lapply(split(art$bpi_after_nnrti,art$unique_id),FUN=function(y){ max(y) }) # Creating overall indicators for those who switched to second line with the PI/r to PI/r or NNRTI to PI/r definition art$overall_second_line <- NA split(art$overall_second_line,art$unique_id) <- lapply(split(art$bpi_after_bpi_or_nnrti,art$unique_id),FUN=function(y){ max(y) }) @ <>= # Adding in date second line regimen date information to rna data to check virologic failure on all viral loads from the first second line regimen forward sub_rct_rna.df$min_second_line_start_date_nnrti <- sub_rct_art.df[match(sub_rct_rna.df$unique_id,sub_rct_art.df$unique_id,nomatch=NA),'min_second_line_start_date_nnrti'] sub_rct_rna.df$min_second_line_start_date_nnrti <- as.Date(sub_rct_rna.df$min_second_line_start_date_nnrti, origin='1970-01-01') sub_rct_rna.df$min_second_line_start_date_bpi_or_nnrti <- sub_rct_art.df[match(sub_rct_rna.df$unique_id,sub_rct_art.df$unique_id,nomatch=NA),'min_second_line_start_date_bpi_or_nnrti'] sub_rct_rna.df$min_second_line_start_date_bpi_or_nnrti <- as.Date(sub_rct_rna.df$min_second_line_start_date_bpi_or_nnrti, origin='1970-01-01') # Need to be able to map in rna data when someone was on or not on a BPI or approved 'OTHER regimen after the switch sub_rct_rna.df$bpi_after_bpi <- sub_rct_rna.df$bpi_after_nnrti <- sub_rct_rna.df$bpi_after_bpi_or_nnrti <- 0 rct_art.tmp <- subset(sub_rct_art.df, select=c(unique_id,art_sd,art_ed,bpi_after_bpi,bpi_after_nnrti,bpi_after_bpi_or_nnrti)) # Entering in today for end dates that are missing rct_art.tmp$art_ed[which(is.na(rct_art.tmp$art_ed))] <- '2013-06-14' for(i in 1:nrow(sub_rct_rna.df)){ # For bpi_after_bpi indicator loop.tmp <- rct_art.tmp[which(rct_art.tmp$unique_id == sub_rct_rna.df$unique_id[i]),] loop.tmp$art_sd[which(loop.tmp$bpi_after_bpi == 0)] <- NA loop.tmp$art_ed[which(loop.tmp$bpi_after_bpi == 0)] <- NA inside <- !is.na(loop.tmp$art_sd) & loop.tmp$art_sd <= sub_rct_rna.df$rna_d[i] & loop.tmp$art_ed > sub_rct_rna.df$rna_d[i] if(any(inside)){ sub_rct_rna.df$bpi_after_bpi[i] <- loop.tmp$bpi_after_bpi[inside] } # For bpi_after_nnrti indicator loop.tmp <- rct_art.tmp[which(rct_art.tmp$unique_id == sub_rct_rna.df$unique_id[i]),] loop.tmp$art_sd[which(loop.tmp$bpi_after_nnrti == 0)] <- NA loop.tmp$art_ed[which(loop.tmp$bpi_after_nnrti == 0)] <- NA inside <- !is.na(loop.tmp$art_sd) & loop.tmp$art_sd <= sub_rct_rna.df$rna_d[i] & loop.tmp$art_ed > sub_rct_rna.df$rna_d[i] if(any(inside)){ sub_rct_rna.df$bpi_after_nnrti[i] <- loop.tmp$bpi_after_nnrti[inside] } } sub_rct_rna.df$bpi_after_bpi_or_nnrti <- ifelse(sub_rct_rna.df$bpi_after_bpi == 1 | sub_rct_rna.df$bpi_after_nnrti == 1,1,0) # Creating overall indicators for those who switched to second line with the PI/r to PI/r definition sub_rct_art.df$overall_second_line_bpi <- NA split(sub_rct_art.df$overall_second_line_bpi,sub_rct_art.df$unique_id) <- lapply(split(sub_rct_art.df$bpi_after_bpi,sub_rct_art.df$unique_id),FUN=function(y){ max(y) }) # Creating overall indicators for those who switched to second line with the NNRTI to PI/r definition sub_rct_art.df$overall_second_line_nnrti <- NA split(sub_rct_art.df$overall_second_line_nnrti,sub_rct_art.df$unique_id) <- lapply(split(sub_rct_art.df$bpi_after_nnrti,sub_rct_art.df$unique_id),FUN=function(y){ max(y) }) # Creating overall indicators for those who switched to second line with the PI/r to PI/r or NNRTI to PI/r definition sub_rct_art.df$overall_second_line <- NA split(sub_rct_art.df$overall_second_line,sub_rct_art.df$unique_id) <- lapply(split(sub_rct_art.df$bpi_after_bpi_or_nnrti,sub_rct_art.df$unique_id),FUN=function(y){ max(y) }) @ <>= #--------------------------------------# # Assessing virologic failure # #--------------------------------------# # Either criteria for switch (BPI to BPI or NNRTI to BPI) vl_failure_all <- virologic_failure_function(switch='all',rna,detectable_level=400) # fail.1000 is the overall failure marker now, not fail. art$overall_failure_on_second_line.1000 <- vl_failure_all[match(art$unique_id,vl_failure_all$unique_id,nomatch=NA),'vl_failure.1000'] art$overall_failure_on_second_line.1000 <- ifelse(is.na(art$overall_failure_on_second_line.1000),0,art$overall_failure_on_second_line.1000) art$overall_failure_on_second_line.1000.factor <- factor(art$overall_failure_on_second_line.1000, levels=c(0,1), labels=c('No','Yes')) art$days_from_second_start_to_vl_failure.1000 <- vl_failure_all[match(art$unique_id,vl_failure_all$unique_id,nomatch=NA),'days_from_second_start_to_vl_failure.1000'] art$date_failure_on_second_line.1000 <- vl_failure_all[match(art$unique_id,vl_failure_all$unique_id,nomatch=NA),'date_vl_failure.1000'] art$days_from_haart_start_to_vl_failure.1000 <- as.numeric(difftime(art$date_failure_on_second_line.1000,art$date_fhaart,units='days')) art$overall_failure_on_second_line <- vl_failure_all[match(art$unique_id,vl_failure_all$unique_id,nomatch=NA),'vl_failure'] art$overall_failure_on_second_line <- ifelse(is.na(art$overall_failure_on_second_line),0,art$overall_failure_on_second_line) art$overall_failure_on_second_line.factor <- factor(art$overall_failure_on_second_line, levels=c(0,1), labels=c('No','Yes')) art$days_from_second_start_to_vl_failure <- vl_failure_all[match(art$unique_id,vl_failure_all$unique_id,nomatch=NA),'days_from_second_start_to_vl_failure'] art$date_failure_on_second_line <- vl_failure_all[match(art$unique_id,vl_failure_all$unique_id,nomatch=NA),'date_vl_failure'] art$days_from_haart_start_to_vl_failure <- as.numeric(difftime(art$date_failure_on_second_line,art$date_fhaart,units='days')) art$overall_failure_on_second_line.1000_new <- ifelse(!is.na(art$year_gap_date) & !is.na(art$date_failure_on_second_line.1000) & art$date_failure_on_second_line.1000 > art$year_gap_date,0,art$overall_failure_on_second_line.1000) art$overall_failure_on_second_line.1000_new.factor <- factor(art$overall_failure_on_second_line.1000_new, levels=c(0,1), labels=c('No','Yes')) art$date_failure_on_second_line.1000_new <- ifelse(!is.na(art$date_failure_on_second_line.1000) & !is.na(art$year_gap_date) & art$date_failure_on_second_line.1000 > art$year_gap_date,NA,art$date_failure_on_second_line.1000) art$date_failure_on_second_line.1000_new <- as.Date(art$date_failure_on_second_line.1000_new, origin='1970-01-01') art$days_from_second_start_to_vl_failure.1000_new <- ifelse(is.na(art$date_failure_on_second_line.1000_new),NA,art$days_from_second_start_to_vl_failure.1000) art$days_from_haart_start_to_vl_failure.1000_new <- ifelse(is.na(art$date_failure_on_second_line.1000_new),NA,art$days_from_haart_start_to_vl_failure.1000) art$overall_failure_on_second_line_new <- ifelse(!is.na(art$year_gap_date) & !is.na(art$date_failure_on_second_line) & art$date_failure_on_second_line > art$year_gap_date,0,art$overall_failure_on_second_line) art$overall_failure_on_second_line_new.factor <- factor(art$overall_failure_on_second_line_new, levels=c(0,1), labels=c('No','Yes')) art$date_failure_on_second_line_new <- ifelse(!is.na(art$date_failure_on_second_line) & !is.na(art$year_gap_date) & art$date_failure_on_second_line > art$year_gap_date,NA,art$date_failure_on_second_line) art$date_failure_on_second_line_new <- as.Date(art$date_failure_on_second_line_new, origin='1970-01-01') art$days_from_second_start_to_vl_failure_new <- ifelse(is.na(art$date_failure_on_second_line_new),NA,art$days_from_second_start_to_vl_failure) art$days_from_haart_start_to_vl_failure_new <- ifelse(is.na(art$date_failure_on_second_line_new),NA,art$days_from_haart_start_to_vl_failure) # Checking ot see how many failures during month gap art$failure_during_gap <- apply(subset(art, select=c(month_gap,month_gap_start,month_gap_end,date_failure_on_second_line.1000,date_failure_on_second_line)),1,FUN=function(y){ if(y['month_gap'] == 1){ if(!is.na(y['date_failure_on_second_line.1000']) & y['date_failure_on_second_line.1000'] >= y['month_gap_start'] & y['date_failure_on_second_line.1000'] <= y['month_gap_end']){ failure_during_gap <- 1 } else { failure_during_gap <- 0 } } else { failure_during_gap <- NA } }) art$failure_on_art.1000 <- ifelse(art$date_failure_on_second_line.1000 >= art$art_sd & art$date_failure_on_second_line.1000 <= art$art_ed,1,0) stuff <- table(art$failure_on_art.1000,art$month_gap) # Only those who had NNRTI to BPI as in Africa vl_failure_nnrti <- virologic_failure_function(switch='nnrti',rna,detectable_level=400) ## changed to 400 from 1000 on 7/8/2013 # vl_failure_nnrti_original <- virologic_failure_function(switch='nnrti',rna_original,detectable_level=400) ## changed to 400 from 1000 on 7/8/2013 # fail.1000 is the overall failure marker now, not fail. art$overall_failure_on_second_line_nnrti.1000 <- vl_failure_nnrti[match(art$unique_id,vl_failure_nnrti$unique_id,nomatch=NA),'vl_failure.1000'] art$overall_failure_on_second_line_nnrti.1000 <- ifelse(is.na(art$overall_failure_on_second_line_nnrti.1000),0,art$overall_failure_on_second_line_nnrti.1000) art$overall_failure_on_second_line_nnrti.1000.factor <- factor(art$overall_failure_on_second_line_nnrti.1000, levels=c(0,1), labels=c('No','Yes')) art$days_from_second_start_to_vl_failure_nnrti.1000 <- vl_failure_nnrti[match(art$unique_id,vl_failure_nnrti$unique_id,nomatch=NA),'days_from_second_start_to_vl_failure.1000'] art$date_failure_on_second_line_nnrti.1000 <- vl_failure_nnrti[match(art$unique_id,vl_failure_nnrti$unique_id,nomatch=NA),'date_vl_failure.1000'] art$days_from_haart_start_to_vl_failure_nnrti.1000 <- as.numeric(difftime(art$date_failure_on_second_line_nnrti.1000,art$date_fhaart,units='days')) art$overall_failure_on_second_line_nnrti <- vl_failure_nnrti[match(art$unique_id,vl_failure_nnrti$unique_id,nomatch=NA),'vl_failure'] art$overall_failure_on_second_line_nnrti <- ifelse(is.na(art$overall_failure_on_second_line_nnrti),0,art$overall_failure_on_second_line_nnrti) art$overall_failure_on_second_line_nnrti.factor <- factor(art$overall_failure_on_second_line_nnrti, levels=c(0,1), labels=c('No','Yes')) art$days_from_second_start_to_vl_failure_nnrti <- vl_failure_nnrti[match(art$unique_id,vl_failure_nnrti$unique_id,nomatch=NA),'days_from_second_start_to_vl_failure'] art$date_failure_on_second_line_nnrti <- vl_failure_nnrti[match(art$unique_id,vl_failure_nnrti$unique_id,nomatch=NA),'date_vl_failure'] art$days_from_haart_start_to_vl_failure_nnrti <- as.numeric(difftime(art$date_failure_on_second_line_nnrti,art$date_fhaart,units='days')) art$overall_failure_on_second_line_nnrti.1000_new <- ifelse(!is.na(art$year_gap_date) & !is.na(art$date_failure_on_second_line_nnrti.1000) & art$date_failure_on_second_line_nnrti.1000 > art$year_gap_date,0,art$overall_failure_on_second_line_nnrti.1000) art$overall_failure_on_second_line_nnrti.1000_new.factor <- factor(art$overall_failure_on_second_line_nnrti.1000_new, levels=c(0,1), labels=c('No','Yes')) art$date_failure_on_second_line_nnrti.1000_new <- ifelse(!is.na(art$year_gap_date) & !is.na(art$date_failure_on_second_line_nnrti.1000) & art$date_failure_on_second_line_nnrti.1000 > art$year_gap_date,NA,art$date_failure_on_second_line_nnrti.1000) art$date_failure_on_second_line_nnrti.1000_new <- as.Date(art$date_failure_on_second_line_nnrti.1000_new, origin='1970-01-01') art$days_from_haart_start_to_vl_failure_nnrti.1000_new <- ifelse(is.na(art$date_failure_on_second_line_nnrti.1000_new),NA,art$days_from_haart_start_to_vl_failure_nnrti.1000) art$days_from_second_start_to_vl_failure_nnrti.1000_new <- ifelse(is.na(art$date_failure_on_second_line_nnrti.1000_new),NA,art$days_from_second_start_to_vl_failure_nnrti.1000) art$overall_failure_on_second_line_nnrti_new <- ifelse(!is.na(art$year_gap_date) & !is.na(art$date_failure_on_second_line_nnrti) & art$date_failure_on_second_line_nnrti > art$year_gap_date,0,art$overall_failure_on_second_line_nnrti) art$overall_failure_on_second_line_nnrti_new.factor <- factor(art$overall_failure_on_second_line_nnrti_new, levels=c(0,1), labels=c('No','Yes')) art$date_failure_on_second_line_nnrti_new <- ifelse(!is.na(art$year_gap_date) & !is.na(art$date_failure_on_second_line_nnrti) & art$date_failure_on_second_line_nnrti > art$year_gap_date,NA,art$date_failure_on_second_line_nnrti) art$date_failure_on_second_line_nnrti_new <- as.Date(art$date_failure_on_second_line_nnrti_new, origin='1970-01-01') art$days_from_haart_start_to_vl_failure_nnrti_new <- ifelse(is.na(art$date_failure_on_second_line_nnrti_new),NA,art$days_from_haart_start_to_vl_failure_nnrti) art$days_from_second_start_to_vl_failure_nnrti_new <- ifelse(is.na(art$date_failure_on_second_line_nnrti_new),NA,art$days_from_second_start_to_vl_failure_nnrti) @ <>= #-----------------------------------------------------# # Assessing virologic failure in RCT subjects # #-----------------------------------------------------# # Either criteria for switch (BPI to BPI or NNRTI to BPI) rct_vl_failure_all <- virologic_failure_function(switch='all',sub_rct_rna.df,detectable_level=400) # fail.1000 is the overall failure marker now, not fail. sub_rct_art.df$overall_failure_on_second_line.1000 <- rct_vl_failure_all[match(sub_rct_art.df$unique_id,rct_vl_failure_all$unique_id,nomatch=NA),'vl_failure.1000'] sub_rct_art.df$overall_failure_on_second_line.1000 <- ifelse(is.na(sub_rct_art.df$overall_failure_on_second_line.1000),0,sub_rct_art.df$overall_failure_on_second_line.1000) sub_rct_art.df$overall_failure_on_second_line.1000.factor <- factor(sub_rct_art.df$overall_failure_on_second_line.1000, levels=c(0,1), labels=c('No','Yes')) sub_rct_art.df$days_from_second_start_to_vl_failure.1000 <- rct_vl_failure_all[match(sub_rct_art.df$unique_id,rct_vl_failure_all$unique_id,nomatch=NA),'days_from_second_start_to_vl_failure.1000'] sub_rct_art.df$date_failure_on_second_line.1000 <- rct_vl_failure_all[match(sub_rct_art.df$unique_id,rct_vl_failure_all$unique_id,nomatch=NA),'date_vl_failure.1000'] sub_rct_art.df$days_from_haart_start_to_vl_failure.1000 <- as.numeric(difftime(sub_rct_art.df$date_failure_on_second_line.1000,sub_rct_art.df$date_fhaart,units='days')) sub_rct_art.df$overall_failure_on_second_line <- rct_vl_failure_all[match(sub_rct_art.df$unique_id,rct_vl_failure_all$unique_id,nomatch=NA),'vl_failure'] sub_rct_art.df$overall_failure_on_second_line <- ifelse(is.na(sub_rct_art.df$overall_failure_on_second_line),0,sub_rct_art.df$overall_failure_on_second_line) sub_rct_art.df$overall_failure_on_second_line.factor <- factor(sub_rct_art.df$overall_failure_on_second_line, levels=c(0,1), labels=c('No','Yes')) sub_rct_art.df$days_from_second_start_to_vl_failure <- rct_vl_failure_all[match(sub_rct_art.df$unique_id,rct_vl_failure_all$unique_id,nomatch=NA),'days_from_second_start_to_vl_failure'] sub_rct_art.df$date_failure_on_second_line <- rct_vl_failure_all[match(sub_rct_art.df$unique_id,rct_vl_failure_all$unique_id,nomatch=NA),'date_vl_failure'] sub_rct_art.df$days_from_haart_start_to_vl_failure <- as.numeric(difftime(sub_rct_art.df$date_failure_on_second_line,sub_rct_art.df$date_fhaart,units='days')) sub_rct_art.df$overall_failure_on_second_line.1000_new <- ifelse(!is.na(sub_rct_art.df$year_gap_date) & !is.na(sub_rct_art.df$date_failure_on_second_line.1000) & sub_rct_art.df$date_failure_on_second_line.1000 > sub_rct_art.df$year_gap_date,0,sub_rct_art.df$overall_failure_on_second_line.1000) sub_rct_art.df$overall_failure_on_second_line.1000_new.factor <- factor(sub_rct_art.df$overall_failure_on_second_line.1000_new, levels=c(0,1), labels=c('No','Yes')) sub_rct_art.df$date_failure_on_second_line.1000_new <- ifelse(!is.na(sub_rct_art.df$date_failure_on_second_line.1000) & !is.na(sub_rct_art.df$year_gap_date) & sub_rct_art.df$date_failure_on_second_line.1000 > sub_rct_art.df$year_gap_date,NA,sub_rct_art.df$date_failure_on_second_line.1000) sub_rct_art.df$date_failure_on_second_line.1000_new <- as.Date(sub_rct_art.df$date_failure_on_second_line.1000_new, origin='1970-01-01') sub_rct_art.df$days_from_second_start_to_vl_failure.1000_new <- ifelse(is.na(sub_rct_art.df$date_failure_on_second_line.1000_new),NA,sub_rct_art.df$days_from_second_start_to_vl_failure.1000) sub_rct_art.df$days_from_haart_start_to_vl_failure.1000_new <- ifelse(is.na(sub_rct_art.df$date_failure_on_second_line.1000_new),NA,sub_rct_art.df$days_from_haart_start_to_vl_failure.1000) sub_rct_art.df$overall_failure_on_second_line_new <- ifelse(!is.na(sub_rct_art.df$year_gap_date) & !is.na(sub_rct_art.df$date_failure_on_second_line) & sub_rct_art.df$date_failure_on_second_line > sub_rct_art.df$year_gap_date,0,sub_rct_art.df$overall_failure_on_second_line) sub_rct_art.df$overall_failure_on_second_line_new.factor <- factor(sub_rct_art.df$overall_failure_on_second_line_new, levels=c(0,1), labels=c('No','Yes')) sub_rct_art.df$date_failure_on_second_line_new <- ifelse(!is.na(sub_rct_art.df$date_failure_on_second_line) & !is.na(sub_rct_art.df$year_gap_date) & sub_rct_art.df$date_failure_on_second_line > sub_rct_art.df$year_gap_date,NA,sub_rct_art.df$date_failure_on_second_line) sub_rct_art.df$date_failure_on_second_line_new <- as.Date(sub_rct_art.df$date_failure_on_second_line_new, origin='1970-01-01') sub_rct_art.df$days_from_second_start_to_vl_failure_new <- ifelse(is.na(sub_rct_art.df$date_failure_on_second_line_new),NA,sub_rct_art.df$days_from_second_start_to_vl_failure) sub_rct_art.df$days_from_haart_start_to_vl_failure_new <- ifelse(is.na(sub_rct_art.df$date_failure_on_second_line_new),NA,sub_rct_art.df$days_from_haart_start_to_vl_failure) # Checking ot see how many failures during month gap sub_rct_art.df$failure_during_gap <- apply(subset(sub_rct_art.df, select=c(month_gap,month_gap_start,month_gap_end,date_failure_on_second_line.1000,date_failure_on_second_line)),1,FUN=function(y){ if(y['month_gap'] == 1){ if(!is.na(y['date_failure_on_second_line.1000']) & y['date_failure_on_second_line.1000'] >= y['month_gap_start'] & y['date_failure_on_second_line.1000'] <= y['month_gap_end']){ failure_during_gap <- 1 } else { failure_during_gap <- 0 } } else { failure_during_gap <- NA } }) sub_rct_art.df$failure_on_art.1000 <- ifelse(sub_rct_art.df$date_failure_on_second_line.1000 >= sub_rct_art.df$art_sd & sub_rct_art.df$date_failure_on_second_line.1000 <= sub_rct_art.df$art_ed,1,0) rct_stuff <- table(sub_rct_art.df$failure_on_art.1000,sub_rct_art.df$month_gap) # Only those who had NNRTI to BPI as in Africa rct_vl_failure_nnrti <- virologic_failure_function(switch='nnrti',sub_rct_rna.df,detectable_level=400) # fail.1000 is the overall failure marker now, not fail. sub_rct_art.df$overall_failure_on_second_line_nnrti.1000 <- rct_vl_failure_nnrti[match(sub_rct_art.df$unique_id,rct_vl_failure_nnrti$unique_id,nomatch=NA),'vl_failure.1000'] sub_rct_art.df$overall_failure_on_second_line_nnrti.1000 <- ifelse(is.na(sub_rct_art.df$overall_failure_on_second_line_nnrti.1000),0,sub_rct_art.df$overall_failure_on_second_line_nnrti.1000) sub_rct_art.df$overall_failure_on_second_line_nnrti.1000.factor <- factor(sub_rct_art.df$overall_failure_on_second_line_nnrti.1000, levels=c(0,1), labels=c('No','Yes')) sub_rct_art.df$days_from_second_start_to_vl_failure_nnrti.1000 <- rct_vl_failure_nnrti[match(sub_rct_art.df$unique_id,rct_vl_failure_nnrti$unique_id,nomatch=NA),'days_from_second_start_to_vl_failure.1000'] sub_rct_art.df$date_failure_on_second_line_nnrti.1000 <- rct_vl_failure_nnrti[match(sub_rct_art.df$unique_id,rct_vl_failure_nnrti$unique_id,nomatch=NA),'date_vl_failure.1000'] sub_rct_art.df$days_from_haart_start_to_vl_failure_nnrti.1000 <- as.numeric(difftime(sub_rct_art.df$date_failure_on_second_line_nnrti.1000,sub_rct_art.df$date_fhaart,units='days')) sub_rct_art.df$overall_failure_on_second_line_nnrti <- rct_vl_failure_nnrti[match(sub_rct_art.df$unique_id,rct_vl_failure_nnrti$unique_id,nomatch=NA),'vl_failure'] sub_rct_art.df$overall_failure_on_second_line_nnrti <- ifelse(is.na(sub_rct_art.df$overall_failure_on_second_line_nnrti),0,sub_rct_art.df$overall_failure_on_second_line_nnrti) sub_rct_art.df$overall_failure_on_second_line_nnrti.factor <- factor(sub_rct_art.df$overall_failure_on_second_line_nnrti, levels=c(0,1), labels=c('No','Yes')) sub_rct_art.df$days_from_second_start_to_vl_failure_nnrti <- rct_vl_failure_nnrti[match(sub_rct_art.df$unique_id,rct_vl_failure_nnrti$unique_id,nomatch=NA),'days_from_second_start_to_vl_failure'] sub_rct_art.df$date_failure_on_second_line_nnrti <- rct_vl_failure_nnrti[match(sub_rct_art.df$unique_id,rct_vl_failure_nnrti$unique_id,nomatch=NA),'date_vl_failure'] sub_rct_art.df$days_from_haart_start_to_vl_failure_nnrti <- as.numeric(difftime(sub_rct_art.df$date_failure_on_second_line_nnrti,sub_rct_art.df$date_fhaart,units='days')) sub_rct_art.df$overall_failure_on_second_line_nnrti.1000_new <- ifelse(!is.na(sub_rct_art.df$year_gap_date) & !is.na(sub_rct_art.df$date_failure_on_second_line_nnrti.1000) & sub_rct_art.df$date_failure_on_second_line_nnrti.1000 > sub_rct_art.df$year_gap_date,0,sub_rct_art.df$overall_failure_on_second_line_nnrti.1000) sub_rct_art.df$overall_failure_on_second_line_nnrti.1000_new.factor <- factor(sub_rct_art.df$overall_failure_on_second_line_nnrti.1000_new, levels=c(0,1), labels=c('No','Yes')) sub_rct_art.df$date_failure_on_second_line_nnrti.1000_new <- ifelse(!is.na(sub_rct_art.df$year_gap_date) & !is.na(sub_rct_art.df$date_failure_on_second_line_nnrti.1000) & sub_rct_art.df$date_failure_on_second_line_nnrti.1000 > sub_rct_art.df$year_gap_date,NA,sub_rct_art.df$date_failure_on_second_line_nnrti.1000) sub_rct_art.df$date_failure_on_second_line_nnrti.1000_new <- as.Date(sub_rct_art.df$date_failure_on_second_line_nnrti.1000_new, origin='1970-01-01') sub_rct_art.df$days_from_haart_start_to_vl_failure_nnrti.1000_new <- ifelse(is.na(sub_rct_art.df$date_failure_on_second_line_nnrti.1000_new),NA,sub_rct_art.df$days_from_haart_start_to_vl_failure_nnrti.1000) sub_rct_art.df$days_from_second_start_to_vl_failure_nnrti.1000_new <- ifelse(is.na(sub_rct_art.df$date_failure_on_second_line_nnrti.1000_new),NA,sub_rct_art.df$days_from_second_start_to_vl_failure_nnrti.1000) sub_rct_art.df$overall_failure_on_second_line_nnrti_new <- ifelse(!is.na(sub_rct_art.df$year_gap_date) & !is.na(sub_rct_art.df$date_failure_on_second_line_nnrti) & sub_rct_art.df$date_failure_on_second_line_nnrti > sub_rct_art.df$year_gap_date,0,sub_rct_art.df$overall_failure_on_second_line_nnrti) sub_rct_art.df$overall_failure_on_second_line_nnrti_new.factor <- factor(sub_rct_art.df$overall_failure_on_second_line_nnrti_new, levels=c(0,1), labels=c('No','Yes')) sub_rct_art.df$date_failure_on_second_line_nnrti_new <- ifelse(!is.na(sub_rct_art.df$year_gap_date) & !is.na(sub_rct_art.df$date_failure_on_second_line_nnrti) & sub_rct_art.df$date_failure_on_second_line_nnrti > sub_rct_art.df$year_gap_date,NA,sub_rct_art.df$date_failure_on_second_line_nnrti) sub_rct_art.df$date_failure_on_second_line_nnrti_new <- as.Date(sub_rct_art.df$date_failure_on_second_line_nnrti_new, origin='1970-01-01') sub_rct_art.df$days_from_haart_start_to_vl_failure_nnrti_new <- ifelse(is.na(sub_rct_art.df$date_failure_on_second_line_nnrti_new),NA,sub_rct_art.df$days_from_haart_start_to_vl_failure_nnrti) sub_rct_art.df$days_from_second_start_to_vl_failure_nnrti_new <- ifelse(is.na(sub_rct_art.df$date_failure_on_second_line_nnrti_new),NA,sub_rct_art.df$days_from_second_start_to_vl_failure_nnrti) @ <>= #----------------------------------# # Adding in info to ART data # #----------------------------------# art$clinicaltrial_y <- basic[match(art$unique_id,basic$unique_id,nomatch=NA),'clinicaltrial_y'] art$overall_third_line_regimen <- all_visits[match(art$unique_id,all_visits$unique_id,nomatch=NA),'overall_third_line_regimen'] art$male <- all_visits[match(art$unique_id,all_visits$unique_id,nomatch=NA),'male'] art$male.factor <- factor(art$male, levels=c(0,1), labels=c('Female','Male')) art$baseline_clinical_stage_new <- all_visits[match(art$unique_id,all_visits$unique_id,nomatch=NA),'baseline_clinical_stage_new'] art$aids_at_fhaart <- all_visits[match(art$unique_id,all_visits$unique_id,nomatch=NA),'aids_at_fhaart'] art$aids_at_fhaart.factor <- factor(art$aids_at_fhaart, levels=c(0,1),labels=c('Not AIDS','AIDS')) art$baseline_cd4 <- all_visits[match(art$unique_id,all_visits$unique_id,nomatch=NA),'baseline_cd4'] art$baseline_log_rna <- all_visits[match(art$unique_id,all_visits$unique_id,nomatch=NA),'baseline_log_rna'] art$site.factor <- factor(art$site) art$overall_death_indicator.factor <- all_visits[match(art$unique_id,all_visits$unique_id,nomatch=NA),'overall_death_indicator.factor'] art$fhaart <- all_visits[match(art$unique_id,all_visits$unique_id,nomatch=NA),'fhaart'] art$fhaart.factor <- factor(art$fhaart) art$transmission_risk_cat.factor <- all_visits[match(art$unique_id,all_visits$unique_id,nomatch=NA),'transmission_risk_cat.factor'] art$transmission_risk_larger_cat.factor <- all_visits[match(art$unique_id,all_visits$unique_id,nomatch=NA),'transmission_risk_larger_cat.factor'] art$transmission_risk <- all_visits[match(art$unique_id,all_visits$unique_id,nomatch=NA),'transmission_risk'] art$transmission_risk <- factor(art$transmission_risk) art$all_patients <- 1 tmp_2nd_line <- subset(art, clinicaltrial_y == 0 & !duplicated(unique_id)) tmp_2nd_line$overall_second_line.factor <- factor(tmp_2nd_line$overall_second_line, levels=c(0,1), labels=c('No 2nd line regimen','2nd line regimen')) tmp_2nd_line$overall_third_line_regimen.factor <- factor(tmp_2nd_line$overall_third_line_regimen, levels=c(0,1), labels=c('No','Yes')) tmp_2nd_line_b <- subset(tmp_2nd_line, overall_failure_on_second_line.1000 == 1) @ <>= # Repeating above in RCT subjects #----------------------------------# # Adding in info to ART data # #----------------------------------# sub_rct_art.df$clinicaltrial_y <- sub_rct_basic.df[match(sub_rct_art.df$unique_id,sub_rct_basic.df$unique_id,nomatch=NA),'clinicaltrial_y'] sub_rct_art.df$overall_third_line_regimen <- rct_all_visits[match(sub_rct_art.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'overall_third_line_regimen'] sub_rct_art.df$male <- rct_all_visits[match(sub_rct_art.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'male'] sub_rct_art.df$male.factor <- factor(sub_rct_art.df$male, levels=c(0,1), labels=c('Female','Male')) sub_rct_art.df$baseline_clinical_stage_new <- rct_all_visits[match(sub_rct_art.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'baseline_clinical_stage_new'] sub_rct_art.df$aids_at_fhaart <- rct_all_visits[match(sub_rct_art.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'aids_at_fhaart'] sub_rct_art.df$aids_at_fhaart.factor <- factor(sub_rct_art.df$aids_at_fhaart, levels=c(0,1),labels=c('Not AIDS','AIDS')) sub_rct_art.df$baseline_cd4 <- rct_all_visits[match(sub_rct_art.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'baseline_cd4'] sub_rct_art.df$baseline_log_rna <- rct_all_visits[match(sub_rct_art.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'baseline_log_rna'] sub_rct_art.df$site.factor <- factor(sub_rct_art.df$site) sub_rct_art.df$overall_death_indicator.factor <- rct_all_visits[match(sub_rct_art.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'overall_death_indicator.factor'] sub_rct_art.df$fhaart <- rct_all_visits[match(sub_rct_art.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'fhaart'] sub_rct_art.df$fhaart.factor <- factor(sub_rct_art.df$fhaart) sub_rct_art.df$transmission_risk_cat.factor <- rct_all_visits[match(sub_rct_art.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'transmission_risk_cat.factor'] sub_rct_art.df$transmission_risk_larger_cat.factor <- rct_all_visits[match(sub_rct_art.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'transmission_risk_larger_cat.factor'] sub_rct_art.df$transmission_risk <- rct_all_visits[match(sub_rct_art.df$unique_id,rct_all_visits$unique_id,nomatch=NA),'transmission_risk'] sub_rct_art.df$transmission_risk <- factor(sub_rct_art.df$transmission_risk) sub_rct_art.df$all_patients <- 1 rct_tmp_2nd_line <- subset(sub_rct_art.df,!duplicated(unique_id)) rct_tmp_2nd_line$overall_second_line.factor <- factor(rct_tmp_2nd_line$overall_second_line, levels=c(0,1), labels=c('No 2nd line regimen','2nd line regimen')) rct_tmp_2nd_line$overall_third_line_regimen.factor <- factor(rct_tmp_2nd_line$overall_third_line_regimen, levels=c(0,1), labels=c('No','Yes')) rct_tmp_2nd_line_b <- subset(rct_tmp_2nd_line, overall_failure_on_second_line.1000 == 1) @ \subsection{Time to event analysis} %------------------------------------------------------------------------------------------------% % Time-to-event analysis % %------------------------------------------------------------------------------------------------% <>= # Need to add appropriate variables to all_visits in order to calculate the first endpoint all_visits$min_second_line_start_date_bpi_or_nnrti <- art[match(all_visits$unique_id, art$unique_id, nomatch=NA),'min_second_line_start_date_bpi_or_nnrti'] all_visits$age_at_second_haart <- art[match(all_visits$unique_id, art$unique_id, nomatch=NA),'age_at_second_haart'] all_visits$year_second_haart <- art[match(all_visits$unique_id, art$unique_id, nomatch=NA),'year_second_haart'] all_visits$second_haart_cd4 <- cd4[match(all_visits$unique_id, cd4$unique_id, nomatch=NA),'second_haart_cd4'] all_visits$second_haart_log10_rna <- rna[match(all_visits$unique_id, rna$unique_id, nomatch=NA),'second_haart_log10_rna'] all_visits$third_line_regimen_date_new <- ifelse(!is.na(all_visits$year_gap_date) & !is.na(all_visits$third_line_regimen_date) & all_visits$third_line_regimen_date > all_visits$year_gap_date,NA,all_visits$third_line_regimen_date) all_visits$third_line_regimen_date_new <- as.Date(all_visits$third_line_regimen_date_new, origin='1970-01-01') all_visits$overall_third_line_regimen_new <- ifelse(is.na(all_visits$third_line_regimen_date_new),0,1) main_mgmt <- t2evt_data_mgmt_function(all_visits,tmp_2nd_line,nnrti_ids) all_visits <- main_mgmt[['all_visits']] d <- main_mgmt[['d']] d.1000 <- main_mgmt[['d.1000']] d_nnrti <- main_mgmt[['d_nnrti']] d_nnrti.1000 <- main_mgmt[['d_nnrti.1000']] d.1000.bf.0.fu <- main_mgmt[['d.1000.bf.0.fu']] d.bf.0.fu <- main_mgmt[['d.bf.0.fu']] fu.1000.bf.0 <- main_mgmt[['fu.1000.bf.0']] fu.bf.0 <- main_mgmt[['fu.bf.0']] d_nnrti.1000.bf.0.fu <- main_mgmt[['d_nnrti.1000.bf.0.fu']] fu_nnrti.1000.bf.0 <- main_mgmt[['fu_nnrti.1000.bf.0']] rct_all_visits$min_second_line_start_date_bpi_or_nnrti <- sub_rct_art.df[match(rct_all_visits$unique_id, sub_rct_art.df$unique_id, nomatch=NA),'min_second_line_start_date_bpi_or_nnrti'] rct_all_visits$age_at_second_haart <- sub_rct_art.df[match(rct_all_visits$unique_id, sub_rct_art.df$unique_id, nomatch=NA),'age_at_second_haart'] rct_all_visits$year_second_haart <- sub_rct_art.df[match(rct_all_visits$unique_id, sub_rct_art.df$unique_id, nomatch=NA),'year_second_haart'] rct_all_visits$second_haart_cd4 <- sub_rct_cd4.df[match(rct_all_visits$unique_id, sub_rct_cd4.df$unique_id, nomatch=NA),'second_haart_cd4'] rct_all_visits$second_haart_log10_rna <- sub_rct_rna.df[match(rct_all_visits$unique_id, sub_rct_rna.df$unique_id, nomatch=NA),'second_haart_log10_rna'] rct_all_visits$third_line_regimen_date_new <- ifelse(!is.na(rct_all_visits$year_gap_date) & !is.na(rct_all_visits$third_line_regimen_date) & rct_all_visits$third_line_regimen_date > rct_all_visits$year_gap_date,NA,rct_all_visits$third_line_regimen_date) rct_all_visits$third_line_regimen_date_new <- as.Date(rct_all_visits$third_line_regimen_date_new, origin='1970-01-01') rct_all_visits$overall_third_line_regimen_new <- ifelse(is.na(rct_all_visits$third_line_regimen_date_new),0,1) rct_mgmt <- t2evt_data_mgmt_function(rct_all_visits,rct_tmp_2nd_line,rct_nnrti_ids) rct_all_visits <- rct_mgmt[['all_visits']] rct_d <- rct_mgmt[['d']] rct_d.1000 <- rct_mgmt[['d.1000']] rct_d_nnrti <- rct_mgmt[['d_nnrti']] rct_d_nnrti.1000 <- rct_mgmt[['d_nnrti.1000']] @ <>= # Combining all_visits and rct_all_visits all_visits$clinical_trial_id <- 0 rct_all_visits$clinical_trial_id <- 1 all_visits_p_rct <- rbind(all_visits, rct_all_visits) d.1000$clinical_trial_id <- 0 rct_d.1000$clinical_trial_id <- 1 d.1000_p_rct <- rbind(d.1000,rct_d.1000) # Then subsetting out of d.1000 those who had 0 followup when 2nd line regimen is the start date d.1000_2nd_start <- subset(d.1000, total_followup_2nd_start.1000 > 0) @ \subsubsection{Ignoring any gaps in viral load measurements (Original analysis)} \begin{figure} \caption{Incidence of failing a second line or starting a 3rd line regimen.}\label{fig:orig.by.analysis} <>= cum.inc.first <- cuminc(ftime=d$total_followup, fstatus=d$censor, cencode='0',rho=0) cum.inc.first.1000 <- cuminc(ftime=d.1000$total_followup.1000, fstatus=d.1000$censor.1000, cencode='0',rho=0) cum.inc.first.nnrti <- cuminc(ftime=d_nnrti$total_followup_nnrti, fstatus=d_nnrti$censor.nnrti, cencode='0',rho=0) cum.inc.first.nnrti.1000 <- cuminc(ftime=d_nnrti.1000$total_followup_nnrti.1000, fstatus=d_nnrti.1000$censor.nnrti.1000, cencode='0',rho=0) cum.inc.first.1000.p.rct <- cuminc(ftime=d.1000_p_rct$total_followup.1000, fstatus=d.1000_p_rct$censor.1000, cencode='0',rho=0) cum.inc.first.1000.2nd_start <- cuminc(ftime=d.1000_2nd_start$total_followup_2nd_start.1000, fstatus=d.1000_2nd_start$censor.1000, cencode='0',rho=0) y.rge <- range(c(cum.inc.first[[1]]$est[which(cum.inc.first[[1]]$time <= 7.0)],cum.inc.first.1000[[1]]$est[which(cum.inc.first.1000[[1]]$time <= 7.0)], cum.inc.first.nnrti[[1]]$est[which(cum.inc.first.nnrti[[1]]$time <= 7.0)],cum.inc.first.nnrti.1000[[1]]$est[which(cum.inc.first.nnrti.1000[[1]]$time <= 7.0)])) y2.rge <- range(c(cum.inc.first[[1]]$est[which(cum.inc.first[[1]]$time <= 7.0)],cum.inc.first.1000[[1]]$est[which(cum.inc.first.1000[[1]]$time <= 7.0)], cum.inc.first.nnrti[[1]]$est[which(cum.inc.first.nnrti[[1]]$time <= 7.0)],cum.inc.first.nnrti.1000[[1]]$est[which(cum.inc.first.nnrti.1000[[1]]$time <= 7.0)], cum.inc.first.1000.p.rct[[1]]$est[which(cum.inc.first.1000.p.rct[[1]]$time <= 7.0)])) y.rge.2nd_start <- range(cum.inc.first.1000.2nd_start[[1]]$est[which(cum.inc.first.1000.2nd_start[[1]]$time <= 7.0)]) # pdf('Figure1_thirdLine.pdf') par(mfrow=c(1,1),mar=c(4,4,1,1),oma=c(1,1,1,1)) plot(cum.inc.first[[1]]$est[which(cum.inc.first[[1]]$time <= 7.0)] ~ cum.inc.first[[1]]$time[which(cum.inc.first[[1]]$time <= 7.0)], type='l',axes=FALSE, xlab='Years from HAART initiation',ylab='Cumulative incidence',ylim=y2.rge,lty=2) lines(cum.inc.first.1000[[1]]$est[which(cum.inc.first.1000[[1]]$time <= 7.0)] ~ cum.inc.first.1000[[1]]$time[which(cum.inc.first.1000[[1]]$time <= 7.0)],col='black') lines(cum.inc.first.1000.p.rct[[1]]$est[which(cum.inc.first.1000.p.rct[[1]]$time <= 7.0)] ~ cum.inc.first.1000.p.rct[[1]]$time[which(cum.inc.first.1000.p.rct[[1]]$time <= 7.0)],lty=3) axis(1) axis(2) box(bty='l') legend('topleft',legend=c('Primary 2nd line failure definition','Ignoring VL>1000 criteria','Including RCT subjects'),lty=c(1,2,3),bty='n',cex=0.75) @ \end{figure} \begin{figure} \caption{ Incidence of failing a second line or starting a 3rd line regimen by site.}\label{fig:orig.by.site} <>= cum.inc.argentina <- cuminc(ftime=d.1000$total_followup.1000[which(d.1000$site.factor == 'argentina')], fstatus=d.1000$censor.1000[which(d.1000$site.factor == 'argentina')], cencode='0',rho=0) cum.inc.brazil <- cuminc(ftime=d.1000$total_followup.1000[which(d.1000$site.factor == 'brazil')], fstatus=d.1000$censor.1000[which(d.1000$site.factor == 'brazil')], cencode='0',rho=0) cum.inc.honduras <- cuminc(ftime=d.1000$total_followup.1000[which(d.1000$site.factor == 'honduras')], fstatus=d.1000$censor.1000[which(d.1000$site.factor == 'honduras')], cencode='0',rho=0) cum.inc.mexico <- cuminc(ftime=d.1000$total_followup.1000[which(d.1000$site.factor == 'mexico')], fstatus=d.1000$censor.1000[which(d.1000$site.factor == 'mexico')], cencode='0',rho=0) cum.inc.peru <- cuminc(ftime=d.1000$total_followup.1000[which(d.1000$site.factor == 'peru')], fstatus=d.1000$censor.1000[which(d.1000$site.factor == 'peru')], cencode='0',rho=0) y.rge.site <- range(c(cum.inc.argentina[[1]]$est[which(cum.inc.argentina[[1]]$time <= 7.0)],cum.inc.brazil[[1]]$est[which(cum.inc.brazil[[1]]$time <= 7.0)], cum.inc.honduras[[1]]$est[which(cum.inc.honduras[[1]]$time <= 7.0)],cum.inc.mexico[[1]]$est[which(cum.inc.mexico[[1]]$time <= 7.0)], cum.inc.peru[[1]]$est[which(cum.inc.peru[[1]]$time <= 7.0)])) par(mfrow=c(1,1),mar=c(4,4,1,1),oma=c(1,1,1,1)) plot(cum.inc.argentina[[1]]$est[which(cum.inc.argentina[[1]]$time <= 7.0)] ~ cum.inc.argentina[[1]]$time[which(cum.inc.argentina[[1]]$time <= 7.0)], type='l',axes=FALSE, xlab='Years from HAART initiation',ylab='Cumulative incidence',ylim=y.rge,lty=1) lines(cum.inc.brazil[[1]]$est[which(cum.inc.brazil[[1]]$time <= 7.0)] ~ cum.inc.brazil[[1]]$time[which(cum.inc.brazil[[1]]$time <= 7.0)],lty=2) lines(cum.inc.honduras[[1]]$est[which(cum.inc.honduras[[1]]$time <= 7.0)] ~ cum.inc.honduras[[1]]$time[which(cum.inc.honduras[[1]]$time <= 7.0)],lty=4) lines(cum.inc.mexico[[1]]$est[which(cum.inc.mexico[[1]]$time <= 7.0)] ~ cum.inc.mexico[[1]]$time[which(cum.inc.mexico[[1]]$time <= 7.0)],lty=5) lines(cum.inc.peru[[1]]$est[which(cum.inc.peru[[1]]$time <= 7.0)] ~ cum.inc.peru[[1]]$time[which(cum.inc.peru[[1]]$time <= 7.0)],lty=6) axis(1) axis(2) box(bty='l') legend('topleft',legend=c('Argentina','Brazil','Honduras','Mexico','Peru'),lty=c(1,2,4,5,6),bty='n',cex=0.75) @ \end{figure} \begin{figure} \caption{Cumulative incidence using the start of a second line regimen as the baseline.}\label{fig:orig.by.2nd} <>= par(mfrow=c(1,1),mar=c(4,4,1,1),oma=c(1,1,1,1)) plot(cum.inc.first.1000.2nd_start[[1]]$est[which(cum.inc.first.1000.2nd_start[[1]]$time <= 7.0)] ~ cum.inc.first.1000.2nd_start[[1]]$time[which(cum.inc.first.1000.2nd_start[[1]]$time <= 7.0)], type='l',axes=FALSE, xlab='Years from HAART initiation',ylab='Cumulative incidence',ylim=y.rge.2nd_start,lty=1) axis(1) axis(2) box(bty='l') @ \end{figure} <>= # Estimated incidence and 95\% CI in composite endpoint inc_2.1000 <- cum.inc.first.1000[[1]]$est[which(round(cum.inc.first.1000[[1]]$time,0) == 2)][1] se_2.1000 <- sqrt(cum.inc.first.1000[[1]]$var[which(round(cum.inc.first.1000[[1]]$time,0) == 2)][1]) ci_2.1000 <- paste('(',round((inc_2.1000 - qnorm(0.975)*se_2.1000),4),', ', round((inc_2.1000 + qnorm(0.975)*se_2.1000),4),')',sep='') inc_3.1000 <- cum.inc.first.1000[[1]]$est[which(round(cum.inc.first.1000[[1]]$time,0) == 3)][1] se_3.1000 <- sqrt(cum.inc.first.1000[[1]]$var[which(round(cum.inc.first.1000[[1]]$time,0) == 3)][1]) ci_3.1000 <- paste('(',round((inc_3.1000 - qnorm(0.975)*se_3.1000),4),', ', round((inc_3.1000 + qnorm(0.975)*se_3.1000),4),')',sep='') inc_5.1000 <- cum.inc.first.1000[[1]]$est[which(round(cum.inc.first.1000[[1]]$time,0) == 5)][1] se_5.1000 <- sqrt(cum.inc.first.1000[[1]]$var[which(round(cum.inc.first.1000[[1]]$time,0) == 5)][1]) ci_5.1000 <- paste('(',round((inc_5.1000 - qnorm(0.975)*se_5.1000),4),', ', round((inc_5.1000 + qnorm(0.975)*se_5.1000),4),')',sep='') inc_7.1000 <- cum.inc.first.1000[[1]]$est[which(round(cum.inc.first.1000[[1]]$time,0) == 7)][1] se_7.1000 <- sqrt(cum.inc.first.1000[[1]]$var[which(round(cum.inc.first.1000[[1]]$time,0) == 7)][1]) ci_7.1000 <- paste('(',round((inc_7.1000 - qnorm(0.975)*se_7.1000),4),', ', round((inc_7.1000 + qnorm(0.975)*se_7.1000),4),')',sep='') inc_2_nnrti.1000 <- cum.inc.first.nnrti.1000[[1]]$est[which(round(cum.inc.first.nnrti.1000[[1]]$time,0) == 2)][1] se_2_nnrti.1000 <- sqrt(cum.inc.first.nnrti.1000[[1]]$var[which(round(cum.inc.first.nnrti.1000[[1]]$time,0) == 2)][1]) ci_2_nnrti.1000 <- paste('(',round((inc_2_nnrti.1000 - qnorm(0.975)*se_2_nnrti.1000),4),', ', round((inc_2_nnrti.1000 + qnorm(0.975)*se_2_nnrti.1000),4),')',sep='') inc_3_nnrti.1000 <- cum.inc.first.nnrti.1000[[1]]$est[which(round(cum.inc.first.nnrti.1000[[1]]$time,0) == 3)][1] se_3_nnrti.1000 <- sqrt(cum.inc.first.nnrti.1000[[1]]$var[which(round(cum.inc.first.nnrti.1000[[1]]$time,0) == 3)][1]) ci_3_nnrti.1000 <- paste('(',round((inc_3_nnrti.1000 - qnorm(0.975)*se_3_nnrti.1000),4),', ', round((inc_3_nnrti.1000 + qnorm(0.975)*se_3_nnrti.1000),4),')',sep='') inc_5_nnrti.1000 <- cum.inc.first.nnrti.1000[[1]]$est[which(round(cum.inc.first.nnrti.1000[[1]]$time,0) == 5)][1] se_5_nnrti.1000 <- sqrt(cum.inc.first.nnrti.1000[[1]]$var[which(round(cum.inc.first.nnrti.1000[[1]]$time,0) == 5)][1]) ci_5_nnrti.1000 <- paste('(',round((inc_5_nnrti.1000 - qnorm(0.975)*se_5_nnrti.1000),4),', ', round((inc_5_nnrti.1000 + qnorm(0.975)*se_5_nnrti.1000),4),')',sep='') inc_7_nnrti.1000 <- cum.inc.first.nnrti.1000[[1]]$est[which(round(cum.inc.first.nnrti.1000[[1]]$time,0) == 7)][1] se_7_nnrti.1000 <- sqrt(cum.inc.first.nnrti.1000[[1]]$var[which(round(cum.inc.first.nnrti.1000[[1]]$time,0) == 7)][1]) ci_7_nnrti.1000 <- paste('(',round((inc_7_nnrti.1000 - qnorm(0.975)*se_7_nnrti.1000),4),', ', round((inc_7_nnrti.1000 + qnorm(0.975)*se_7_nnrti.1000),4),')',sep='') @ <>= # Cumulative incidences for new start time at 1-5 years inc_1_2nd_start.1000 <- cum.inc.first.1000.2nd_start[[1]]$est[which(round(cum.inc.first.1000.2nd_start[[1]]$time,0) == 1)[1]] se_1_2nd_start.1000 <- sqrt(cum.inc.first.1000.2nd_start[[1]]$var[which(round(cum.inc.first.1000.2nd_start[[1]]$time,0) == 1)[1]]) ci_1_2nd_start.1000 <- paste('(',round((inc_1_2nd_start.1000 - qnorm(0.975)*se_1_2nd_start.1000),4),', ', round((inc_1_2nd_start.1000 + qnorm(0.975)*se_1_2nd_start.1000),4),')',sep='') inc_2_2nd_start.1000 <- cum.inc.first.1000.2nd_start[[1]]$est[which(round(cum.inc.first.1000.2nd_start[[1]]$time,0) == 2)[1]] se_2_2nd_start.1000 <- sqrt(cum.inc.first.1000.2nd_start[[1]]$var[which(round(cum.inc.first.1000.2nd_start[[1]]$time,0) == 2)[1]]) ci_2_2nd_start.1000 <- paste('(',round((inc_2_2nd_start.1000 - qnorm(0.975)*se_2_2nd_start.1000),4),', ', round((inc_2_2nd_start.1000 + qnorm(0.975)*se_2_2nd_start.1000),4),')',sep='') inc_3_2nd_start.1000 <- cum.inc.first.1000.2nd_start[[1]]$est[which(round(cum.inc.first.1000.2nd_start[[1]]$time,0) == 3)[1]] se_3_2nd_start.1000 <- sqrt(cum.inc.first.1000.2nd_start[[1]]$var[which(round(cum.inc.first.1000.2nd_start[[1]]$time,0) == 3)[1]]) ci_3_2nd_start.1000 <- paste('(',round((inc_3_2nd_start.1000 - qnorm(0.975)*se_3_2nd_start.1000),4),', ', round((inc_3_2nd_start.1000 + qnorm(0.975)*se_3_2nd_start.1000),4),')',sep='') inc_4_2nd_start.1000 <- cum.inc.first.1000.2nd_start[[1]]$est[which(round(cum.inc.first.1000.2nd_start[[1]]$time,0) == 4)[1]] se_4_2nd_start.1000 <- sqrt(cum.inc.first.1000.2nd_start[[1]]$var[which(round(cum.inc.first.1000.2nd_start[[1]]$time,0) == 4)[1]]) ci_4_2nd_start.1000 <- paste('(',round((inc_4_2nd_start.1000 - qnorm(0.975)*se_4_2nd_start.1000),4),', ', round((inc_4_2nd_start.1000 + qnorm(0.975)*se_4_2nd_start.1000),4),')',sep='') inc_5_2nd_start.1000 <- cum.inc.first.1000.2nd_start[[1]]$est[which(round(cum.inc.first.1000.2nd_start[[1]]$time,0) == 5)[1]] se_5_2nd_start.1000 <- sqrt(cum.inc.first.1000.2nd_start[[1]]$var[which(round(cum.inc.first.1000.2nd_start[[1]]$time,0) == 5)[1]]) ci_5_2nd_start.1000 <- paste('(',round((inc_5_2nd_start.1000 - qnorm(0.975)*se_5_2nd_start.1000),4),', ', round((inc_5_2nd_start.1000 + qnorm(0.975)*se_5_2nd_start.1000),4),')',sep='') @ <>= # Estimated incidence and 95\% CI in composite endpoint inc_2.1000.p.rct <- cum.inc.first.1000.p.rct[[1]]$est[which(round(cum.inc.first.1000.p.rct[[1]]$time,0) == 2)][1] se_2.1000.p.rct <- sqrt(cum.inc.first.1000.p.rct[[1]]$var[which(round(cum.inc.first.1000.p.rct[[1]]$time,0) == 2)][1]) ci_2.1000.p.rct <- paste('(',round((inc_2.1000.p.rct - qnorm(0.975)*se_2.1000.p.rct),4),', ', round((inc_2.1000.p.rct + qnorm(0.975)*se_2.1000.p.rct),4),')',sep='') inc_3.1000.p.rct <- cum.inc.first.1000.p.rct[[1]]$est[which(round(cum.inc.first.1000.p.rct[[1]]$time,0) == 3)][1] se_3.1000.p.rct <- sqrt(cum.inc.first.1000.p.rct[[1]]$var[which(round(cum.inc.first.1000.p.rct[[1]]$time,0) == 3)][1]) ci_3.1000.p.rct <- paste('(',round((inc_3.1000.p.rct - qnorm(0.975)*se_3.1000.p.rct),4),', ', round((inc_3.1000.p.rct + qnorm(0.975)*se_3.1000.p.rct),4),')',sep='') inc_5.1000.p.rct <- cum.inc.first.1000.p.rct[[1]]$est[which(round(cum.inc.first.1000.p.rct[[1]]$time,0) == 5)][1] se_5.1000.p.rct <- sqrt(cum.inc.first.1000.p.rct[[1]]$var[which(round(cum.inc.first.1000.p.rct[[1]]$time,0) == 5)][1]) ci_5.1000.p.rct <- paste('(',round((inc_5.1000.p.rct - qnorm(0.975)*se_5.1000.p.rct),4),', ', round((inc_5.1000.p.rct + qnorm(0.975)*se_5.1000.p.rct),4),')',sep='') inc_7.1000.p.rct <- cum.inc.first.1000.p.rct[[1]]$est[which(round(cum.inc.first.1000.p.rct[[1]]$time,0) == 7)][1] se_7.1000.p.rct <- sqrt(cum.inc.first.1000.p.rct[[1]]$var[which(round(cum.inc.first.1000.p.rct[[1]]$time,0) == 7)][1]) ci_7.1000.p.rct <- paste('(',round((inc_7.1000.p.rct - qnorm(0.975)*se_7.1000.p.rct),4),', ', round((inc_7.1000.p.rct + qnorm(0.975)*se_7.1000.p.rct),4),')',sep='') tbl_2nd_line <- with(subset(d.1000, !is.na(min_second_line_start_date_bpi_or_nnrti)),table(overall_third_line_regimen,overall_failure_on_second_line.1000)) followup.median.1000 <- format(round(median(d.1000$total_followup.1000),2),nsmall=2) followup.iqr.1000 <- format(round(quantile(d.1000$total_followup.1000,probs=c(0.25,0.75)),2),nsmall=2) @ <>= # Number of subjects still in follow-up at the end of each year and the # who experienced the event during the year # First ignoring 1000 requirement # Year 1 num_in_fu_1 <- length(which(d$total_followup > 1.0)) tbl_1 <- table(d$censor[which(d$total_followup <= 1.0)]) num_w_evt_1 <- tbl_1[2] num_w_cr_1 <- tbl_1[3] num_end_fu_1 <- tbl_1[1] for(i in 2:floor(max(d$total_followup))){ assign(x=paste('num_in_fu_',i,sep=''), value=length(which(d$total_followup > i))) tbl <- table(d$censor[which(d$total_followup <= i & d$total_followup > (i-1))]) tmp <- tbl[which(names(tbl) == '1')] if(length(tmp) == 0){ tmp <- 0 } assign(x=paste('num_w_evt_',i,sep=''), value=tmp) tmp <- tbl[which(names(tbl) == '2')] if(length(tmp) == 0){ tmp <- 0 } assign(x=paste('num_w_cr_',i,sep=''), value=tmp) tmp <- tbl[which(names(tbl) == '0')] if(length(tmp) == 0){ tmp <- 0 } assign(x=paste('num_end_fu_',i,sep=''), value=tmp) } # Next considering 1000 requirement # Year 1 num_in_fu_1000_1 <- length(which(d.1000$total_followup.1000 > 1.0)) tbl_1 <- table(d.1000$censor.1000[which(d.1000$total_followup.1000 <= 1.0)]) num_w_evt_1000_1 <- tbl_1[2] num_w_cr_1000_1 <- tbl_1[3] num_end_fu_1000_1 <- tbl_1[1] for(i in 2:floor(max(d.1000$total_followup.1000))){ assign(x=paste('num_in_fu_1000_',i,sep=''), value=length(which(d.1000$total_followup.1000 > i))) tbl <- table(d.1000$censor.1000[which(d.1000$total_followup.1000 <= i & d.1000$total_followup.1000 > (i-1))]) tmp <- tbl[which(names(tbl) == '1')] if(length(tmp) == 0){ tmp <- 0 } assign(x=paste('num_w_evt_1000_',i,sep=''), value=tmp) tmp <- tbl[which(names(tbl) == '2')] if(length(tmp) == 0){ tmp <- 0 } assign(x=paste('num_w_cr_1000_',i,sep=''), value=tmp) tmp <- tbl[which(names(tbl) == '0')] if(length(tmp) == 0){ tmp <- 0 } assign(x=paste('num_end_fu_1000_',i,sep=''), value=tmp) } fu_df <- data.frame('Year'=seq(1,12), 'Had event'=c(num_w_evt_1000_1,num_w_evt_1000_2,num_w_evt_1000_3,num_w_evt_1000_4, num_w_evt_1000_5,num_w_evt_1000_6,num_w_evt_1000_7,num_w_evt_1000_8, num_w_evt_1000_9,num_w_evt_1000_10,num_w_evt_1000_11,num_w_evt_1000_12), 'Had competing risk'=c(num_w_cr_1000_1,num_w_cr_1000_2,num_w_cr_1000_3,num_w_cr_1000_4, num_w_cr_1000_5,num_w_cr_1000_6,num_w_cr_1000_7,num_w_cr_1000_8, num_w_cr_1000_9,num_w_cr_1000_10,num_w_cr_1000_11,num_w_cr_1000_12), 'Censored'=c(num_end_fu_1000_1,num_end_fu_1000_2,num_end_fu_1000_3,num_end_fu_1000_4, num_end_fu_1000_5,num_end_fu_1000_6,num_end_fu_1000_7,num_end_fu_1000_8, num_end_fu_1000_9,num_end_fu_1000_10,num_end_fu_1000_11,num_end_fu_1000_12), 'Still in follow-up'=c(num_in_fu_1000_1,num_in_fu_1000_2,num_in_fu_1000_3,num_in_fu_1000_4, num_in_fu_1000_5,num_in_fu_1000_6,num_in_fu_1000_7,num_in_fu_1000_8, num_in_fu_1000_9,num_in_fu_1000_10,num_in_fu_1000_11,num_in_fu_1000_12), 'Had event'=c(num_w_evt_1,num_w_evt_2,num_w_evt_3,num_w_evt_4, num_w_evt_5,num_w_evt_6,num_w_evt_7,num_w_evt_8, num_w_evt_9,num_w_evt_10,num_w_evt_11,num_w_evt_12), 'Had competing risk'=c(num_w_cr_1,num_w_cr_2,num_w_cr_3,num_w_cr_4, num_w_cr_5,num_w_cr_6,num_w_cr_7,num_w_cr_8, num_w_cr_9,num_w_cr_10,num_w_cr_11,num_w_cr_12), 'Censored'=c(num_end_fu_1,num_end_fu_2,num_end_fu_3,num_end_fu_4, num_end_fu_5,num_end_fu_6,num_end_fu_7,num_end_fu_8, num_end_fu_9,num_end_fu_10,num_end_fu_11,num_end_fu_12), 'Still in follow-up'=c(num_in_fu_1,num_in_fu_2,num_in_fu_3,num_in_fu_4, num_in_fu_5,num_in_fu_6,num_in_fu_7,num_in_fu_8, num_in_fu_9,num_in_fu_10,num_in_fu_11,num_in_fu_12)) fu_df <- as.matrix(fu_df) colnames(fu_df) <- c('Year',rep(c('Had event','Had competing risk','Censored','Still in follow-up'),times=2)) latex(fu_df, file='', cgroup=c('','Primary 2nd line failure','Ignoring VL > 1000 criteria'),n.cgroup=c(1,4,4), col.just=c('r','r','r','r','r||','r','r','r','r'),caption=paste('Summaries of subjects for Figure 1 by year.',sep=''),landscape=TRUE, insert.bottom=paste('Estimated incidence for 2, 3, 5, and 7 years in 5760 subjects in primary analysis with non-zero follow-up: ',round(inc_2.1000,4),' ',ci_2.1000,'; ', round(inc_3.1000,4),' ',ci_3.1000,'; ',round(inc_5.1000,4),' ',ci_5.1000,'; ',round(inc_7.1000,4),' ',ci_7.1000,'. Estimated incidence for 2, 3, 5, and 7 years in ',dim(d.1000_p_rct)[1], ' subjects in analysis including RCT subjects: ',round(inc_2.1000.p.rct,4),' ',ci_2.1000.p.rct,'; ',round(inc_3.1000.p.rct,4),' ',ci_3.1000.p.rct,'; ', round(inc_5.1000.p.rct,4),' ',ci_5.1000.p.rct,'; ',round(inc_7.1000.p.rct,4),' ',ci_7.1000.p.rct,'.',sep='')) @ \begin{figure} \caption{Incidence of failing a second line or starting a 3rd line regimen in the subset of N=\Sexpr{length(nnrti_ids)} patients whose first regimen contained an NNRTI.}\label{fig:orig.by.nnrti} <>= par(mfrow=c(1,1),mar=c(4,4,1,1),oma=c(1,1,1,1)) plot(cum.inc.first.nnrti[[1]]$est[which(cum.inc.first.nnrti[[1]]$time <= 7.0)] ~ cum.inc.first.nnrti[[1]]$time[which(cum.inc.first.nnrti[[1]]$time <= 7.0)], type='l',axes=FALSE, xlab='Years from HAART initiation',ylab='Cumulative incidence',ylim=y.rge,lty=2) lines(cum.inc.first.nnrti.1000[[1]]$est[which(cum.inc.first.nnrti.1000[[1]]$time <= 7.0)] ~ cum.inc.first.nnrti.1000[[1]]$time[which(cum.inc.first.nnrti.1000[[1]]$time <= 7.0)],col='black') axis(1) axis(2) box(bty='l') legend('topleft',legend=c('Primary 2nd line failure definition','Ignoring VL>1000 criteria'),lty=c(1,2),bty='n',cex=0.75) @ \end{figure} <>= # Need to lump outcome for primary analysis and death d.1000$cr_4_ltfu <- ifelse(d.1000$overall_death_indicator == 1 | d.1000$outcome.1000 == 1,1,0) d.1000$censor.ltfu <- ifelse(d.1000$lost1 == 0 & d.1000$cr_4_ltfu == 0,0, ifelse(d.1000$lost1 == 1 & d.1000$cr_4_ltfu == 0,1, ifelse(d.1000$cr_4_ltfu == 1,2,NA))) cum.inc.ltfu <- cuminc(ftime=d.1000$total_followup.1000, fstatus=d.1000$censor.ltfu, cencode='0',rho=0) inc.ltfu.3 <- round(cum.inc.ltfu[[1]]$est[which(round(cum.inc.ltfu[[1]]$time,0) == 3)],2)[1] inc.ltfu.5 <- round(cum.inc.ltfu[[1]]$est[which(round(cum.inc.ltfu[[1]]$time,0) == 5)],2)[1] inc.ltfu.7 <- round(cum.inc.ltfu[[1]]$est[which(round(cum.inc.ltfu[[1]]$time,0) == 7)],2)[1] @ \begin{figure} \caption{Incidence of being lost to followup in the cohort used for the primary analysis. The incidence of being lost to follow-up at 3 years is \Sexpr{inc.ltfu.3}, at 5 years is \Sexpr{inc.ltfu.5}, and at 7 years is \Sexpr{inc.ltfu.7}.}\label{fig:orig.l2fu} <>= par(mfrow=c(1,1),mar=c(4,4,1,1),oma=c(1,1,1,1)) plot(cum.inc.ltfu[[1]]$est ~ cum.inc.ltfu[[1]]$time, type='l',axes=FALSE, xlab='Years from HAART initiation',ylab='Cumulative incidence',ylim=range(cum.inc.ltfu[[1]]$est),lty=2) axis(1) axis(2) box(bty='l') @ \end{figure} <>= # Number of subjects still in follow-up at the end of each year and the # who experienced the event during the year # Now in the secondary analysis for Figure 2 # First ignoring 1000 requirement # Year 1 num_in_fu_1 <- length(which(d_nnrti$total_followup_nnrti > 1.0)) tbl_1 <- table(d_nnrti$censor.nnrti[which(d_nnrti$total_followup_nnrti <= 1.0)]) num_w_evt_1 <- tbl_1[2] num_w_cr_1 <- tbl_1[3] num_end_fu_1 <- tbl_1[1] for(i in 2:floor(max(d_nnrti$total_followup_nnrti))){ assign(x=paste('num_in_fu_',i,sep=''), value=length(which(d_nnrti$total_followup_nnrti > i))) tbl <- table(d_nnrti$censor.nnrti[which(d_nnrti$total_followup_nnrti <= i & d_nnrti$total_followup_nnrti > (i-1))]) assign(x=paste('num_w_evt_',i,sep=''), value=tbl[which(names(tbl) == '1')]) assign(x=paste('num_w_cr_',i,sep=''), value=tbl[which(names(tbl) == '2')]) assign(x=paste('num_end_fu_',i,sep=''), value=tbl[which(names(tbl) == '0')]) } num_w_cr_12 <- ifelse(length(num_w_cr_12) == 0,0,num_w_cr_12) num_w_cr_9 <- ifelse(length(num_w_cr_9) == 0,0,num_w_cr_9) num_w_evt_12 <- ifelse(length(num_w_evt_12) == 0,0,num_w_evt_12) # Next considering 1000 requirement # Year 1 num_in_fu_1000_1 <- length(which(d_nnrti.1000$total_followup_nnrti.1000 > 1.0)) tbl_1 <- table(d_nnrti.1000$censor.nnrti.1000[which(d_nnrti.1000$total_followup_nnrti.1000 <= 1.0)]) num_w_evt_1000_1 <- tbl_1[2] num_w_cr_1000_1 <- tbl_1[3] num_end_fu_1000_1 <- tbl_1[1] for(i in 2:floor(max(d_nnrti.1000$total_followup_nnrti.1000))){ assign(x=paste('num_in_fu_1000_',i,sep=''), value=length(which(d_nnrti.1000$total_followup_nnrti.1000 > i))) tbl <- table(d_nnrti.1000$censor.nnrti.1000[which(d_nnrti.1000$total_followup_nnrti.1000 <= i & d_nnrti.1000$total_followup_nnrti.1000 > (i-1))]) assign(x=paste('num_w_evt_1000_',i,sep=''), value=tbl[which(names(tbl) == '1')]) assign(x=paste('num_w_cr_1000_',i,sep=''), value=tbl[which(names(tbl) == '2')]) assign(x=paste('num_end_fu_1000_',i,sep=''), value=tbl[which(names(tbl) == '0')]) } num_w_cr_1000_12 <- ifelse(length(num_w_cr_1000_12) == 0,0,num_w_cr_1000_12) num_w_cr_1000_9 <- ifelse(length(num_w_cr_1000_9) == 0,0,num_w_cr_1000_9) num_w_cr_1000_10 <- ifelse(length(num_w_cr_1000_10) == 0,0,num_w_cr_1000_10) num_w_evt_1000_10 <- ifelse(length(num_w_evt_1000_10) == 0,0,num_w_evt_1000_10) num_w_evt_1000_12 <- ifelse(length(num_w_evt_1000_12) == 0,0,num_w_evt_1000_12) num_w_evt_10 <- ifelse(length(num_w_evt_10) == 0,0,num_w_evt_10) fu_nnrti_df <- data.frame('Year'=seq(1,12), 'Had event'=c(num_w_evt_1000_1,num_w_evt_1000_2,num_w_evt_1000_3,num_w_evt_1000_4, num_w_evt_1000_5,num_w_evt_1000_6,num_w_evt_1000_7,num_w_evt_1000_8, num_w_evt_1000_9,num_w_evt_1000_10,num_w_evt_1000_11,num_w_evt_1000_12), 'Had competing risk'=c(num_w_cr_1000_1,num_w_cr_1000_2,num_w_cr_1000_3,num_w_cr_1000_4, num_w_cr_1000_5,num_w_cr_1000_6,num_w_cr_1000_7,num_w_cr_1000_8, num_w_cr_1000_9,num_w_cr_1000_10,num_w_cr_1000_11,num_w_cr_1000_12), 'Censored'=c(num_end_fu_1000_1,num_end_fu_1000_2,num_end_fu_1000_3,num_end_fu_1000_4, num_end_fu_1000_5,num_end_fu_1000_6,num_end_fu_1000_7,num_end_fu_1000_8, num_end_fu_1000_9,num_end_fu_1000_10,num_end_fu_1000_11,num_end_fu_1000_12), 'Still in follow-up'=c(num_in_fu_1000_1,num_in_fu_1000_2,num_in_fu_1000_3,num_in_fu_1000_4, num_in_fu_1000_5,num_in_fu_1000_6,num_in_fu_1000_7,num_in_fu_1000_8, num_in_fu_1000_9,num_in_fu_1000_10,num_in_fu_1000_11,num_in_fu_1000_12), 'Had event'=c(num_w_evt_1,num_w_evt_2,num_w_evt_3,num_w_evt_4, num_w_evt_5,num_w_evt_6,num_w_evt_7,num_w_evt_8, num_w_evt_9,num_w_evt_10,num_w_evt_11,num_w_evt_12), 'Had competing risk'=c(num_w_cr_1,num_w_cr_2,num_w_cr_3,num_w_cr_4, num_w_cr_5,num_w_cr_6,num_w_cr_7,num_w_cr_8, num_w_cr_9,num_w_cr_10,num_w_cr_11,num_w_cr_12), 'Censored'=c(num_end_fu_1,num_end_fu_2,num_end_fu_3,num_end_fu_4, num_end_fu_5,num_end_fu_6,num_end_fu_7,num_end_fu_8, num_end_fu_9,num_end_fu_10,num_end_fu_11,num_end_fu_12), 'Still in follow-up'=c(num_in_fu_1,num_in_fu_2,num_in_fu_3,num_in_fu_4, num_in_fu_5,num_in_fu_6,num_in_fu_7,num_in_fu_8, num_in_fu_9,num_in_fu_10,num_in_fu_11,num_in_fu_12)) fu_nnrti_df <- as.matrix(fu_nnrti_df) colnames(fu_nnrti_df) <- c('Year',rep(c('Had event','Had competing risk','Censored','Still in follow-up'),times=2)) latex(fu_nnrti_df, file='', cgroup=c('','Primary 2nd line failure','Ignoring VL > 1000 criteria'),n.cgroup=c(1,4,4), col.just=c('r','r','r','r','r||','r','r','r','r'),caption='Summaries of subjects for Figure 4 by year.',landscape=TRUE, insert.bottom=paste('Estimated incidence for 2, 3, 5, and 7 years in the ', dim(d_nnrti.1000)[1],' subjects in the secondary analysis with non-zero follow-up time: ',round(inc_2_nnrti.1000,4),' ',ci_2_nnrti.1000,'; ',round(inc_3_nnrti.1000,4),' ',ci_3_nnrti.1000,'; ',round(inc_5_nnrti.1000,4),' ',ci_5_nnrti.1000,'; ',round(inc_7_nnrti.1000,4),'; ',ci_7_nnrti.1000,sep='')) @ <>= # Summary on median followup time (and IQR) sub_d <- subset(d, select=c(age_fhaart, male.factor, aids_at_fhaart,aids_at_fhaart.factor, initial_haart_nnrti.factor,censor, baseline_cd4, baseline_log_rna,transmission_risk_larger_cat.factor, transmission_risk_cat.factor,total_followup,outcome,site.factor,year_fhaart)) followup.median <- format(round(median(d$total_followup),2),nsmall=2) followup.iqr <- format(round(quantile(d$total_followup,probs=c(0.25,0.75)),2),nsmall=2) sub_d.1000 <- subset(d.1000, select=c(age_fhaart, male.factor, aids_at_fhaart,aids_at_fhaart.factor, initial_haart_nnrti.factor,censor.1000, baseline_cd4, baseline_log_rna,transmission_risk_larger_cat.factor, transmission_risk_cat.factor,total_followup.1000,outcome.1000,site.factor,year_fhaart)) followup.median.1000 <- format(round(median(d.1000$total_followup.1000),2),nsmall=2) followup.iqr.1000 <- format(round(quantile(d.1000$total_followup.1000,probs=c(0.25,0.75)),2),nsmall=2) sub_d_nnrti <- subset(d_nnrti, select=c(age_fhaart, male.factor, aids_at_fhaart,aids_at_fhaart.factor, initial_haart_nnrti.factor,censor.nnrti, baseline_cd4, baseline_log_rna,transmission_risk_larger_cat.factor, transmission_risk_cat.factor,total_followup_nnrti,outcome_nnrti,site.factor,year_fhaart)) followup.median.nnrti <- format(round(median(d_nnrti$total_followup_nnrti),2),nsmall=2) followup.iqr.nnrti <- format(round(quantile(d_nnrti$total_followup_nnrti,probs=c(0.25,0.75)),2),nsmall=2) sub_d_nnrti.1000 <- subset(d_nnrti.1000, select=c(age_fhaart, male.factor, aids_at_fhaart,aids_at_fhaart.factor, initial_haart_nnrti.factor,censor.nnrti.1000, baseline_cd4, baseline_log_rna,transmission_risk_larger_cat.factor, transmission_risk_cat.factor,total_followup_nnrti.1000,outcome_nnrti.1000,site.factor,year_fhaart)) followup.median.nnrti.1000 <- format(round(median(d_nnrti.1000$total_followup_nnrti.1000),2),nsmall=2) followup.iqr.nnrti.1000 <- format(round(quantile(d_nnrti.1000$total_followup_nnrti.1000,probs=c(0.25,0.75)),2),nsmall=2) sub_d_2nd_start.1000 <- subset(d.1000, !is.na(total_followup_2nd_start.1000) & total_followup_2nd_start.1000 > 0, select=c(age_at_second_haart, male.factor, aids_at_fhaart,aids_at_fhaart.factor, second_haart_cd4, second_haart_log10_rna, transmission_risk_larger_cat.factor,transmission_risk_cat.factor, total_followup_2nd_start.1000,outcome.1000,site.factor,year_second_haart)) followup.median_2nd_start.1000 <- format(round(median(d.1000$total_followup_2nd_start.1000,na.rm=TRUE),2),nsmall=2) followup.iqr_2nd_start.1000 <- format(round(quantile(d.1000$total_followup_2nd_start.1000,probs=c(0.25,0.75),na.rm=TRUE),2),nsmall=2) sub_d_2nd_start <- subset(d, !is.na(total_followup_2nd_start) & total_followup_2nd_start > 0, select=c(age_at_second_haart, male.factor, aids_at_fhaart,aids_at_fhaart.factor, second_haart_cd4, second_haart_log10_rna, transmission_risk_larger_cat.factor,transmission_risk_cat.factor, total_followup_2nd_start,outcome,site.factor,year_second_haart)) followup.median_2nd_start <- format(round(median(d$total_followup_2nd_start,na.rm=TRUE),2),nsmall=2) followup.iqr_2nd_start <- format(round(quantile(d$total_followup_2nd_start,probs=c(0.25,0.75),na.rm=TRUE),2),nsmall=2) @ <>= t2evt_all_1000 <- time_to_evt_function(df=sub_d.1000,switch='all',vl='yes',censor=FALSE) t2evt_all <- time_to_evt_function(df=sub_d,switch='all',vl='no',censor=FALSE) t2evt_nnrti_1000 <- time_to_evt_nnrti_function(df=sub_d_nnrti.1000,switch='nnrti',vl='yes',censor=FALSE) t2evt_nnrti <- time_to_evt_nnrti_function(df=sub_d_nnrti,switch='nnrti',vl='no',censor=FALSE) t2evt_2nd_start_1000 <- time_to_evt_function_new_start(df=sub_d_2nd_start.1000, switch='second_line',vl='yes',censor=FALSE) t2evt_2nd_start <- time_to_evt_function_new_start(df=sub_d_2nd_start, switch='second_line',vl='no',censor=FALSE) @ <>= # Combining results from 1' and 2' analyses total.df.1000 <- cbind(t2evt_all_1000[['primary.df']],subset(t2evt_all_1000[['secondary.df']],select=c('HR','CI','P'))) total.df.1000 <- as.matrix(total.df.1000) colnames(total.df.1000) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.1000 <- t2evt_all_1000[['time_to_evt']]$stats[2] evts.1000.wvl <- t2evt_all_1000[['time_to_evt.wvl']]$stats[2] tot.evts.1000 <- table(d.1000$outcome.1000)[2] latex(total.df.1000, file='', rowname=NULL,caption='Hazard ratios for failing a second line or starting a 3rd line regimen.', insert.bottom=paste('Total number of events = ', tot.evts.1000,'; Number of events in model without viral load = ',evts.1000, '; Number of events in model with viral load = ',evts.1000.wvl,sep=''),n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df <- cbind(t2evt_all[['primary.df']],subset(t2evt_all[['secondary.df']],select=c('HR','CI','P'))) total.df <- as.matrix(total.df) colnames(total.df) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts <- t2evt_all[['time_to_evt']]$stats[2] evts.wvl <- t2evt_all[['time_to_evt.wvl']]$stats[2] tot.evts <- table(d$outcome)[2] latex(total.df, file='', rowname=NULL,caption='Hazard ratios for failing a second line or starting a 3rd line regimen, ignoring the Vl > 1000 criteria for failure.', insert.bottom=paste('Total number of events = ', tot.evts,'; Number of events in model without viral load = ',evts, '; Number of events in model with viral load = ',evts.wvl,sep=''),n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df.nnrti.1000 <- cbind(t2evt_nnrti_1000[['primary.df']],subset(t2evt_nnrti_1000[['secondary.df']],select=c('HR','CI','P'))) total.df.nnrti.1000 <- as.matrix(total.df.nnrti.1000) colnames(total.df.nnrti.1000) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.nnrti.1000 <- t2evt_nnrti_1000[['time_to_evt']]$stats[2] evts.nnrti.1000.wvl <- t2evt_nnrti_1000[['time_to_evt.wvl']]$stats[2] tot.evts.nnrti.1000 <- table(d_nnrti.1000$outcome_nnrti.1000)[2] num_nnrti_ids <- length(nnrti_ids) latex(total.df.nnrti.1000, file='', rowname=NULL,caption=paste('Hazard ratios for failing a second line or starting a 3rd line regimen in the subset of N=',num_nnrti_ids,' patients whose first regimen contained an NNRTI.',sep=''),insert.bottom=paste('Total number of events = ', tot.evts.nnrti.1000,'; Number of events in model without viral load = ',evts.nnrti.1000,'; Number of events in model with viral load =', evts.nnrti.1000.wvl,sep=''), n.cgroup=c(1,3,3),cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df.nnrti <- cbind(t2evt_nnrti[['primary.df']],subset(t2evt_nnrti[['secondary.df']],select=c('HR','CI','P'))) total.df.nnrti <- as.matrix(total.df.nnrti) colnames(total.df.nnrti) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.nnrti <- t2evt_nnrti[['time_to_evt']]$stats[2] evts.nnrti.wvl <- t2evt_nnrti[['time_to_evt.wvl']]$stats[2] tot.evts.nnrti <- table(d_nnrti$outcome_nnrti)[2] latex(total.df.nnrti, file='', rowname=NULL,caption=paste('Hazard ratios for failing a second line or starting a 3rd line regimen, ignoring the Vl > 1000 criteria for failure and in the subset of N=',num_nnrti_ids,' patients whose first regimen contained an NNRTI.',sep=''),insert.bottom=paste('Total number of events = ', tot.evts.nnrti,'; Number of events in model without viral load = ',evts.nnrti, '; Number of events in model with viral load = ',evts.nnrti.wvl,sep=''),n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df_2nd_start.1000 <- cbind(t2evt_2nd_start_1000[['primary.df']],subset(t2evt_2nd_start_1000[['secondary.df']],select=c('HR','CI','P'))) total.df_2nd_start.1000 <- as.matrix(total.df_2nd_start.1000) colnames(total.df_2nd_start.1000) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts_2nd_start.1000 <- t2evt_2nd_start_1000[['time_to_evt']]$stats[2] evts_2nd_start.1000.wvl <- t2evt_2nd_start_1000[['time_to_evt.wvl']]$stats[2] tot.evts_2nd_start.1000 <- table(sub_d_2nd_start.1000$outcome.1000)[2] latex(total.df_2nd_start.1000, file='', rowname=NULL,caption='Hazard ratios for failing a second line or starting a 3rd line regimen using the start of second line regimen as baseline.', insert.bottom=paste('Total number of events = ', tot.evts_2nd_start.1000,'; Number of events in model without viral load = ',evts_2nd_start.1000, '; Number of events in model with viral load = ',evts_2nd_start.1000.wvl,sep=''),n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ \clearpage \subsubsection{Results using imputed data} %--------------------------------------------------------------------------------------% % Imputation results % %--------------------------------------------------------------------------------------% <>= # Combining results from 1' and 2' analyses total.df.impute.1000 <- cbind(t2evt_all_1000[['primary.df.impute']],subset(t2evt_all_1000[['secondary.df.impute']],select=c('HR','CI','P'))) total.df.impute.1000 <- as.matrix(total.df.impute.1000) colnames(total.df.impute.1000) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.1000.impute <- t2evt_all_1000[['impute.mod']]$stats[2] evts.wvl.1000.impute <- t2evt_all_1000[['impute.mod.wvl']]$stats[2] tot.evts.1000 <- table(d.1000$outcome.1000)[2] latex(total.df.impute.1000, file='', rowname=NULL,caption='Hazard ratios for failing a second line or starting a 3rd line regimen with multiply imputed data.',insert.bottom=paste('Total number of events = ', tot.evts.1000, '; Number of events in model without viral load = ',evts.1000.impute, '; Number of events in model with viral load = ', evts.wvl.1000.impute,sep=''), n.cgroup=c(1,3,3),where='!h', cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df.impute <- cbind(t2evt_all[['primary.df.impute']],subset(t2evt_all[['secondary.df.impute']],select=c('HR','CI','P'))) total.df.impute <- as.matrix(total.df.impute) colnames(total.df.impute) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.impute <- t2evt_all[['impute.mod']]$stats[2] evts.wvl.impute <- t2evt_all[['impute.mod.wvl']]$stats[2] tot.evts.impute <- table(d$outcome)[2] latex(total.df.impute, file='', rowname=NULL,caption='Hazard ratios for failing a second line or starting a 3rd line regimen, ignoring the Vl > 1000 criteria for failure with multiply imputed data.',insert.bottom=paste('Total number of events = ', tot.evts.impute,'; Number of events in model without viral load = ',evts.impute, '; Number of events in model with viral load = ', evts.wvl.impute,sep=''), n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df.impute.nnrti.1000 <- cbind(t2evt_nnrti_1000[['primary.df.impute']],subset(t2evt_nnrti_1000[['secondary.df.impute']],select=c('HR','CI','P'))) total.df.impute.nnrti.1000 <- as.matrix(total.df.impute.nnrti.1000) colnames(total.df.impute.nnrti.1000) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.nnrti.1000.impute <- t2evt_nnrti_1000[['impute.mod']]$stats[2] evts.wvl.nnrti.1000.impute <- t2evt_nnrti_1000[['impute.mod.wvl']]$stats[2] tot.evts.nnrti.1000.impute <- table(d_nnrti.1000$outcome_nnrti.1000)[2] latex(total.df.impute.nnrti.1000, file='', rowname=NULL,caption=paste('Hazard ratios for failing a second line or starting a 3rd line regimen in the subset of N=',num_nnrti_ids,' patients whose first regimen contained an NNRTI with multiply imputed data.',sep=''),insert.bottom=paste('Total number of events = ', tot.evts.nnrti.1000.impute, '; Number of events in model without viral load = ',evts.nnrti.1000.impute, '; Number of events in model with viral load = ', evts.wvl.nnrti.1000.impute,sep=''), n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df.impute.nnrti <- cbind(t2evt_nnrti[['primary.df.impute']],subset(t2evt_nnrti[['secondary.df.impute']],select=c('HR','CI','P'))) total.df.impute.nnrti <- as.matrix(total.df.impute.nnrti) colnames(total.df.impute.nnrti) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.nnrti.impute <- t2evt_nnrti[['impute.mod']]$stats[2] evts.wvl.nnrti.impute <- t2evt_nnrti[['impute.mod.wvl']]$stats[2] tot.evts.nnrti.impute <- table(d_nnrti$outcome_nnrti)[2] latex(total.df.impute.nnrti, file='', rowname=NULL,caption=paste('Hazard ratios for failing a second line or starting a 3rd line regimen, ignoring the Vl > 1000 criteria for failure and in the subset of N=',num_nnrti_ids,' patients whose first regimen contained an NNRTI with multiply imputed data.',sep=''),insert.bottom=paste('Total number of events = ', tot.evts.nnrti.impute, '; Number of events in model without viral load = ',evts.nnrti.impute, '; Number of events in model with viral load = ', evts.wvl.nnrti.impute,sep=''), n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df_impute_2nd_start.1000 <- cbind(t2evt_2nd_start_1000[['primary.df.impute']],subset(t2evt_2nd_start_1000[['secondary.df.impute']],select=c('HR','CI','P'))) total.df_impute_2nd_start.1000 <- as.matrix(total.df_impute_2nd_start.1000) colnames(total.df_impute_2nd_start.1000) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts_impute_2nd_start.1000 <- t2evt_2nd_start_1000[['impute.mod']]$stats[2] evts_impute_2nd_start.1000.wvl <- t2evt_2nd_start_1000[['impute.mod.wvl']]$stats[2] tot.evts_impute_2nd_start.1000 <- table(sub_d_2nd_start.1000$outcome.1000)[2] latex(total.df_impute_2nd_start.1000, file='', rowname=NULL,caption='Hazard ratios for failing a second line or starting a 3rd line regimen using start of second line regimen as baseline. Data were multiply imputed.', insert.bottom=paste('Total number of events = ', tot.evts_impute_2nd_start.1000,'; Number of events in model without viral load = ',evts_impute_2nd_start.1000, '; Number of events in model with viral load = ',evts_impute_2nd_start.1000.wvl,sep=''),n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ \clearpage \subsubsection{Follow-up points to address prior to submission} <>= # Median frequency of viral load measurements per site -- # of viral load measurements dividied by the follow-up time after HAART initiation per person. Then compute median by site. # First need to add total_followup to rna rna$total_followup.1000 <- d.1000[match(rna$unique_id,d.1000$unique_id,nomatch=NA),'total_followup.1000'] tmp <- subset(rna, !is.na(total_followup.1000)) tmp$unique_id.factor <- factor(tmp$unique_id, levels=unique(d.1000$unique_id)) num_vl <- tapply(tmp$rna_v, INDEX=tmp$unique_id.factor, FUN=function(y){ if(all(is.na(y))){ return(0) } else { return(length(y[which(!is.na(y))])) } }) tot_fu_vl <- d.1000$total_followup.1000[!duplicated(d.1000$unique_id)] freq_vl <- num_vl/tot_fu_vl num_vl_measurements.df <- data.frame('unique_id'=names(num_vl), 'num_vl_per_person'=as.numeric(num_vl), 'vl_frequency'=freq_vl) all_visits$vl_frequency <- num_vl_measurements.df[match(all_visits$unique_id,num_vl_measurements.df$unique_id,nomatch=NA),'vl_frequency'] all_visits$num_vl_per_person <- num_vl_measurements.df[match(all_visits$unique_id,num_vl_measurements.df$unique_id,nomatch=NA),'num_vl_per_person'] vl_frequency_by_site <- tapply(all_visits$vl_frequency[!duplicated(all_visits$unique_id)],INDEX=all_visits$site.factor[!duplicated(all_visits$unique_id)],FUN=median,na.rm=TRUE) vl_frequency_overall <- quantile(all_visits$vl_frequency[!duplicated(all_visits$unique_id)], probs=c(0.25,0.50,0.75),na.rm=TRUE) vl_per_person_by_site <- tapply(all_visits$num_vl_per_person[!duplicated(all_visits$unique_id)],INDEX=all_visits$site.factor[!duplicated(all_visits$unique_id)],FUN=median,na.rm=TRUE) # Median frequency of CD4 measurements per site -- # of CD4 measurements dividied by the follow-up time after HAART initiation per person. Then compute median by site. # First need to add total_followup to cd4 cd4$total_followup.1000 <- d.1000[match(cd4$unique_id,d.1000$unique_id,nomatch=NA),'total_followup.1000'] tmp <- subset(cd4, !is.na(total_followup.1000)) tmp$unique_id.factor <- factor(tmp$unique_id, levels=unique(d.1000$unique_id)) num_cd4 <- tapply(tmp$cd4_v, INDEX=tmp$unique_id.factor, FUN=function(y){ if(all(is.na(y))){ return(0) } else { return(length(y[which(!is.na(y))])) } }) tot_fu_cd4 <- d.1000$total_followup.1000[!duplicated(d.1000$unique_id)] freq_cd4 <- num_cd4/tot_fu_cd4 num_cd4_measurements.df <- data.frame('unique_id'=names(num_cd4), 'num_cd4_per_person'=as.numeric(num_cd4), 'cd4_frequency'=freq_cd4) all_visits$cd4_frequency <- num_cd4_measurements.df[match(all_visits$unique_id,num_cd4_measurements.df$unique_id,nomatch=NA),'cd4_frequency'] cd4_frequency_by_site <- tapply(all_visits$cd4_frequency[!duplicated(all_visits$unique_id)],INDEX=all_visits$site.factor[!duplicated(all_visits$unique_id)],FUN=median,na.rm=TRUE) cd4_frequency_overall <- quantile(all_visits$cd4_frequency[!duplicated(all_visits$unique_id)], probs=c(0.25,0.50,0.75),na.rm=TRUE) all_visits$num_cd4_per_person <- num_cd4_measurements.df[match(all_visits$unique_id,num_vl_measurements.df$unique_id,nomatch=NA),'num_cd4_per_person'] cd4_per_person_by_site <- tapply(all_visits$num_cd4_per_person[!duplicated(all_visits$unique_id)],INDEX=all_visits$site.factor[!duplicated(all_visits$unique_id)],FUN=median,na.rm=TRUE) # For median follow-up time (IQR), calculating for the entire all_visits cohort (6598) and then for those in d.1000 (6524 -- excludes the 96 with 0 follow-up) all_visits$total_followup.1000 <- d.1000[match(all_visits$unique_id,d.1000$unique_id,nomatch=NA),'total_followup.1000'] all_visits$total_followup.1000 <- ifelse(is.na(all_visits$total_followup.1000),0,all_visits$total_followup.1000) entire_fu <- describe(all_visits$total_followup.1000[!duplicated(all_visits$unique_id)]) d.1000_fu <- describe(d.1000$total_followup.1000[!duplicated(d.1000$unique_id)]) @ <>= # Creating df for CD4 and VL frequencies by site df_site <- data.frame('Site'=names(cd4_frequency_by_site), 'By year'=round(cd4_frequency_by_site,2), 'Overall'=round(cd4_per_person_by_site,2), 'By year'=round(vl_frequency_by_site,2), 'Overall'=round(vl_per_person_by_site,2)) df_site <- as.matrix(df_site) colnames(df_site) <- c('Site','By year','Overall','By year','Overall') overall_cd4 <- format(round(cd4_frequency_overall[2],2),nsmall=2) overall_vl <- format(round(vl_frequency_overall[2],2),nsmall=2) latex(df_site, rowname=NULL, file='', caption='Frequency of CD4 and viral load measurements by site.',where='!h',cgroup=c('','CD4','HIV-1 RNA'),n.cgroup=c(1,2,2), insert.bottom=paste('Median rate of CD4 measurement frequency=',overall_cd4,'; Median rate of HIV-1 RNA measurement frequency=',overall_vl,'.',sep='')) @ \subsubsection{Censoring VF that occurred after any gaps of at least a year in viral load measurements} \begin{figure} \caption{Incidence of failing a second line or starting a 3rd line regimen, censoring failures prior to any gaps in viral load measurements of a year or more.}\label{fig:new.by.analysis} <>= cum.inc.first_new <- cuminc(ftime=d$total_followup_new, fstatus=d$censor_new, cencode='0',rho=0) cum.inc.first.1000_new <- cuminc(ftime=d.1000$total_followup.1000_new, fstatus=d.1000$censor.1000_new, cencode='0',rho=0) cum.inc.first.nnrti_new <- cuminc(ftime=d_nnrti$total_followup_nnrti_new, fstatus=d_nnrti$censor.nnrti_new, cencode='0',rho=0) cum.inc.first.nnrti.1000_new <- cuminc(ftime=d_nnrti.1000$total_followup_nnrti.1000_new, fstatus=d_nnrti.1000$censor.nnrti.1000_new, cencode='0',rho=0) cum.inc.first.1000.p.rct_new <- cuminc(ftime=d.1000_p_rct$total_followup.1000_new, fstatus=d.1000_p_rct$censor.1000_new, cencode='0',rho=0) cum.inc.first.1000.2nd_start_new <- cuminc(ftime=d.1000_2nd_start$total_followup_2nd_start.1000_new, fstatus=d.1000_2nd_start$censor.1000_new, cencode='0',rho=0) y.rge <- range(c(cum.inc.first_new[[1]]$est[which(cum.inc.first_new[[1]]$time <= 7.0)], cum.inc.first.1000_new[[1]]$est[which(cum.inc.first.1000_new[[1]]$time <= 7.0)], cum.inc.first.nnrti_new[[1]]$est[which(cum.inc.first.nnrti_new[[1]]$time <= 7.0)], cum.inc.first.nnrti.1000_new[[1]]$est[which(cum.inc.first.nnrti.1000_new[[1]]$time <= 7.0)])) y2.rge <- range(c(cum.inc.first_new[[1]]$est[which(cum.inc.first_new[[1]]$time <= 7.0)], cum.inc.first.1000_new[[1]]$est[which(cum.inc.first.1000_new[[1]]$time <= 7.0)], cum.inc.first.nnrti_new[[1]]$est[which(cum.inc.first.nnrti_new[[1]]$time <= 7.0)], cum.inc.first.nnrti.1000_new[[1]]$est[which(cum.inc.first.nnrti.1000_new[[1]]$time <= 7.0)], cum.inc.first.1000.p.rct_new[[1]]$est[which(cum.inc.first.1000.p.rct_new[[1]]$time <= 7.0)])) y.rge.2nd_start <- range(cum.inc.first.1000.2nd_start_new[[1]]$est[which(cum.inc.first.1000.2nd_start_new[[1]]$time <= 7.0)]) # pdf('Figure1_thirdLine.pdf') par(mfrow=c(1,1),mar=c(4,4,1,1),oma=c(1,1,1,1)) plot(cum.inc.first_new[[1]]$est[which(cum.inc.first_new[[1]]$time <= 7.0)] ~ cum.inc.first_new[[1]]$time[which(cum.inc.first_new[[1]]$time <= 7.0)], type='l',axes=FALSE,xlab='Years from HAART initiation',ylab='Cumulative incidence',ylim=y2.rge,lty=2) lines(cum.inc.first.1000_new[[1]]$est[which(cum.inc.first.1000_new[[1]]$time <= 7.0)] ~ cum.inc.first.1000_new[[1]]$time[which(cum.inc.first.1000_new[[1]]$time <= 7.0)], col='black') lines(cum.inc.first.1000.p.rct_new[[1]]$est[which(cum.inc.first.1000.p.rct_new[[1]]$time <= 7.0)] ~ cum.inc.first.1000.p.rct_new[[1]]$time[which(cum.inc.first.1000.p.rct_new[[1]]$time <= 7.0)], lty=3) axis(1) axis(2) box(bty='l') legend('topleft',legend=c('Primary 2nd line failure definition','Ignoring VL>1000 criteria','Including RCT subjects'),lty=c(1,2,3),bty='n',cex=0.75) # dev.off() @ \end{figure} \begin{figure} \caption{ Incidence of failing a second line or starting a 3rd line regimen by site, censoring failures prior to any gaps in viral load measurements of a year or more.}\label{fig:new.by.site} <>= cum.inc.argentina_new <- cuminc(ftime=d.1000$total_followup.1000_new[which(d.1000$site.factor == 'argentina')], fstatus=d.1000$censor.1000_new[which(d.1000$site.factor == 'argentina')], cencode='0',rho=0) cum.inc.brazil_new <- cuminc(ftime=d.1000$total_followup.1000_new[which(d.1000$site.factor == 'brazil')], fstatus=d.1000$censor.1000_new[which(d.1000$site.factor == 'brazil')], cencode='0',rho=0) cum.inc.honduras_new <- cuminc(ftime=d.1000$total_followup.1000_new[which(d.1000$site.factor == 'honduras')], fstatus=d.1000$censor.1000_new[which(d.1000$site.factor == 'honduras')], cencode='0',rho=0) cum.inc.mexico_new <- cuminc(ftime=d.1000$total_followup.1000_new[which(d.1000$site.factor == 'mexico')], fstatus=d.1000$censor.1000_new[which(d.1000$site.factor == 'mexico')], cencode='0',rho=0) cum.inc.peru_new <- cuminc(ftime=d.1000$total_followup.1000_new[which(d.1000$site.factor == 'peru')], fstatus=d.1000$censor.1000_new[which(d.1000$site.factor == 'peru')], cencode='0',rho=0) y.rge.site <- range(c(cum.inc.argentina_new[[1]]$est[which(cum.inc.argentina_new[[1]]$time <= 7.0)], cum.inc.brazil_new[[1]]$est[which(cum.inc.brazil_new[[1]]$time <= 7.0)], cum.inc.honduras_new[[1]]$est[which(cum.inc.honduras_new[[1]]$time <= 7.0)], cum.inc.mexico_new[[1]]$est[which(cum.inc.mexico_new[[1]]$time <= 7.0)], cum.inc.peru_new[[1]]$est[which(cum.inc.peru_new[[1]]$time <= 7.0)])) par(mfrow=c(1,1),mar=c(4,4,1,1),oma=c(1,1,1,1)) plot(cum.inc.argentina_new[[1]]$est[which(cum.inc.argentina_new[[1]]$time <= 7.0)] ~ cum.inc.argentina_new[[1]]$time[which(cum.inc.argentina_new[[1]]$time <= 7.0)], type='l',axes=FALSE,xlab='Years from HAART initiation',ylab='Cumulative incidence',ylim=y.rge,lty=1) lines(cum.inc.brazil_new[[1]]$est[which(cum.inc.brazil_new[[1]]$time <= 7.0)] ~ cum.inc.brazil_new[[1]]$time[which(cum.inc.brazil_new[[1]]$time <= 7.0)], lty=2) lines(cum.inc.honduras_new[[1]]$est[which(cum.inc.honduras_new[[1]]$time <= 7.0)] ~ cum.inc.honduras_new[[1]]$time[which(cum.inc.honduras_new[[1]]$time <= 7.0)], lty=4) lines(cum.inc.mexico_new[[1]]$est[which(cum.inc.mexico_new[[1]]$time <= 7.0)] ~ cum.inc.mexico_new[[1]]$time[which(cum.inc.mexico_new[[1]]$time <= 7.0)], lty=5) lines(cum.inc.peru_new[[1]]$est[which(cum.inc.peru_new[[1]]$time <= 7.0)] ~ cum.inc.peru_new[[1]]$time[which(cum.inc.peru_new[[1]]$time <= 7.0)],lty=6) axis(1) axis(2) box(bty='l') legend('topleft',legend=c('Argentina','Brazil','Honduras','Mexico','Peru'),lty=c(1,2,4,5,6),bty='n',cex=0.75) @ \end{figure} \begin{figure} \caption{Cumulative incidence using the start of a second line regimen as the baseline, censoring failures prior to any gaps in viral load measurements of a year or more.}\label{fig:new.by.2nd} <>= par(mfrow=c(1,1),mar=c(4,4,1,1),oma=c(1,1,1,1)) plot(cum.inc.first.1000.2nd_start_new[[1]]$est[which(cum.inc.first.1000.2nd_start_new[[1]]$time <= 7.0)] ~ cum.inc.first.1000.2nd_start_new[[1]]$time[which(cum.inc.first.1000.2nd_start_new[[1]]$time <= 7.0)], type='l',axes=FALSE,xlab='Years from HAART initiation',ylab='Cumulative incidence',ylim=y.rge.2nd_start,lty=1) axis(1) axis(2) box(bty='l') @ \end{figure} <>= # Estimated incidence and 95\% CI in composite endpoint inc_2.1000_new <- cum.inc.first.1000_new[[1]]$est[which(round(cum.inc.first.1000_new[[1]]$time,0) == 2)][1] se_2.1000_new <- sqrt(cum.inc.first.1000_new[[1]]$var[which(round(cum.inc.first.1000_new[[1]]$time,0) == 2)][1]) ci_2.1000_new <- paste('(',round((inc_2.1000_new - qnorm(0.975)*se_2.1000_new),4),', ', round((inc_2.1000_new + qnorm(0.975)*se_2.1000_new),4),')',sep='') inc_3.1000_new <- cum.inc.first.1000_new[[1]]$est[which(round(cum.inc.first.1000_new[[1]]$time,0) == 3)][1] se_3.1000_new <- sqrt(cum.inc.first.1000_new[[1]]$var[which(round(cum.inc.first.1000_new[[1]]$time,0) == 3)][1]) ci_3.1000_new <- paste('(',round((inc_3.1000_new - qnorm(0.975)*se_3.1000_new),4),', ', round((inc_3.1000_new + qnorm(0.975)*se_3.1000_new),4),')',sep='') inc_5.1000_new <- cum.inc.first.1000_new[[1]]$est[which(round(cum.inc.first.1000_new[[1]]$time,0) == 5)][1] se_5.1000_new <- sqrt(cum.inc.first.1000_new[[1]]$var[which(round(cum.inc.first.1000_new[[1]]$time,0) == 5)][1]) ci_5.1000_new <- paste('(',round((inc_5.1000_new - qnorm(0.975)*se_5.1000_new),4),', ', round((inc_5.1000_new + qnorm(0.975)*se_5.1000_new),4),')',sep='') inc_7.1000_new <- cum.inc.first.1000_new[[1]]$est[which(round(cum.inc.first.1000_new[[1]]$time,0) == 7)][1] se_7.1000_new <- sqrt(cum.inc.first.1000_new[[1]]$var[which(round(cum.inc.first.1000_new[[1]]$time,0) == 7)][1]) ci_7.1000_new <- paste('(',round((inc_7.1000_new - qnorm(0.975)*se_7.1000_new),4),', ', round((inc_7.1000_new + qnorm(0.975)*se_7.1000_new),4),')',sep='') inc_2_nnrti.1000_new <- cum.inc.first.nnrti.1000_new[[1]]$est[which(round(cum.inc.first.nnrti.1000_new[[1]]$time,0) == 2)][1] se_2_nnrti.1000_new <- sqrt(cum.inc.first.nnrti.1000_new[[1]]$var[which(round(cum.inc.first.nnrti.1000_new[[1]]$time,0) == 2)][1]) ci_2_nnrti.1000_new <- paste('(',round((inc_2_nnrti.1000_new - qnorm(0.975)*se_2_nnrti.1000_new),4),', ', round((inc_2_nnrti.1000_new + qnorm(0.975)*se_2_nnrti.1000_new),4),')',sep='') inc_3_nnrti.1000_new <- cum.inc.first.nnrti.1000_new[[1]]$est[which(round(cum.inc.first.nnrti.1000_new[[1]]$time,0) == 3)][1] se_3_nnrti.1000_new <- sqrt(cum.inc.first.nnrti.1000_new[[1]]$var[which(round(cum.inc.first.nnrti.1000_new[[1]]$time,0) == 3)][1]) ci_3_nnrti.1000_new <- paste('(',round((inc_3_nnrti.1000_new - qnorm(0.975)*se_3_nnrti.1000_new),4),', ', round((inc_3_nnrti.1000_new + qnorm(0.975)*se_3_nnrti.1000_new),4),')',sep='') inc_5_nnrti.1000_new <- cum.inc.first.nnrti.1000_new[[1]]$est[which(round(cum.inc.first.nnrti.1000_new[[1]]$time,0) == 5)][1] se_5_nnrti.1000_new <- sqrt(cum.inc.first.nnrti.1000_new[[1]]$var[which(round(cum.inc.first.nnrti.1000_new[[1]]$time,0) == 5)][1]) ci_5_nnrti.1000_new <- paste('(',round((inc_5_nnrti.1000_new - qnorm(0.975)*se_5_nnrti.1000_new),4),', ', round((inc_5_nnrti.1000_new + qnorm(0.975)*se_5_nnrti.1000_new),4),')',sep='') inc_7_nnrti.1000_new <- cum.inc.first.nnrti.1000_new[[1]]$est[which(round(cum.inc.first.nnrti.1000_new[[1]]$time,0) == 7)][1] se_7_nnrti.1000_new <- sqrt(cum.inc.first.nnrti.1000_new[[1]]$var[which(round(cum.inc.first.nnrti.1000_new[[1]]$time,0) == 7)][1]) ci_7_nnrti.1000_new <- paste('(',round((inc_7_nnrti.1000_new - qnorm(0.975)*se_7_nnrti.1000_new),4),', ', round((inc_7_nnrti.1000_new + qnorm(0.975)*se_7_nnrti.1000_new),4),')',sep='') @ <>= # Cumulative incidences for new start time at 1-5 years inc_1_2nd_start.1000_new <- cum.inc.first.1000.2nd_start_new[[1]]$est[which(round(cum.inc.first.1000.2nd_start_new[[1]]$time,0) == 1)[1]] se_1_2nd_start.1000_new <- sqrt(cum.inc.first.1000.2nd_start_new[[1]]$var[which(round(cum.inc.first.1000.2nd_start_new[[1]]$time,0) == 1)[1]]) ci_1_2nd_start.1000_new <- paste('(',round((inc_1_2nd_start.1000_new - qnorm(0.975)*se_1_2nd_start.1000_new),4),', ', round((inc_1_2nd_start.1000_new + qnorm(0.975)*se_1_2nd_start.1000_new),4),')',sep='') inc_2_2nd_start.1000_new <- cum.inc.first.1000.2nd_start_new[[1]]$est[which(round(cum.inc.first.1000.2nd_start_new[[1]]$time,0) == 2)[1]] se_2_2nd_start.1000_new <- sqrt(cum.inc.first.1000.2nd_start_new[[1]]$var[which(round(cum.inc.first.1000.2nd_start_new[[1]]$time,0) == 2)[1]]) ci_2_2nd_start.1000_new <- paste('(',round((inc_2_2nd_start.1000_new - qnorm(0.975)*se_2_2nd_start.1000_new),4),', ', round((inc_2_2nd_start.1000_new + qnorm(0.975)*se_2_2nd_start.1000_new),4),')',sep='') inc_3_2nd_start.1000_new <- cum.inc.first.1000.2nd_start_new[[1]]$est[which(round(cum.inc.first.1000.2nd_start_new[[1]]$time,0) == 3)[1]] se_3_2nd_start.1000_new <- sqrt(cum.inc.first.1000.2nd_start_new[[1]]$var[which(round(cum.inc.first.1000.2nd_start_new[[1]]$time,0) == 3)[1]]) ci_3_2nd_start.1000_new <- paste('(',round((inc_3_2nd_start.1000_new - qnorm(0.975)*se_3_2nd_start.1000_new),4),', ', round((inc_3_2nd_start.1000_new + qnorm(0.975)*se_3_2nd_start.1000_new),4),')',sep='') inc_4_2nd_start.1000_new <- cum.inc.first.1000.2nd_start_new[[1]]$est[which(round(cum.inc.first.1000.2nd_start_new[[1]]$time,0) == 4)[1]] se_4_2nd_start.1000_new <- sqrt(cum.inc.first.1000.2nd_start_new[[1]]$var[which(round(cum.inc.first.1000.2nd_start_new[[1]]$time,0) == 4)[1]]) ci_4_2nd_start.1000_new <- paste('(',round((inc_4_2nd_start.1000_new - qnorm(0.975)*se_4_2nd_start.1000_new),4),', ', round((inc_4_2nd_start.1000_new + qnorm(0.975)*se_4_2nd_start.1000_new),4),')',sep='') inc_5_2nd_start.1000_new <- cum.inc.first.1000.2nd_start_new[[1]]$est[which(round(cum.inc.first.1000.2nd_start_new[[1]]$time,0) == 5)[1]] se_5_2nd_start.1000_new <- sqrt(cum.inc.first.1000.2nd_start_new[[1]]$var[which(round(cum.inc.first.1000.2nd_start_new[[1]]$time,0) == 5)[1]]) ci_5_2nd_start.1000_new <- paste('(',round((inc_5_2nd_start.1000_new - qnorm(0.975)*se_5_2nd_start.1000_new),4),', ', round((inc_5_2nd_start.1000_new + qnorm(0.975)*se_5_2nd_start.1000_new),4),')',sep='') @ <>= # Estimated incidence and 95\% CI in composite endpoint inc_2.1000.p.rct_new <- cum.inc.first.1000.p.rct_new[[1]]$est[which(round(cum.inc.first.1000.p.rct_new[[1]]$time,0) == 2)][1] se_2.1000.p.rct_new <- sqrt(cum.inc.first.1000.p.rct_new[[1]]$var[which(round(cum.inc.first.1000.p.rct_new[[1]]$time,0) == 2)][1]) ci_2.1000.p.rct_new <- paste('(',round((inc_2.1000.p.rct_new - qnorm(0.975)*se_2.1000.p.rct_new),4),', ', round((inc_2.1000.p.rct_new + qnorm(0.975)*se_2.1000.p.rct_new),4),')',sep='') inc_3.1000.p.rct_new <- cum.inc.first.1000.p.rct_new[[1]]$est[which(round(cum.inc.first.1000.p.rct_new[[1]]$time,0) == 3)][1] se_3.1000.p.rct_new <- sqrt(cum.inc.first.1000.p.rct_new[[1]]$var[which(round(cum.inc.first.1000.p.rct_new[[1]]$time,0) == 3)][1]) ci_3.1000.p.rct_new <- paste('(',round((inc_3.1000.p.rct_new - qnorm(0.975)*se_3.1000.p.rct_new),4),', ', round((inc_3.1000.p.rct_new + qnorm(0.975)*se_3.1000.p.rct_new),4),')',sep='') inc_5.1000.p.rct_new <- cum.inc.first.1000.p.rct_new[[1]]$est[which(round(cum.inc.first.1000.p.rct_new[[1]]$time,0) == 5)][1] se_5.1000.p.rct_new <- sqrt(cum.inc.first.1000.p.rct_new[[1]]$var[which(round(cum.inc.first.1000.p.rct_new[[1]]$time,0) == 5)][1]) ci_5.1000.p.rct_new <- paste('(',round((inc_5.1000.p.rct_new - qnorm(0.975)*se_5.1000.p.rct_new),4),', ', round((inc_5.1000.p.rct_new + qnorm(0.975)*se_5.1000.p.rct_new),4),')',sep='') inc_7.1000.p.rct_new <- cum.inc.first.1000.p.rct_new[[1]]$est[which(round(cum.inc.first.1000.p.rct_new[[1]]$time,0) == 7)][1] se_7.1000.p.rct_new <- sqrt(cum.inc.first.1000.p.rct_new[[1]]$var[which(round(cum.inc.first.1000.p.rct_new[[1]]$time,0) == 7)][1]) ci_7.1000.p.rct_new <- paste('(',round((inc_7.1000.p.rct_new - qnorm(0.975)*se_7.1000.p.rct_new),4),', ', round((inc_7.1000.p.rct_new + qnorm(0.975)*se_7.1000.p.rct_new),4),')',sep='') tbl_2nd_line_new <- with(subset(d.1000, !is.na(min_second_line_start_date_bpi_or_nnrti)),table(overall_third_line_regimen_new,overall_failure_on_second_line.1000_new)) followup.median.1000_new <- format(round(median(d.1000$total_followup.1000_new),2),nsmall=2) followup.iqr.1000_new <- format(round(quantile(d.1000$total_followup.1000_new,probs=c(0.25,0.75)),2),nsmall=2) @ <>= # Number of subjects still in follow-up at the end of each year and the # who experienced the event during the year # First ignoring 1000 requirement # Year 1 num_in_fu_1 <- length(which(d$total_followup_new > 1.0)) tbl_1 <- table(d$censor[which(d$total_followup_new <= 1.0)]) num_w_evt_1 <- tbl_1[2] num_w_cr_1 <- tbl_1[3] num_end_fu_1 <- tbl_1[1] for(i in 2:floor(max(d$total_followup_new))){ assign(x=paste('num_in_fu_',i,sep=''), value=length(which(d$total_followup_new > i))) tbl <- table(d$censor_new[which(d$total_followup_new <= i & d$total_followup_new > (i-1))]) tmp <- tbl[which(names(tbl) == '1')] if(length(tmp) == 0){ tmp <- 0 } assign(x=paste('num_w_evt_',i,sep=''), value=tmp) tmp <- tbl[which(names(tbl) == '2')] if(length(tmp) == 0){ tmp <- 0 } assign(x=paste('num_w_cr_',i,sep=''), value=tmp) tmp <- tbl[which(names(tbl) == '0')] if(length(tmp) == 0){ tmp <- 0 } assign(x=paste('num_end_fu_',i,sep=''), value=tmp) } # Next considering 1000 requirement # Year 1 num_in_fu_1000_1 <- length(which(d.1000$total_followup.1000_new > 1.0)) tbl_1 <- table(d.1000$censor.1000_new[which(d.1000$total_followup.1000_new <= 1.0)]) num_w_evt_1000_1 <- tbl_1[2] num_w_cr_1000_1 <- tbl_1[3] num_end_fu_1000_1 <- tbl_1[1] for(i in 2:floor(max(d.1000$total_followup.1000_new))){ assign(x=paste('num_in_fu_1000_',i,sep=''), value=length(which(d.1000$total_followup.1000_new > i))) tbl <- table(d.1000$censor.1000_new[which(d.1000$total_followup.1000_new <= i & d.1000$total_followup.1000_new > (i-1))]) tmp <- tbl[which(names(tbl) == '1')] if(length(tmp) == 0){ tmp <- 0 } assign(x=paste('num_w_evt_1000_',i,sep=''), value=tmp) tmp <- tbl[which(names(tbl) == '2')] if(length(tmp) == 0){ tmp <- 0 } assign(x=paste('num_w_cr_1000_',i,sep=''), value=tmp) tmp <- tbl[which(names(tbl) == '0')] if(length(tmp) == 0){ tmp <- 0 } assign(x=paste('num_end_fu_1000_',i,sep=''), value=tmp) } fu_df_new <- data.frame('Year'=seq(1,12), 'Had event'=c(num_w_evt_1000_1,num_w_evt_1000_2,num_w_evt_1000_3,num_w_evt_1000_4, num_w_evt_1000_5,num_w_evt_1000_6,num_w_evt_1000_7,num_w_evt_1000_8, num_w_evt_1000_9,num_w_evt_1000_10,num_w_evt_1000_11,num_w_evt_1000_12), 'Had competing risk'=c(num_w_cr_1000_1,num_w_cr_1000_2,num_w_cr_1000_3,num_w_cr_1000_4, num_w_cr_1000_5,num_w_cr_1000_6,num_w_cr_1000_7,num_w_cr_1000_8, num_w_cr_1000_9,num_w_cr_1000_10,num_w_cr_1000_11,num_w_cr_1000_12), 'Censored'=c(num_end_fu_1000_1,num_end_fu_1000_2,num_end_fu_1000_3,num_end_fu_1000_4, num_end_fu_1000_5,num_end_fu_1000_6,num_end_fu_1000_7,num_end_fu_1000_8, num_end_fu_1000_9,num_end_fu_1000_10,num_end_fu_1000_11,num_end_fu_1000_12), 'Still in follow-up'=c(num_in_fu_1000_1,num_in_fu_1000_2,num_in_fu_1000_3,num_in_fu_1000_4, num_in_fu_1000_5,num_in_fu_1000_6,num_in_fu_1000_7,num_in_fu_1000_8, num_in_fu_1000_9,num_in_fu_1000_10,num_in_fu_1000_11,num_in_fu_1000_12), 'Had event'=c(num_w_evt_1,num_w_evt_2,num_w_evt_3,num_w_evt_4, num_w_evt_5,num_w_evt_6,num_w_evt_7,num_w_evt_8, num_w_evt_9,num_w_evt_10,num_w_evt_11,num_w_evt_12), 'Had competing risk'=c(num_w_cr_1,num_w_cr_2,num_w_cr_3,num_w_cr_4, num_w_cr_5,num_w_cr_6,num_w_cr_7,num_w_cr_8, num_w_cr_9,num_w_cr_10,num_w_cr_11,num_w_cr_12), 'Censored'=c(num_end_fu_1,num_end_fu_2,num_end_fu_3,num_end_fu_4, num_end_fu_5,num_end_fu_6,num_end_fu_7,num_end_fu_8, num_end_fu_9,num_end_fu_10,num_end_fu_11,num_end_fu_12), 'Still in follow-up'=c(num_in_fu_1,num_in_fu_2,num_in_fu_3,num_in_fu_4, num_in_fu_5,num_in_fu_6,num_in_fu_7,num_in_fu_8, num_in_fu_9,num_in_fu_10,num_in_fu_11,num_in_fu_12)) fu_df_new <- as.matrix(fu_df_new) colnames(fu_df_new) <- c('Year',rep(c('Had event','Had competing risk','Censored','Still in follow-up'),times=2)) latex(fu_df_new, file='', cgroup=c('','Primary 2nd line failure','Ignoring VL > 1000 criteria'),n.cgroup=c(1,4,4), col.just=c('r','r','r','r','r||','r','r','r','r'),caption='Summaries of subjects for Figure 6 by year.',landscape=TRUE, insert.bottom=paste('Estimated incidence for 2, 3, 5, and 7 years in ',dim(d.1000)[1],' subjects in primary analysis with non-zero follow-up: ',round(inc_2.1000_new,4),' ',ci_2.1000_new,'; ', round(inc_3.1000_new,4),' ',ci_3.1000_new,'; ',round(inc_5.1000_new,4),' ',ci_5.1000_new,'; ',round(inc_7.1000_new,4),' ',ci_7.1000_new,'. Estimated incidence for 2, 3, 5, and 7 years in ',dim(d.1000_p_rct)[1],' subjects in analysis including RCT subjects: ',round(inc_2.1000.p.rct_new,4),' ',ci_2.1000.p.rct_new,'; ',round(inc_3.1000.p.rct_new,4),' ',ci_3.1000.p.rct_new,'; ', round(inc_5.1000.p.rct_new,4),' ',ci_5.1000.p.rct_new,'; ',round(inc_7.1000.p.rct_new,4),' ',ci_7.1000.p.rct_new,'.',sep='')) @ \begin{figure} \caption{Incidence of failing a second line or starting a 3rd line regimen in the subset of N=\Sexpr{length(nnrti_ids)} patients whose first regimen contained an NNRTI censoring virologic failures that occurred after at least a year gap in viral load measurements.}\label{fig:new.by.nnrti} <>= par(mfrow=c(1,1),mar=c(4,4,1,1),oma=c(1,1,1,1)) plot(cum.inc.first.nnrti_new[[1]]$est[which(cum.inc.first.nnrti_new[[1]]$time <= 7.0)] ~ cum.inc.first.nnrti_new[[1]]$time[which(cum.inc.first.nnrti_new[[1]]$time <= 7.0)], type='l',axes=FALSE,xlab='Years from HAART initiation',ylab='Cumulative incidence',ylim=y.rge,lty=2) lines(cum.inc.first.nnrti.1000_new[[1]]$est[which(cum.inc.first.nnrti.1000_new[[1]]$time <= 7.0)] ~ cum.inc.first.nnrti.1000_new[[1]]$time[which(cum.inc.first.nnrti.1000_new[[1]]$time <= 7.0)], col='black') axis(1) axis(2) box(bty='l') legend('topleft',legend=c('Primary 2nd line failure definition','Ignoring VL>1000 criteria'),lty=c(1,2),bty='n',cex=0.75) @ \end{figure} <>= # Need to lump outcome for primary analysis and death d.1000$cr_4_ltfu_new <- ifelse(d.1000$overall_death_indicator_new == 1 | d.1000$outcome.1000_new == 1,1,0) d.1000$censor.ltfu_new <- ifelse(d.1000$lost1 == 0 & d.1000$cr_4_ltfu_new == 0,0, ifelse(d.1000$lost1 == 1 & d.1000$cr_4_ltfu_new == 0,1, ifelse(d.1000$cr_4_ltfu_new == 1,2,NA))) cum.inc.ltfu_new <- cuminc(ftime=d.1000$total_followup.1000_new, fstatus=d.1000$censor.ltfu_new, cencode='0',rho=0) inc.ltfu.3_new <- round(cum.inc.ltfu_new[[1]]$est[which(round(cum.inc.ltfu_new[[1]]$time,0) == 3)],2)[1] inc.ltfu.5_new <- round(cum.inc.ltfu_new[[1]]$est[which(round(cum.inc.ltfu_new[[1]]$time,0) == 5)],2)[1] inc.ltfu.7_new <- round(cum.inc.ltfu_new[[1]]$est[which(round(cum.inc.ltfu_new[[1]]$time,0) == 7)],2)[1] @ \begin{figure} \caption{Incidence of being lost to followup in the cohort used for the primary analysis. The incidence of being lost to follow-up at 3 years is \Sexpr{inc.ltfu.3_new}, at 5 years is \Sexpr{inc.ltfu.5_new}, and at 7 years is \Sexpr{inc.ltfu.7_new}.}\label{fig:new.l2fu} <>= par(mfrow=c(1,1),mar=c(4,4,1,1),oma=c(1,1,1,1)) plot(cum.inc.ltfu_new[[1]]$est ~ cum.inc.ltfu_new[[1]]$time, type='l',axes=FALSE, xlab='Years from HAART initiation',ylab='Cumulative incidence',ylim=range(cum.inc.ltfu_new[[1]]$est),lty=2) axis(1) axis(2) box(bty='l') @ \end{figure} <>= # Number of subjects still in follow-up at the end of each year and the # who experienced the event during the year # Now in the secondary analysis for Figure 2 # First ignoring 1000 requirement # Year 1 num_in_fu_1 <- length(which(d_nnrti$total_followup_nnrti_new > 1.0)) tbl_1 <- table(d_nnrti$censor.nnrti_new[which(d_nnrti$total_followup_nnrti_new <= 1.0)]) num_w_evt_1 <- tbl_1[2] num_w_cr_1 <- tbl_1[3] num_end_fu_1 <- tbl_1[1] for(i in 2:floor(max(d_nnrti$total_followup_nnrti_new))){ assign(x=paste('num_in_fu_',i,sep=''), value=length(which(d_nnrti$total_followup_nnrti_new > i))) tbl <- table(d_nnrti$censor.nnrti_new[which(d_nnrti$total_followup_nnrti_new <= i & d_nnrti$total_followup_nnrti_new > (i-1))]) assign(x=paste('num_w_evt_',i,sep=''), value=tbl[which(names(tbl) == '1')]) assign(x=paste('num_w_cr_',i,sep=''), value=tbl[which(names(tbl) == '2')]) assign(x=paste('num_end_fu_',i,sep=''), value=tbl[which(names(tbl) == '0')]) } num_w_cr_12 <- ifelse(length(num_w_cr_12) == 0,0,num_w_cr_12) num_w_cr_11 <- ifelse(length(num_w_cr_11) == 0,0,num_w_cr_11) num_w_cr_10 <- ifelse(length(num_w_cr_10) == 0,0,num_w_cr_10) num_w_cr_9 <- ifelse(length(num_w_cr_9) == 0,0,num_w_cr_9) num_w_evt_12 <- ifelse(length(num_w_evt_12) == 0,0,num_w_evt_12) # Next considering 1000 requirement # Year 1 num_in_fu_1000_1 <- length(which(d_nnrti.1000$total_followup_nnrti.1000_new > 1.0)) tbl_1 <- table(d_nnrti.1000$censor.nnrti.1000_new[which(d_nnrti.1000$total_followup_nnrti.1000_new <= 1.0)]) num_w_evt_1000_1 <- tbl_1[2] num_w_cr_1000_1 <- tbl_1[3] num_end_fu_1000_1 <- tbl_1[1] for(i in 2:floor(max(d_nnrti.1000$total_followup_nnrti.1000_new))){ assign(x=paste('num_in_fu_1000_',i,sep=''), value=length(which(d_nnrti.1000$total_followup_nnrti.1000_new > i))) tbl <- table(d_nnrti.1000$censor.nnrti.1000_new[which(d_nnrti.1000$total_followup_nnrti.1000_new <= i & d_nnrti.1000$total_followup_nnrti.1000_new > (i-1))]) assign(x=paste('num_w_evt_1000_',i,sep=''), value=tbl[which(names(tbl) == '1')]) assign(x=paste('num_w_cr_1000_',i,sep=''), value=tbl[which(names(tbl) == '2')]) assign(x=paste('num_end_fu_1000_',i,sep=''), value=tbl[which(names(tbl) == '0')]) } num_w_cr_1000_12 <- ifelse(length(num_w_cr_1000_12) == 0,0,num_w_cr_1000_12) num_w_cr_1000_11 <- ifelse(length(num_w_cr_1000_11) == 0,0,num_w_cr_1000_11) num_w_cr_1000_9 <- ifelse(length(num_w_cr_1000_9) == 0,0,num_w_cr_1000_9) num_w_cr_1000_8 <- ifelse(length(num_w_cr_1000_8) == 0,0,num_w_cr_1000_8) num_w_cr_1000_10 <- ifelse(length(num_w_cr_1000_10) == 0,0,num_w_cr_1000_10) num_w_evt_1000_10 <- ifelse(length(num_w_evt_1000_10) == 0,0,num_w_evt_1000_10) num_w_evt_1000_12 <- ifelse(length(num_w_evt_1000_12) == 0,0,num_w_evt_1000_12) num_w_evt_10 <- ifelse(length(num_w_evt_10) == 0,0,num_w_evt_10) fu_nnrti_df_new <- data.frame('Year'=seq(1,12), 'Had event'=c(num_w_evt_1000_1,num_w_evt_1000_2,num_w_evt_1000_3,num_w_evt_1000_4, num_w_evt_1000_5,num_w_evt_1000_6,num_w_evt_1000_7,num_w_evt_1000_8, num_w_evt_1000_9,num_w_evt_1000_10,num_w_evt_1000_11,num_w_evt_1000_12), 'Had competing risk'=c(num_w_cr_1000_1,num_w_cr_1000_2,num_w_cr_1000_3,num_w_cr_1000_4, num_w_cr_1000_5,num_w_cr_1000_6,num_w_cr_1000_7,num_w_cr_1000_8, num_w_cr_1000_9,num_w_cr_1000_10,num_w_cr_1000_11,num_w_cr_1000_12), 'Censored'=c(num_end_fu_1000_1,num_end_fu_1000_2,num_end_fu_1000_3,num_end_fu_1000_4, num_end_fu_1000_5,num_end_fu_1000_6,num_end_fu_1000_7,num_end_fu_1000_8, num_end_fu_1000_9,num_end_fu_1000_10,num_end_fu_1000_11,num_end_fu_1000_12), 'Still in follow-up'=c(num_in_fu_1000_1,num_in_fu_1000_2,num_in_fu_1000_3,num_in_fu_1000_4, num_in_fu_1000_5,num_in_fu_1000_6,num_in_fu_1000_7,num_in_fu_1000_8, num_in_fu_1000_9,num_in_fu_1000_10,num_in_fu_1000_11,num_in_fu_1000_12), 'Had event'=c(num_w_evt_1,num_w_evt_2,num_w_evt_3,num_w_evt_4, num_w_evt_5,num_w_evt_6,num_w_evt_7,num_w_evt_8, num_w_evt_9,num_w_evt_10,num_w_evt_11,num_w_evt_12), 'Had competing risk'=c(num_w_cr_1,num_w_cr_2,num_w_cr_3,num_w_cr_4, num_w_cr_5,num_w_cr_6,num_w_cr_7,num_w_cr_8, num_w_cr_9,num_w_cr_10,num_w_cr_11,num_w_cr_12), 'Censored'=c(num_end_fu_1,num_end_fu_2,num_end_fu_3,num_end_fu_4, num_end_fu_5,num_end_fu_6,num_end_fu_7,num_end_fu_8, num_end_fu_9,num_end_fu_10,num_end_fu_11,num_end_fu_12), 'Still in follow-up'=c(num_in_fu_1,num_in_fu_2,num_in_fu_3,num_in_fu_4, num_in_fu_5,num_in_fu_6,num_in_fu_7,num_in_fu_8, num_in_fu_9,num_in_fu_10,num_in_fu_11,num_in_fu_12)) fu_nnrti_df_new <- as.matrix(fu_nnrti_df_new) colnames(fu_nnrti_df_new) <- c('Year',rep(c('Had event','Had competing risk','Censored','Still in follow-up'),times=2)) latex(fu_nnrti_df_new, file='', cgroup=c('','Primary 2nd line failure','Ignoring VL > 1000 criteria'),n.cgroup=c(1,4,4), col.just=c('r','r','r','r','r||','r','r','r','r'),caption='Summaries of subjects for Figure 9 by year.',landscape=TRUE, insert.bottom=paste('Estimated incidence for 2, 3, 5, and 7 years in the ', dim(d_nnrti.1000)[1],' subjects in the secondary analysis with non-zero follow-up time: ',round(inc_2_nnrti.1000_new,4),' ',ci_2_nnrti.1000_new,'; ',round(inc_3_nnrti.1000_new,4),' ',ci_3_nnrti.1000_new,'; ',round(inc_5_nnrti.1000_new,4),' ',ci_5_nnrti.1000_new,'; ',round(inc_7_nnrti.1000_new,4),'; ',ci_7_nnrti.1000_new,sep='')) @ <>= # Summary on median followup time (and IQR) sub_d <- subset(d, total_followup_new > 0, select=c(age_fhaart, male.factor, aids_at_fhaart,aids_at_fhaart.factor, initial_haart_nnrti.factor,censor_new, baseline_cd4, baseline_log_rna,transmission_risk_larger_cat.factor, transmission_risk_cat.factor,total_followup_new,outcome_new,site.factor,year_fhaart)) followup.median_new <- format(round(median(d$total_followup_new),2),nsmall=2) followup.iqr_new <- format(round(quantile(d$total_followup_new,probs=c(0.25,0.75)),2),nsmall=2) sub_d.1000 <- subset(d.1000, total_followup.1000_new > 0, select=c(age_fhaart, male.factor, aids_at_fhaart,aids_at_fhaart.factor, initial_haart_nnrti.factor,censor.1000_new, baseline_cd4, baseline_log_rna,transmission_risk_larger_cat.factor, transmission_risk_cat.factor,total_followup.1000_new,outcome.1000_new,site.factor,year_fhaart)) followup.median.1000_new <- format(round(median(d.1000$total_followup.1000_new),2),nsmall=2) followup.iqr.1000_new <- format(round(quantile(d.1000$total_followup.1000_new,probs=c(0.25,0.75)),2),nsmall=2) sub_d_nnrti <- subset(d_nnrti, total_followup_nnrti_new > 0, select=c(age_fhaart, male.factor, aids_at_fhaart,aids_at_fhaart.factor, initial_haart_nnrti.factor,censor.nnrti_new, baseline_cd4, baseline_log_rna,transmission_risk_larger_cat.factor, transmission_risk_cat.factor,total_followup_nnrti_new,outcome_nnrti_new,site.factor,year_fhaart)) followup.median.nnrti_new <- format(round(median(d_nnrti$total_followup_nnrti_new),2),nsmall=2) followup.iqr.nnrti_new <- format(round(quantile(d_nnrti$total_followup_nnrti_new,probs=c(0.25,0.75)),2),nsmall=2) sub_d_nnrti.1000 <- subset(d_nnrti.1000, total_followup_nnrti.1000_new > 0, select=c(age_fhaart, male.factor, aids_at_fhaart,aids_at_fhaart.factor, initial_haart_nnrti.factor,censor.nnrti.1000_new, baseline_cd4, baseline_log_rna,transmission_risk_larger_cat.factor, transmission_risk_cat.factor,total_followup_nnrti.1000_new,outcome_nnrti.1000_new,site.factor,year_fhaart)) followup.median.nnrti.1000_new <- format(round(median(d_nnrti.1000$total_followup_nnrti.1000_new),2),nsmall=2) followup.iqr.nnrti.1000_new <- format(round(quantile(d_nnrti.1000$total_followup_nnrti.1000_new,probs=c(0.25,0.75)),2),nsmall=2) sub_d_2nd_start.1000 <- subset(d.1000, !is.na(total_followup_2nd_start.1000_new) & total_followup_2nd_start.1000_new > 0, select=c(age_at_second_haart, male.factor, aids_at_fhaart,aids_at_fhaart.factor, second_haart_cd4, second_haart_log10_rna, transmission_risk_larger_cat.factor,transmission_risk_cat.factor, total_followup_2nd_start.1000_new,outcome.1000_new,site.factor,year_second_haart)) followup.median_2nd_start.1000_new <- format(round(median(d.1000$total_followup_2nd_start.1000_new,na.rm=TRUE),2),nsmall=2) followup.iqr_2nd_start.1000_new <- format(round(quantile(d.1000$total_followup_2nd_start.1000_new,probs=c(0.25,0.75),na.rm=TRUE),2),nsmall=2) sub_d_2nd_start <- subset(d, !is.na(total_followup_2nd_start_new) & total_followup_2nd_start_new > 0, select=c(age_at_second_haart, male.factor, aids_at_fhaart,aids_at_fhaart.factor, second_haart_cd4, second_haart_log10_rna, transmission_risk_larger_cat.factor,transmission_risk_cat.factor, total_followup_2nd_start_new,outcome_new,site.factor,year_second_haart)) followup.median_2nd_start_new <- format(round(median(d$total_followup_2nd_start_new,na.rm=TRUE),2),nsmall=2) followup.iqr_2nd_start_new <- format(round(quantile(d$total_followup_2nd_start_new,probs=c(0.25,0.75),na.rm=TRUE),2),nsmall=2) @ <>= t2evt_all_1000_new <- time_to_evt_function(df=sub_d.1000,switch='all',vl='yes',censor=TRUE) t2evt_all_new <- time_to_evt_function(df=sub_d,switch='all',vl='no',censor=TRUE) t2evt_nnrti_1000_new <- time_to_evt_nnrti_function(df=sub_d_nnrti.1000,switch='nnrti',vl='yes',censor=TRUE) t2evt_nnrti_new <- time_to_evt_nnrti_function(df=sub_d_nnrti,switch='nnrti',vl='no',censor=TRUE) t2evt_2nd_start_1000_new <- time_to_evt_function_new_start(df=sub_d_2nd_start.1000, switch='second_line',vl='yes',censor=TRUE) t2evt_2nd_start_new <- time_to_evt_function_new_start(df=sub_d_2nd_start, switch='second_line',vl='no',censor=TRUE) @ <>= # Combining results from 1' and 2' analyses total.df.1000_new <- cbind(t2evt_all_1000_new[['primary.df']],subset(t2evt_all_1000_new[['secondary.df']],select=c('HR','CI','P'))) total.df.1000_new <- as.matrix(total.df.1000_new) colnames(total.df.1000_new) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.1000_new <- t2evt_all_1000_new[['time_to_evt']]$stats[2] evts.1000.wvl_new <- t2evt_all_1000_new[['time_to_evt.wvl']]$stats[2] tot.evts.1000_new <- table(d.1000$outcome.1000_new)[2] latex(total.df.1000_new, file='', rowname=NULL,caption='Hazard ratios for failing a second line or starting a 3rd line regimen censoring virologic failures that occurred after at least a year gap in viral load measurements.', insert.bottom=paste('Total number of events = ', tot.evts.1000_new,'; Number of events in model without viral load = ',evts.1000_new, '; Number of events in model with viral load = ',evts.1000.wvl_new,sep=''),n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df_new <- cbind(t2evt_all_new[['primary.df']],subset(t2evt_all_new[['secondary.df']],select=c('HR','CI','P'))) total.df_new <- as.matrix(total.df_new) colnames(total.df_new) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts_new <- t2evt_all_new[['time_to_evt']]$stats[2] evts.wvl_new <- t2evt_all_new[['time_to_evt.wvl']]$stats[2] tot.evts_new <- table(d$outcome_new)[2] latex(total.df_new, file='', rowname=NULL,caption='Hazard ratios for failing a second line or starting a 3rd line regimen, ignoring the Vl > 1000 criteria for failure and censoring virologic failures that occurred after at leat a year gap in viral load measurements.', insert.bottom=paste('Total number of events = ', tot.evts_new,'; Number of events in model without viral load = ',evts_new, '; Number of events in model with viral load = ',evts.wvl_new,sep=''),n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df.nnrti.1000_new <- cbind(t2evt_nnrti_1000_new[['primary.df']],subset(t2evt_nnrti_1000_new[['secondary.df']],select=c('HR','CI','P'))) total.df.nnrti.1000_new <- as.matrix(total.df.nnrti.1000_new) colnames(total.df.nnrti.1000_new) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.nnrti.1000_new <- t2evt_nnrti_1000_new[['time_to_evt']]$stats[2] evts.nnrti.1000.wvl_new <- t2evt_nnrti_1000_new[['time_to_evt.wvl']]$stats[2] tot.evts.nnrti.1000_new <- table(d_nnrti.1000$outcome_nnrti.1000_new)[2] num_nnrti_ids <- length(nnrti_ids) latex(total.df.nnrti.1000_new, file='', rowname=NULL,caption=paste('Hazard ratios for failing a second line or starting a 3rd line regimen in the subset of N=',num_nnrti_ids,' patients whose first regimen contained an NNRTI and censoring virologic failures that occurred after at least a year gap in viral load measurements.',sep=''),insert.bottom=paste('Total number of events = ', tot.evts.nnrti.1000_new,'; Number of events in model without viral load = ',evts.nnrti.1000_new,'; Number of events in model with viral load =', evts.nnrti.1000.wvl_new,sep=''), n.cgroup=c(1,3,3),cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df.nnrti_new <- cbind(t2evt_nnrti_new[['primary.df']],subset(t2evt_nnrti_new[['secondary.df']],select=c('HR','CI','P'))) total.df.nnrti_new <- as.matrix(total.df.nnrti_new) colnames(total.df.nnrti_new) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.nnrti_new <- t2evt_nnrti_new[['time_to_evt']]$stats[2] evts.nnrti.wvl_new <- t2evt_nnrti_new[['time_to_evt.wvl']]$stats[2] tot.evts.nnrti_new <- table(d_nnrti$outcome_nnrti_new)[2] latex(total.df.nnrti_new, file='', rowname=NULL,caption=paste('Hazard ratios for failing a second line or starting a 3rd line regimen, ignoring the Vl > 1000 criteria for failure and in the subset of N=',num_nnrti_ids,' patients whose first regimen contained an NNRTI and censoring virologic failures that occurred after at least a year gap in viral load measurements.',sep=''),insert.bottom=paste('Total number of events = ', tot.evts.nnrti_new,'; Number of events in model without viral load = ',evts.nnrti_new, '; Number of events in model with viral load = ',evts.nnrti.wvl_new,sep=''),n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses ## Changed 12/3/2013 from t2evt_2nd_start_new to t2evt_2nd_start_1000_new total.df_2nd_start.1000_new <- cbind(t2evt_2nd_start_1000_new[['primary.df']],subset(t2evt_2nd_start_1000_new[['secondary.df']],select=c('HR','CI','P'))) total.df_2nd_start.1000_new <- as.matrix(total.df_2nd_start.1000_new) colnames(total.df_2nd_start.1000_new) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts_2nd_start.1000_new <- t2evt_2nd_start_1000_new[['time_to_evt']]$stats[2] evts_2nd_start.1000.wvl_new <- t2evt_2nd_start_1000_new[['time_to_evt.wvl']]$stats[2] tot.evts_2nd_start.1000_new <- table(sub_d_2nd_start.1000$outcome.1000_new)[2] latex(total.df_2nd_start.1000_new, file='', rowname=NULL,caption='Hazard ratios for failing a second line or starting a 3rd line regimen using the start of second line regimen as baseline and censoring virologic failures that occurred after at least a year gap in viral load measurements.', insert.bottom=paste('Total number of events = ', tot.evts_2nd_start.1000_new,'; Number of events in model without viral load = ',evts_2nd_start.1000_new, '; Number of events in model with viral load = ',evts_2nd_start.1000.wvl_new,sep=''),n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ \clearpage \subsubsection{Results using imputed data in censored analysis.} %--------------------------------------------------------------------------------------% % Imputation results % %--------------------------------------------------------------------------------------% <>= # Combining results from 1' and 2' analyses total.df.impute.1000_new <- cbind(t2evt_all_1000_new[['primary.df.impute']],subset(t2evt_all_1000_new[['secondary.df.impute']],select=c('HR','CI','P'))) total.df.impute.1000_new <- as.matrix(total.df.impute.1000_new) colnames(total.df.impute.1000_new) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.1000.impute_new <- t2evt_all_1000_new[['impute.mod']]$stats[2] evts.wvl.1000.impute_new <- t2evt_all_1000_new[['impute.mod.wvl']]$stats[2] tot.evts.1000_new <- table(d.1000$outcome.1000_new)[2] latex(total.df.impute.1000_new, file='', rowname=NULL,caption='Hazard ratios for failing a second line or starting a 3rd line regimen with multiply imputed data censoring virologic failures that occurred after at least a year gap in viral load measurements.',insert.bottom=paste('Total number of events = ', tot.evts.1000_new, '; Number of events in model without viral load = ',evts.1000.impute_new, '; Number of events in model with viral load = ', evts.wvl.1000.impute_new,sep=''), n.cgroup=c(1,3,3),where='!h', cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df.impute_new <- cbind(t2evt_all_new[['primary.df.impute']],subset(t2evt_all_new[['secondary.df.impute']],select=c('HR','CI','P'))) total.df.impute_new <- as.matrix(total.df.impute_new) colnames(total.df.impute_new) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.impute_new <- t2evt_all_new[['impute.mod']]$stats[2] evts.wvl.impute_new <- t2evt_all_new[['impute.mod.wvl']]$stats[2] tot.evts.impute_new <- table(d$outcome_new)[2] latex(total.df.impute_new, file='', rowname=NULL,caption='Hazard ratios for failing a second line or starting a 3rd line regimen, ignoring the Vl > 1000 criteria for failure with multiply imputed data.',insert.bottom=paste('Total number of events = ', tot.evts.impute_new,'; Number of events in model without viral load = ',evts.impute_new, '; Number of events in model with viral load = ', evts.wvl.impute_new,sep=''), n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df.impute.nnrti.1000_new <- cbind(t2evt_nnrti_1000_new[['primary.df.impute']],subset(t2evt_nnrti_1000_new[['secondary.df.impute']],select=c('HR','CI','P'))) total.df.impute.nnrti.1000_new <- as.matrix(total.df.impute.nnrti.1000_new) colnames(total.df.impute.nnrti.1000_new) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.nnrti.1000.impute_new <- t2evt_nnrti_1000_new[['impute.mod']]$stats[2] evts.wvl.nnrti.1000.impute_new <- t2evt_nnrti_1000_new[['impute.mod.wvl']]$stats[2] tot.evts.nnrti.1000.impute_new <- table(d_nnrti.1000$outcome_nnrti.1000_new)[2] latex(total.df.impute.nnrti.1000_new, file='', rowname=NULL,caption=paste('Hazard ratios for failing a second line or starting a 3rd line regimen in the subset of N=',num_nnrti_ids,' patients whose first regimen contained an NNRTI with multiply imputed data.',sep=''),insert.bottom=paste('Total number of events = ', tot.evts.nnrti.1000.impute_new, '; Number of events in model without viral load = ',evts.nnrti.1000.impute_new, '; Number of events in model with viral load = ', evts.wvl.nnrti.1000.impute_new,sep=''), n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df.impute.nnrti_new <- cbind(t2evt_nnrti_new[['primary.df.impute']],subset(t2evt_nnrti_new[['secondary.df.impute']],select=c('HR','CI','P'))) total.df.impute.nnrti_new <- as.matrix(total.df.impute.nnrti_new) colnames(total.df.impute.nnrti_new) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts.nnrti.impute_new <- t2evt_nnrti_new[['impute.mod']]$stats[2] evts.wvl.nnrti.impute_new <- t2evt_nnrti_new[['impute.mod.wvl']]$stats[2] tot.evts.nnrti.impute_new <- table(d_nnrti$outcome_nnrti_new)[2] latex(total.df.impute.nnrti_new, file='', rowname=NULL,caption=paste('Hazard ratios for failing a second line or starting a 3rd line regimen, ignoring the Vl > 1000 criteria for failure and in the subset of N=',num_nnrti_ids,' patients whose first regimen contained an NNRTI with multiply imputed data.',sep=''),insert.bottom=paste('Total number of events = ', tot.evts.nnrti.impute_new, '; Number of events in model without viral load = ',evts.nnrti.impute_new, '; Number of events in model with viral load = ', evts.wvl.nnrti.impute_new,sep=''), n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ <>= # Combining results from 1' and 2' analyses total.df_impute_2nd_start.1000_new <- cbind(t2evt_2nd_start_1000_new[['primary.df.impute']],subset(t2evt_2nd_start_1000_new[['secondary.df.impute']],select=c('HR','CI','P'))) total.df_impute_2nd_start.1000_new <- as.matrix(total.df_impute_2nd_start.1000_new) colnames(total.df_impute_2nd_start.1000_new) <- c('Covariate','HR','95\\% CI','P','HR','95\\% CI','P') evts_impute_2nd_start.1000_new <- t2evt_2nd_start_1000_new[['impute.mod']]$stats[2] evts_impute_2nd_start.1000.wvl_new <- t2evt_2nd_start_1000_new[['impute.mod.wvl']]$stats[2] tot.evts_impute_2nd_start.1000_new <- table(sub_d_2nd_start.1000$outcome.1000_new)[2] latex(total.df_impute_2nd_start.1000_new, file='', rowname=NULL,caption='Hazard ratios for failing a second line or starting a 3rd line regimen using start of second line regimen as baseline and censoring virologic failures that occurred after at least a year gap in viral load measurements. Data were multiply imputed.', insert.bottom=paste('Total number of events = ', tot.evts_impute_2nd_start.1000_new,'; Number of events in model without viral load = ',evts_impute_2nd_start.1000_new, '; Number of events in model with viral load = ',evts_impute_2nd_start.1000.wvl_new,sep=''),n.cgroup=c(1,3,3), cgroup=c('','Model without viral load','Model with viral load'),col.just=c('l','r','r','r||','r','r','r')) @ \clearpage \subsubsection{Follow-up points to address prior to submission -- new analysis} <>= # Median frequency of viral load measurements per site -- # of viral load measurements dividied by the follow-up time after HAART initiation per person. Then compute median by site. # First need to add total_followup to rna rna$total_followup.1000_new <- d.1000[match(rna$unique_id,d.1000$unique_id,nomatch=NA),'total_followup.1000'] tmp <- subset(rna, !is.na(total_followup.1000_new) & rna_d <= year_gap_date) tmp$unique_id.factor <- factor(tmp$unique_id, levels=unique(d.1000$unique_id)) num_vl_new <- tapply(tmp$rna_v, INDEX=tmp$unique_id.factor, FUN=function(y){ if(all(is.na(y))){ return(0) } else { return(length(y[which(!is.na(y))])) } }) tot_fu_vl_new <- d.1000$total_followup.1000[!duplicated(d.1000$unique_id)] freq_vl_new <- num_vl_new/tot_fu_vl_new num_vl_measurements_new.df <- data.frame('unique_id'=names(num_vl_new), 'num_vl_per_person'=as.numeric(num_vl_new), 'vl_frequency'=freq_vl_new) all_visits$vl_frequency_new <- num_vl_measurements_new.df[match(all_visits$unique_id,num_vl_measurements_new.df$unique_id,nomatch=NA),'vl_frequency'] all_visits$num_vl_per_person_new <- num_vl_measurements_new.df[match(all_visits$unique_id,num_vl_measurements_new.df$unique_id,nomatch=NA),'num_vl_per_person'] vl_frequency_by_site_new <- tapply(all_visits$vl_frequency_new[!duplicated(all_visits$unique_id)],INDEX=all_visits$site.factor[!duplicated(all_visits$unique_id)],FUN=median,na.rm=TRUE) vl_frequency_overall_new <- quantile(all_visits$vl_frequency_new[!duplicated(all_visits$unique_id)], probs=c(0.25,0.50,0.75),na.rm=TRUE) vl_per_person_by_site_new <- tapply(all_visits$num_vl_per_person_new[!duplicated(all_visits$unique_id)],INDEX=all_visits$site.factor[!duplicated(all_visits$unique_id)],FUN=median,na.rm=TRUE) # Median frequency of CD4 measurements per site -- # of CD4 measurements dividied by the follow-up time after HAART initiation per person. Then compute median by site. # First need to add total_followup to cd4 cd4$total_followup.1000_new <- d.1000[match(cd4$unique_id,d.1000$unique_id,nomatch=NA),'total_followup.1000'] tmp <- subset(cd4, !is.na(total_followup.1000_new)) tmp$unique_id.factor <- factor(tmp$unique_id, levels=unique(d.1000$unique_id)) num_cd4_new <- tapply(tmp$cd4_v, INDEX=tmp$unique_id.factor, FUN=function(y){ if(all(is.na(y))){ return(0) } else { return(length(y[which(!is.na(y))])) } }) tot_fu_cd4_new <- d.1000$total_followup.1000_new[!duplicated(d.1000$unique_id)] freq_cd4_new <- num_cd4_new/tot_fu_cd4_new num_cd4_measurements_new.df <- data.frame('unique_id'=names(num_cd4_new), 'num_cd4_per_person'=as.numeric(num_cd4_new), 'cd4_frequency'=freq_cd4_new) all_visits$cd4_frequency_new <- num_cd4_measurements_new.df[match(all_visits$unique_id,num_cd4_measurements_new.df$unique_id,nomatch=NA),'cd4_frequency'] cd4_frequency_by_site_new <- tapply(all_visits$cd4_frequency_new[!duplicated(all_visits$unique_id)],INDEX=all_visits$site.factor[!duplicated(all_visits$unique_id)],FUN=median,na.rm=TRUE) cd4_frequency_overall_new <- quantile(all_visits$cd4_frequency_new[!duplicated(all_visits$unique_id)], probs=c(0.25,0.50,0.75),na.rm=TRUE) all_visits$num_cd4_per_person_new <- num_cd4_measurements_new.df[match(all_visits$unique_id,num_vl_measurements_new.df$unique_id,nomatch=NA),'num_cd4_per_person'] cd4_per_person_by_site_new <- tapply(all_visits$num_cd4_per_person_new[!duplicated(all_visits$unique_id)],INDEX=all_visits$site.factor[!duplicated(all_visits$unique_id)],FUN=median,na.rm=TRUE) # For median follow-up time (IQR), calculating for the entire all_visits cohort (6598) and then for those in d.1000 (6524 -- excludes the 96 with 0 follow-up) all_visits$total_followup.1000_new <- d.1000[match(all_visits$unique_id,d.1000$unique_id,nomatch=NA),'total_followup.1000_new'] all_visits$total_followup.1000_new <- ifelse(is.na(all_visits$total_followup.1000_new),0,all_visits$total_followup.1000_new) entire_fu_new <- describe(all_visits$total_followup.1000_new[!duplicated(all_visits$unique_id)]) d.1000_fu_new <- describe(d.1000$total_followup.1000_new[!duplicated(d.1000$unique_id)]) @ <>= # Creating df for CD4 and VL frequencies by site df_site_new <- data.frame('Site'=names(cd4_frequency_by_site_new), 'By year'=round(cd4_frequency_by_site_new,2), 'Overall'=round(cd4_per_person_by_site_new,2), 'By year'=round(vl_frequency_by_site_new,2), 'Overall'=round(vl_per_person_by_site_new,2)) df_site_new <- as.matrix(df_site_new) colnames(df_site_new) <- c('Site','By year','Overall','By year','Overall') overall_cd4_new <- format(round(cd4_frequency_overall_new[2],2),nsmall=2) overall_vl_new <- format(round(vl_frequency_overall_new[2],2),nsmall=2) latex(df_site_new, rowname=NULL, file='', caption='Frequency of CD4 and viral load measurements by site.',where='!h',cgroup=c('','CD4','HIV-1 RNA'),n.cgroup=c(1,2,2), insert.bottom=paste('Median rate of CD4 measurement frequency=',overall_cd4_new,'; Median rate of HIV-1 RNA measurement frequency=',overall_vl_new,'.',sep='')) @ <>= # Finally, in the secondary analysis (5620 patients who started an NNRTI for their initial regimen -- but only 5550 who had > 0 total followup), # need the number of patients who started a 3rd line, the number who failed a second line, and the number who met the composite endpoint. table(d_nnrti.1000$overall_third_line_regimen) table(d_nnrti.1000$overall_failure_on_second_line_nnrti.1000) table(d_nnrti.1000$overall_third_line_regimen,d_nnrti.1000$overall_failure_on_second_line_nnrti.1000) # And median (IQR) total follow-up for this cohort describe(d_nnrti.1000$total_followup_nnrti.1000[!duplicated(d_nnrti.1000$unique_id)]) @ <>= # Carina wants a simple chi-square comparison of deaths in 2nd line failure vs 3rd line use. tbl.4.2nd.line.deaths <- with(subset(art, !duplicated(unique_id)),table(overall_death_indicator.factor, overall_failure_on_second_line.1000.factor)) tbl.4.3rd.line.deaths <- with(subset(all_visits, !duplicated(unique_id)), table(overall_death_indicator.factor, overall_third_line_regimen.factor)) x <- matrix(c(tbl.4.2nd.line.deaths[3:4],tbl.4.3rd.line.deaths[3:4]),byrow=TRUE,nrow=2,ncol=2) chisq.test(x) @ \clearpage \section{Appendix - R/Package Versions} \small <>= version['version.string'] pack <- installed.packages() pack.out <- pack[,c('Package','Version','Priority','Depends')] pack.in.session <- (.packages()) pack.out <- data.frame(pack.out[pack.out[,1] %in% pack.in.session,])[,-1] pack.out[!pack.out$Priority %in% c('base','recommended'),-2,drop=FALSE] @ \subsection{Extra tables from descriptive section} <>= sub_art2 <- subset(sub_art, select=c(unique_id,regimen_number,art_sd,art_id,art_rs)) names(sub_art2) <- c('ID','Regimen number','ART start date','ART','Reason for switching ART regimen') latex(sub_art2, file='', landscape=TRUE,exclude1=FALSE,long=TRUE,longtable=TRUE,lines.page=34,caption='List of regimens for each person who started a third line regimen and was not enrolled in a clinical trial.',rowname=NULL,format.Date='%Y-%m-%d',where='!h') @ \end{document} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Functions to be saved to separate *.R files % % and then deleted from this file. % % They are sourced at the beginning of the Sweave file % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% virologic_failure_function <- function(switch,rna,detectable_level){ if(switch == 'bpi'){ date_var <- 'min_second_line_start_date_bpi' ind_var <- 'bpi_after_bpi' } else if(switch == 'nnrti'){ date_var <- 'min_second_line_start_date_nnrti' ind_var <- 'bpi_after_nnrti' } else if(switch == 'all'){ date_var <- 'min_second_line_start_date_bpi_or_nnrti' ind_var <- 'bpi_after_bpi_or_nnrti' } # Now defining those who had virologic failure on a 2nd line regimen dr <- subset(rna, !is.na(rna_v)) id.site <- dr$unique_id vl.detect <- ifelse(dr$rna_v > detectable_level,1,0) unique.id.site <- unique(id.site) vl <- dr$rna_v fail <- time.failure <- date.failure <- rep(NA,length(unique.id.site)) fail.1000 <- time.failure.1000 <- date.failure.1000 <- rep(NA,length(unique.id.site)) for(i in 1:length(unique.id.site)){ tm <- subset(dr, unique_id == unique.id.site[i]) if(any(!is.na(tm[[date_var]]))){ time.since2 <- as.numeric(difftime(tm$rna_d,tm[[date_var]],units='days')) vl.detect.id <- vl.detect[id.site==unique.id.site[i]] vl.id <- vl[id.site == unique.id.site[[i]]] leq.180 <- time.since2 <= 180 min.time.since2gt180 <- ifelse(any(time.since2>180),min(time.since2[time.since2>180]),999999) # fail1 = 1 if all measurements during the first 180 days are detectable and the first measurement after # 180 days is detectable also # fail1 = 1 also if there are no measurements during the first 180 days but their first measurement after 180 # days is detectable fail1 <- vl.detect.id == 1 & time.since2 == min.time.since2gt180 & prod(vl.detect.id[leq.180])==1 # All measurements < 180 days need to be detectable lag.vl.detect.id <- c(NA,vl.detect.id) vl.detect.id.pro <- c(vl.detect.id,NA) vl.detect.id.pro2 <- c(vl.detect.id[-1],NA,NA) tmp.time.since2 <- c(time.since2,0) fail2 <- ifelse(is.na(lag.vl.detect.id) | is.na(vl.detect.id.pro) | is.na(vl.detect.id.pro2),FALSE, ifelse(lag.vl.detect.id == 0 & vl.detect.id.pro == 1 & vl.detect.id.pro2 == 1 & tmp.time.since2 > 0,TRUE,FALSE)) fail4 <- c(FALSE,fail2[-c(length(fail2)-1,length(fail2))]) # Shifted so that failure is at time of second detectable measure fail3 <- fail4 | fail1 fail[i] <- FALSE if(any(fail3)) { time.failure3 <- min(time.since2[fail3],na.rm=TRUE) fail[i] <- as.numeric(!is.na(time.failure3)) time.failure[i] <- time.failure3 date.failure[i] <- tm$rna_d[which(time.since2 == time.failure3)] } gt.1000 <- ifelse(vl.id > 1000, 1, 0) fail5 <- ifelse(leq.180 == FALSE & gt.1000 == 1, 1, 0) n.undetect <- cumsum(1-vl.detect.id) # If failure needs to be after start of 2nd line regimen, need to put line of code below and not one commented out # underneath it. fail5a <- ifelse(leq.180 == TRUE & time.since2 > 0 & gt.1000 == 1 & n.undetect > 0,1,0) fail6 <- fail3 | fail5 | fail5a fail.1000[i] <- FALSE if(any(fail6)){ time.failure6 <- min(time.since2[fail6],na.rm=TRUE) fail.1000[i] <- as.numeric(!is.na(time.failure6)) time.failure.1000[i] <- time.failure6 date.failure.1000[i] <- tm$rna_d[which(time.since2 == time.failure6)] } } else { fail[i] <- FALSE time.failure[i] <- date.failure[i] <- NA time.failure.1000[i] <- date.failure.1000[i] <- NA } } tr <- data.frame('unique_id'=unique.id.site, 'vl_failure'=fail, 'days_from_second_start_to_vl_failure'=time.failure, 'date_vl_failure'=date.failure, 'vl_failure.1000'=fail.1000, 'days_from_second_start_to_vl_failure.1000'=time.failure.1000, 'date_vl_failure.1000'=date.failure.1000) tr$date_vl_failure <- as.Date(tr$date_vl_failure, origin='1970-01-01') tr$date_vl_failure <- ifelse(tr$days_from_second_start_to_vl_failure < 0,NA,tr$date_vl_failure) tr$date_vl_failure <- as.Date(tr$date_vl_failure,origin='1970-01-01') tr$days_from_second_start_to_vl_failure <- ifelse(tr$days_from_second_start_to_vl_failure < 0,NA, tr$days_from_second_start_to_vl_failure) tr$vl_failure <- ifelse(is.na(tr$days_from_second_start_to_vl_failure),FALSE,tr$vl_failure) tr$date_vl_failure.1000 <- as.Date(tr$date_vl_failure.1000, origin='1970-01-01') tr$date_vl_failure.1000 <- ifelse(tr$days_from_second_start_to_vl_failure.1000 < 0,NA,tr$date_vl_failure.1000) tr$date_vl_failure.1000 <- as.Date(tr$date_vl_failure.1000, origin='1970-01-01') tr$days_from_second_start_to_vl_failure.1000 <- ifelse(tr$days_from_second_start_to_vl_failure.1000 < 0,NA, tr$days_from_second_start_to_vl_failure.1000) tr$vl_failure.1000 <- ifelse(is.na(tr$days_from_second_start_to_vl_failure.1000),FALSE,tr$vl_failure.1000) return(tr) } # end virologic failure function %------------------------------------------------------------------------------------% time_to_evt_function <- function(df,switch,vl,censor){ if(switch == 'all' & vl == 'yes' & !censor){ total_followup <- 'total_followup.1000' outcome <- 'outcome.1000' } else if(switch == 'all' & vl == 'no' & !censor){ total_followup <- 'total_followup' outcome <- 'outcome' } else if(switch == 'all' & vl == 'yes' & censor){ total_followup <- 'total_followup.1000_new' outcome <- 'outcome.1000_new' } else if(switch == 'all' & vl == 'no' & censor){ total_followup <- 'total_followup_new' outcome <- 'outcome_new' } else if(switch == 'nnrti' & vl == 'yes' & !censor){ total_followup <- 'total_followup_nnrti.1000' outcome <- 'outcome_nnrti.1000' } else if(switch == 'nnrti' & vl == 'no' & !censor){ total_followup <- 'total_followup_nnrti' outcome <- 'outcome_nnrti' } else if(switch == 'nnrti' & vl == 'yes' & censor){ total_followup <- 'total_followup_nnrti.1000_new' outcome <- 'outcome_nnrti.1000_new' } else if(switch == 'nnrti' & vl == 'no' & censor){ total_followup <- 'total_followup_nnrti_new' outcome <- 'outcome_nnrti_new' } Srv.first <- Surv(df[[total_followup]], df[[outcome]]) ddist <<- datadist(df) options(datadist='ddist') # Primary analysis excluding log viral load from model time_to_evt <- cph(Srv.first ~ rcs(age_fhaart,3) + male.factor + aids_at_fhaart.factor + rcs(sqrt(baseline_cd4),3) + rcs(year_fhaart,3) + transmission_risk_larger_cat.factor + initial_haart_nnrti.factor + strat(site.factor), data=df) # age at first HAART age_fhaart1 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=c(40,20),year.comp=2006) age_fhaart2 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=c(40,30),year.comp=2006) age_fhaart3 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=c(40,50),year.comp=2006) # CD4 at first HAART cd4_1 <- summary.fun(switch=switch,time_to_evt, cd4.comp=c(350,50),age.comp=40,year.comp=2006) cd4_2 <- summary.fun(switch=switch,time_to_evt, cd4.comp=c(350,100),age.comp=40,year.comp=2006) cd4_3 <- summary.fun(switch=switch,time_to_evt, cd4.comp=c(350,200),age.comp=40,year.comp=2006) # year of first HAART year_1 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=40,year.comp=c(2006,2002)) year_2 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=40,year.comp=c(2006,2004)) year_3 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=40,year.comp=c(2006,2008)) year_4 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=40,year.comp=c(2006,2010)) which.age <- which(rownames(age_fhaart1) == 'age_fhaart') + 1 which.male <- which(rownames(age_fhaart1) == 'male.factor - Male:Female') + 1 which.aids <- which(rownames(age_fhaart1) == 'aids_at_fhaart.factor - AIDS:Not AIDS') + 1 which.year <- which(rownames(age_fhaart1) == 'year_fhaart') + 1 which.risk1 <- which(rownames(age_fhaart1) == 'transmission_risk_larger_cat.factor - Homo/Bisexual:Heterosexual') + 1 which.risk2 <- which(rownames(age_fhaart1) == 'transmission_risk_larger_cat.factor - IDU:Heterosexual') + 1 which.risk3 <- which(rownames(age_fhaart1) == 'transmission_risk_larger_cat.factor - Other:Heterosexual') + 1 which.cd4 <- which(rownames(cd4_1) == 'baseline_cd4') + 1 which.nnrti <- which(rownames(age_fhaart1) == 'initial_haart_nnrti.factor - Other:NNRTI') + 1 primary.hr <- c(format(round(age_fhaart1[which.male,'Effect'],2),nsmall=2), '', '', format(round(age_fhaart1[which.age,'Effect'],2),nsmall=2), format(round(age_fhaart2[which.age,'Effect'],2),nsmall=2), '1.00', format(round(age_fhaart3[which.age,'Effect'],2),nsmall=2), '', format(round(age_fhaart1[which.aids,'Effect'],2),nsmall=2), '', '', format(round(year_1[which.year,'Effect'],2),nsmall=2), format(round(year_2[which.year,'Effect'],2),nsmall=2), '1.00', format(round(year_3[which.year,'Effect'],2),nsmall=2), format(round(year_4[which.year,'Effect'],2),nsmall=2), '', '', '1.00', format(round(age_fhaart1[which.risk1,'Effect'],2),nsmall=2), format(round(age_fhaart1[which.risk2,'Effect'],2),nsmall=2), format(round(age_fhaart1[which.risk3,'Effect'],2),nsmall=2), '', '', format(round(cd4_1[which.cd4,'Effect'],2),nsmall=2), format(round(cd4_2[which.cd4,'Effect'],2),nsmall=2), format(round(cd4_3[which.cd4,'Effect'],2),nsmall=2), '1.00', '', '', '1.00', format(round(age_fhaart1[which.nnrti,'Effect'],2),nsmall=2), '', rep('',times=4)) primary.lci <- c(format(round(age_fhaart1[which.male,'Lower 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1[which.age,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart2[which.age,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart3[which.age,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart1[which.aids,'Lower 0.95'],2),nsmall=2), '', '', format(round(year_1[which.year,'Lower 0.95'],2),nsmall=2), format(round(year_2[which.year,'Lower 0.95'],2),nsmall=2), '', format(round(year_3[which.year,'Lower 0.95'],2),nsmall=2), format(round(year_4[which.year,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1[which.risk1,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1[which.risk2,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1[which.risk3,'Lower 0.95'],2),nsmall=2), '', '', format(round(cd4_1[which.cd4,'Lower 0.95'],2),nsmall=2), format(round(cd4_2[which.cd4,'Lower 0.95'],2),nsmall=2), format(round(cd4_3[which.cd4,'Lower 0.95'],2),nsmall=2), '', '', '', '', format(round(age_fhaart1[which.nnrti,'Lower 0.95'],2),nsmall=2), '', rep('',times=4)) primary.uci <- c(format(round(age_fhaart1[which.male,'Upper 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1[which.age,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart2[which.age,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart3[which.age,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart1[which.aids,'Upper 0.95'],2),nsmall=2), '', '', format(round(year_1[which.year,'Upper 0.95'],2),nsmall=2), format(round(year_2[which.year,'Upper 0.95'],2),nsmall=2), '', format(round(year_3[which.year,'Upper 0.95'],2),nsmall=2), format(round(year_4[which.year,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1[which.risk1,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1[which.risk2,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1[which.risk3,'Upper 0.95'],2),nsmall=2), '', '', format(round(cd4_1[which.cd4,'Upper 0.95'],2),nsmall=2), format(round(cd4_2[which.cd4,'Upper 0.95'],2),nsmall=2), format(round(cd4_3[which.cd4,'Upper 0.95'],2),nsmall=2), '', '', '', '', format(round(age_fhaart1[which.nnrti,'Upper 0.95'],2),nsmall=2), '', rep('',times=4)) primary.ci <- paste('(',primary.lci,', ',primary.uci,')',sep='') primary.ci <- ifelse(primary.ci == '(, )','',primary.ci) primary.p <- anova(time_to_evt)[,'P'] primary.p <- ifelse(primary.p < 0.001,'< 0.001', ifelse(primary.p >= 0.001 & primary.p < 0.01,format(round(primary.p,3),nsmall=2),format(round(primary.p,2),nsmall=2))) which.age.p <- which(names(primary.p) == 'age_fhaart') which.male.p <- which(names(primary.p) == 'male.factor') which.aids.p <- which(names(primary.p) == 'aids_at_fhaart.factor') which.cd4.p <- which(names(primary.p) == 'baseline_cd4') which.year.p <- which(names(primary.p) == 'year_fhaart') which.risk.p <- which(names(primary.p) == 'transmission_risk_larger_cat.factor') which.nnrti.p <- which(names(primary.p) == 'initial_haart_nnrti.factor') primary.p.final <- c(primary.p[which.male.p], '', primary.p[which.age.p], rep('',times=5), primary.p[which.aids.p], '', primary.p[which.year.p], rep('',times=6), primary.p[which.risk.p], rep('',5), primary.p[which.cd4.p], rep('',times=5), primary.p[which.nnrti.p],rep('',times=7)) primary.df <- data.frame('Covariate'=c('Male','','Age (years)','20','30','40 (ref)','50', '','AIDS at first HAART','','Year of first HAART', '2002','2004','2006 (ref)','2008','2010','', 'Route of infection', 'Heterosexual (ref)','Homo/Bisexual','IDU','Other','','CD4 at first HAART', '50','100','200','350 (ref)','', 'Type of first HAART', 'NNRTI (ref)', 'Other', '', 'HIV1-RNA at first HAART (log-transformed)', '4','5 (ref)','6'), 'HR'=primary.hr, 'CI'=primary.ci, 'P'=primary.p.final) #--------------------------------------------------------# # Secondary analysis including log viral load from model #--------------------------------------------------------# time_to_evt.wvl <- cph(Srv.first ~ rcs(age_fhaart,3) + male.factor + aids_at_fhaart.factor + rcs(sqrt(baseline_cd4),3) + rcs(baseline_log_rna,3) + rcs(year_fhaart,3) + transmission_risk_larger_cat.factor + initial_haart_nnrti.factor + strat(site.factor), data=df) # age at first HAART age_fhaart1.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=c(40,20),year.comp=2006,vl.comp=5) age_fhaart2.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=c(40,30),year.comp=2006,vl.comp=5) age_fhaart3.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=c(40,50),year.comp=2006,vl.comp=5) # CD4 at first HAART cd4_1.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=c(350,50),age.comp=40,year.comp=2006,vl.comp=5) cd4_2.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=c(350,100),age.comp=40,year.comp=2006,vl.comp=5) cd4_3.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=c(350,200),age.comp=40,year.comp=2006,vl.comp=5) # year of first HAART year_1.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2002),vl.comp=5) year_2.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2004),vl.comp=5) year_3.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2008),vl.comp=5) year_4.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2010),vl.comp=5) vl_1 <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=2006,vl.comp=c(5,4)) vl_2 <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=2006,vl.comp=c(5,6)) which.age <- which(rownames(age_fhaart1.wvl) == 'age_fhaart') + 1 which.male <- which(rownames(age_fhaart1.wvl) == 'male.factor - Male:Female') + 1 which.aids <- which(rownames(age_fhaart1.wvl) == 'aids_at_fhaart.factor - AIDS:Not AIDS') + 1 which.year <- which(rownames(age_fhaart1.wvl) == 'year_fhaart') + 1 which.risk1 <- which(rownames(age_fhaart1.wvl) == 'transmission_risk_larger_cat.factor - Homo/Bisexual:Heterosexual') + 1 which.risk2 <- which(rownames(age_fhaart1.wvl) == 'transmission_risk_larger_cat.factor - IDU:Heterosexual') + 1 which.risk3 <- which(rownames(age_fhaart1.wvl) == 'transmission_risk_larger_cat.factor - Other:Heterosexual') + 1 which.cd4 <- which(rownames(cd4_1.wvl) == 'baseline_cd4') + 1 which.vl <- which(rownames(vl_1) == 'baseline_log_rna') + 1 which.nnrti <- which(rownames(age_fhaart1.wvl) == 'initial_haart_nnrti.factor - Other:NNRTI') + 1 primary.hr.wvl <- c(format(round(age_fhaart1.wvl[which.male,'Effect'],2),nsmall=2), '', '', format(round(age_fhaart1.wvl[which.age,'Effect'],2),nsmall=2), format(round(age_fhaart2.wvl[which.age,'Effect'],2),nsmall=2), '1.00', format(round(age_fhaart3.wvl[which.age,'Effect'],2),nsmall=2), '', format(round(age_fhaart1.wvl[which.aids,'Effect'],2),nsmall=2), '', '', format(round(year_1.wvl[which.year,'Effect'],2),nsmall=2), format(round(year_2.wvl[which.year,'Effect'],2),nsmall=2), '1.00', format(round(year_3.wvl[which.year,'Effect'],2),nsmall=2), format(round(year_4.wvl[which.year,'Effect'],2),nsmall=2), '', '', '1.00', format(round(age_fhaart1.wvl[which.risk1,'Effect'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk2,'Effect'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk3,'Effect'],2),nsmall=2), '','', format(round(cd4_1.wvl[which.cd4,'Effect'],2),nsmall=2), format(round(cd4_2.wvl[which.cd4,'Effect'],2),nsmall=2), format(round(cd4_3.wvl[which.cd4,'Effect'],2),nsmall=2), '1.00', '','', '1.00', format(round(age_fhaart1.wvl[which.nnrti,'Effect'],2),nsmall=2), '', '', format(round(vl_1[which.vl,'Effect'],2),nsmall=2), '1.00', format(round(vl_2[which.vl,'Effect'],2),nsmall=2)) primary.lci.wvl <- c(format(round(age_fhaart1.wvl[which.male,'Lower 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.wvl[which.age,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart2.wvl[which.age,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart3.wvl[which.age,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart1.wvl[which.aids,'Lower 0.95'],2),nsmall=2), '', '', format(round(year_1.wvl[which.year,'Lower 0.95'],2),nsmall=2), format(round(year_2.wvl[which.year,'Lower 0.95'],2),nsmall=2), '', format(round(year_3.wvl[which.year,'Lower 0.95'],2),nsmall=2), format(round(year_4.wvl[which.year,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.wvl[which.risk1,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk2,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk3,'Lower 0.95'],2),nsmall=2), '','', format(round(cd4_1.wvl[which.cd4,'Lower 0.95'],2),nsmall=2), format(round(cd4_2.wvl[which.cd4,'Lower 0.95'],2),nsmall=2), format(round(cd4_3.wvl[which.cd4,'Lower 0.95'],2),nsmall=2), '', '','', '', format(round(age_fhaart1.wvl[which.nnrti,'Lower 0.95'],2),nsmall=2), '', '', format(round(vl_1[which.vl,'Lower 0.95'],2),nsmall=2), '', format(round(vl_2[which.vl,'Lower 0.95'],2),nsmall=2)) primary.uci.wvl <- c(format(round(age_fhaart1.wvl[which.male,'Upper 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.wvl[which.age,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart2.wvl[which.age,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart3.wvl[which.age,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart1.wvl[which.aids,'Upper 0.95'],2),nsmall=2), '', '', format(round(year_1.wvl[which.year,'Upper 0.95'],2),nsmall=2), format(round(year_2.wvl[which.year,'Upper 0.95'],2),nsmall=2), '', format(round(year_3.wvl[which.year,'Upper 0.95'],2),nsmall=2), format(round(year_4.wvl[which.year,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.wvl[which.risk1,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk2,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk3,'Upper 0.95'],2),nsmall=2), '','', format(round(cd4_1.wvl[which.cd4,'Upper 0.95'],2),nsmall=2), format(round(cd4_2.wvl[which.cd4,'Upper 0.95'],2),nsmall=2), format(round(cd4_3.wvl[which.cd4,'Upper 0.95'],2),nsmall=2), '', '','', '', format(round(age_fhaart1.wvl[which.nnrti,'Upper 0.95'],2),nsmall=2), '', '', format(round(vl_1[which.vl,'Upper 0.95'],2),nsmall=2), '', format(round(vl_2[which.vl,'Upper 0.95'],2),nsmall=2)) primary.ci.wvl <- paste('(',primary.lci.wvl,', ',primary.uci.wvl,')',sep='') primary.ci.wvl <- ifelse(primary.ci.wvl == '(, )','',primary.ci.wvl) primary.p.wvl <- anova(time_to_evt.wvl)[,'P'] primary.p.wvl <- ifelse(primary.p.wvl < 0.001,'< 0.001', ifelse(primary.p.wvl >= 0.001 & primary.p.wvl < 0.01,format(round(primary.p.wvl,3),nsmall=2),format(round(primary.p.wvl,2),nsmall=2))) which.age.p <- which(names(primary.p.wvl) == 'age_fhaart') which.male.p <- which(names(primary.p.wvl) == 'male.factor') which.aids.p <- which(names(primary.p.wvl) == 'aids_at_fhaart.factor') which.cd4.p <- which(names(primary.p.wvl) == 'baseline_cd4') which.year.p <- which(names(primary.p.wvl) == 'year_fhaart') which.risk.p <- which(names(primary.p.wvl) == 'transmission_risk_larger_cat.factor') which.nnrti.p <- which(names(primary.p.wvl) == 'initial_haart_nnrti.factor') which.vl.p <- which(names(primary.p.wvl) == 'baseline_log_rna') primary.p.final.wvl <- c(primary.p.wvl[which.male.p], '', primary.p.wvl[which.age.p], rep('',times=5), primary.p.wvl[which.aids.p], '', primary.p.wvl[which.year.p], rep('',times=6), primary.p.wvl[which.risk.p], rep('',times=5), primary.p.wvl[which.cd4.p], rep('',times=5), primary.p.wvl[which.nnrti.p], rep('',times=3), primary.p.wvl[which.vl.p], rep('',times=3)) secondary.df <- data.frame('Covariate'=c('Male', '', 'Age (years)', '~~~~20','~~~~30','~~~~40 (ref)','~~~~50','', 'AIDS at first HAART','', 'Year of first HAART', '~~~~2002','~~~~2004','~~~~2006 (ref)','~~~~2008','~~~~2010','', 'Route of infection', '~~~~Heterosexual (ref)','Homo/Bisexual','IDU','Other','', 'CD4 at first HAART', '~~~~50','~~~~100','~~~~200','~~~~350 (ref)','', 'Type of first HAART', '~~~~NNRTI (ref)','Other','', 'HIV1-RNA at first HAART (log-transformed)', '~~~~4','~~~~5 (ref)','~~~~6'), 'HR'=primary.hr.wvl, 'CI'=primary.ci.wvl, 'P'=primary.p.final.wvl) # For imputation set.seed(205) df$log.fu <- log(df[[total_followup]]) df$df.outcome <- df[[outcome]] impute.1 <- aregImpute(~ log.fu*df.outcome + age_fhaart + male.factor + aids_at_fhaart.factor + baseline_cd4 + year_fhaart + baseline_log_rna + transmission_risk_larger_cat.factor + initial_haart_nnrti.factor + site.factor, data=df,group=df$transmission_risk_larger_cat.factor) impute.mod <- fit.mult.impute(Srv.first ~ rcs(age_fhaart,3) + male.factor + aids_at_fhaart.factor + rcs(sqrt(baseline_cd4),3) + rcs(year_fhaart,3) + transmission_risk_larger_cat.factor + initial_haart_nnrti.factor + strat(site.factor), data=df, fitter=cph, xtrans=impute.1,x=TRUE,y=TRUE) # age at first HAART age_fhaart1.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=c(40,20),year.comp=2006) age_fhaart2.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=c(40,30),year.comp=2006) age_fhaart3.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=c(40,50),year.comp=2006) # CD4 at first HAART cd4_1.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=c(350,50),age.comp=40,year.comp=2006) cd4_2.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=c(350,100),age.comp=40,year.comp=2006) cd4_3.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=c(350,200),age.comp=40,year.comp=2006) # year of first HAART year_1.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=40,year.comp=c(2006,2002)) year_2.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=40,year.comp=c(2006,2004)) year_3.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=40,year.comp=c(2006,2008)) year_4.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=40,year.comp=c(2006,2010)) which.age.impute <- which(rownames(age_fhaart1.impute) == 'age_fhaart') + 1 which.male.impute <- which(rownames(age_fhaart1.impute) == 'male.factor - Male:Female') + 1 which.aids.impute <- which(rownames(age_fhaart1.impute) == 'aids_at_fhaart.factor - AIDS:Not AIDS') + 1 which.year.impute <- which(rownames(age_fhaart1.impute) == 'year_fhaart') + 1 which.risk1.impute <- which(rownames(age_fhaart1.impute) == 'transmission_risk_larger_cat.factor - Homo/Bisexual:Heterosexual') + 1 which.risk2.impute <- which(rownames(age_fhaart1.impute) == 'transmission_risk_larger_cat.factor - IDU:Heterosexual') + 1 which.risk3.impute <- which(rownames(age_fhaart1.impute) == 'transmission_risk_larger_cat.factor - Other:Heterosexual') + 1 which.cd4.impute <- which(rownames(cd4_1.impute) == 'baseline_cd4') + 1 which.nnrti.impute <- which(rownames(age_fhaart1.impute) == 'initial_haart_nnrti.factor - Other:NNRTI') + 1 primary.hr.impute <- c(format(round(age_fhaart1.impute[which.male.impute,'Effect'],2),nsmall=2), '', '', format(round(age_fhaart1.impute[which.age.impute,'Effect'],2),nsmall=2), format(round(age_fhaart2.impute[which.age.impute,'Effect'],2),nsmall=2), '1.00', format(round(age_fhaart3.impute[which.age.impute,'Effect'],2),nsmall=2), '', format(round(age_fhaart1.impute[which.aids.impute,'Effect'],2),nsmall=2), '', '', format(round(year_1.impute[which.year.impute,'Effect'],2),nsmall=2), format(round(year_2.impute[which.year.impute,'Effect'],2),nsmall=2), '1.00', format(round(year_3.impute[which.year.impute,'Effect'],2),nsmall=2), format(round(year_4.impute[which.year.impute,'Effect'],2),nsmall=2), '', '', '1.00', format(round(age_fhaart1.impute[which.risk1.impute,'Effect'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk2.impute,'Effect'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk3.impute,'Effect'],2),nsmall=2), '', '', format(round(cd4_1.impute[which.cd4.impute,'Effect'],2),nsmall=2), format(round(cd4_2.impute[which.cd4.impute,'Effect'],2),nsmall=2), format(round(cd4_3.impute[which.cd4.impute,'Effect'],2),nsmall=2), '1.00', '', '', '1.00', format(round(age_fhaart1.impute[which.nnrti.impute,'Effect'],2),nsmall=2), '', rep('',times=4)) primary.lci.impute <- c(format(round(age_fhaart1.impute[which.male.impute,'Lower 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart2.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart3.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart1.impute[which.aids.impute,'Lower 0.95'],2),nsmall=2), '', '', format(round(year_1.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), format(round(year_2.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), '', format(round(year_3.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), format(round(year_4.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.impute[which.risk1.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk2.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk3.impute,'Lower 0.95'],2),nsmall=2), '', '', format(round(cd4_1.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), format(round(cd4_2.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), format(round(cd4_3.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), '', '', '', '', format(round(age_fhaart1.impute[which.nnrti.impute,'Lower 0.95'],2),nsmall=2), '', rep('',times=4)) primary.uci.impute <- c(format(round(age_fhaart1.impute[which.male.impute,'Upper 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart2.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart3.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart1.impute[which.aids.impute,'Upper 0.95'],2),nsmall=2), '', '', format(round(year_1.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), format(round(year_2.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), '', format(round(year_3.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), format(round(year_4.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.impute[which.risk1.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk2.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk3.impute,'Upper 0.95'],2),nsmall=2), '', '', format(round(cd4_1.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), format(round(cd4_2.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), format(round(cd4_3.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), '', '', '', '', format(round(age_fhaart1.impute[which.nnrti.impute,'Upper 0.95'],2),nsmall=2), '', rep('',times=4)) primary.ci.impute <- paste('(',primary.lci.impute,', ',primary.uci.impute,')',sep='') primary.ci.impute <- ifelse(primary.ci.impute == '(, )','',primary.ci.impute) primary.p.impute <- anova(impute.mod)[,'P'] primary.p.impute <- ifelse(primary.p.impute < 0.001,'< 0.001', ifelse(primary.p.impute >= 0.001 & primary.p.impute < 0.01,format(round(primary.p.impute,3),nsmall=2), format(round(primary.p.impute,2),nsmall=2))) which.age.p.impute <- which(names(primary.p.impute) == 'age_fhaart') which.male.p.impute <- which(names(primary.p.impute) == 'male.factor') which.aids.p.impute <- which(names(primary.p.impute) == 'aids_at_fhaart.factor') which.cd4.p.impute <- which(names(primary.p.impute) == 'baseline_cd4') which.year.p.impute <- which(names(primary.p.impute) == 'year_fhaart') which.risk.p.impute <- which(names(primary.p.impute) == 'transmission_risk_larger_cat.factor') which.nnrti.p.impute <- which(names(primary.p.impute) == 'initial_haart_nnrti.factor') primary.p.final.impute <- c(primary.p.impute[which.male.p.impute], '', primary.p.impute[which.age.p.impute], rep('',times=5), primary.p.impute[which.aids.p.impute], '', primary.p.impute[which.year.p.impute], rep('',times=6), primary.p.impute[which.risk.p.impute], rep('',times=5), primary.p.impute[which.cd4.p.impute], rep('',times=5), primary.p.impute[which.nnrti.p.impute], rep('',times=7)) primary.df.impute <- data.frame('Covariate'=c('Male', '', 'Age (years)','20','30','40 (ref)','50','', 'AIDS at first HAART','', 'Year of first HAART', '2002','2004','2006 (ref)','2008','2010','', 'Route of infection', 'Heterosexual (ref)','Homo/Bisexual','IDU','Other','', 'CD4 at first HAART', '50','100','200','350 (ref)','', 'Type of first HAART', 'NNRTI (ref)','Other','', 'HIV1-RNA at first HAART (log-transformed)', '4','5 (ref)','6'), 'HR'=primary.hr.impute, 'CI'=primary.ci.impute, 'P'=primary.p.final.impute) # Secondary analysis including log viral load from model impute.mod.wvl <- fit.mult.impute(Srv.first ~ rcs(age_fhaart,3) + male.factor + aids_at_fhaart.factor + rcs(sqrt(baseline_cd4),3) + rcs(baseline_log_rna,3) + rcs(year_fhaart,3) + transmission_risk_larger_cat.factor + initial_haart_nnrti.factor + strat(site.factor),data=df,fitter=cph,xtrans=impute.1,x=TRUE,y=TRUE) # age at first HAART age_fhaart1.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=c(40,20),year.comp=2006,vl.comp=5) age_fhaart2.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=c(40,30),year.comp=2006,vl.comp=5) age_fhaart3.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=c(40,50),year.comp=2006,vl.comp=5) # CD4 at first HAART cd4_1.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=c(350,50),age.comp=40,year.comp=2006,vl.comp=5) cd4_2.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=c(350,100),age.comp=40,year.comp=2006,vl.comp=5) cd4_3.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=c(350,200),age.comp=40,year.comp=2006,vl.comp=5) # year of first HAART year_1.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2002),vl.comp=5) year_2.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2004),vl.comp=5) year_3.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2008),vl.comp=5) year_4.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2010),vl.comp=5) vl_1.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=2006,vl.comp=c(5,4)) vl_2.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=2006,vl.comp=c(5,6)) which.age.impute <- which(rownames(age_fhaart1.wvl.impute) == 'age_fhaart') + 1 which.male.impute <- which(rownames(age_fhaart1.wvl.impute) == 'male.factor - Male:Female') + 1 which.aids.impute <- which(rownames(age_fhaart1.wvl.impute) == 'aids_at_fhaart.factor - AIDS:Not AIDS') + 1 which.year.impute <- which(rownames(age_fhaart1.wvl.impute) == 'year_fhaart') + 1 which.risk1.impute <- which(rownames(age_fhaart1.wvl.impute) == 'transmission_risk_larger_cat.factor - Homo/Bisexual:Heterosexual') + 1 which.risk2.impute <- which(rownames(age_fhaart1.wvl.impute) == 'transmission_risk_larger_cat.factor - IDU:Heterosexual') + 1 which.risk3.impute <- which(rownames(age_fhaart1.wvl.impute) == 'transmission_risk_larger_cat.factor - Other:Heterosexual') + 1 which.cd4.impute <- which(rownames(cd4_1.wvl.impute) == 'baseline_cd4') + 1 which.vl.impute <- which(rownames(vl_1.impute) == 'baseline_log_rna') + 1 which.nnrti.impute <- which(rownames(age_fhaart1.wvl.impute) == 'initial_haart_nnrti.factor - Other:NNRTI') + 1 primary.hr.wvl.impute <- c(format(round(age_fhaart1.wvl.impute[which.male.impute,'Effect'],2),nsmall=2),'', '', format(round(age_fhaart1.wvl.impute[which.age.impute,'Effect'],2),nsmall=2), format(round(age_fhaart2.wvl.impute[which.age.impute,'Effect'],2),nsmall=2), '1.00', format(round(age_fhaart3.wvl.impute[which.age.impute,'Effect'],2),nsmall=2), '', format(round(age_fhaart1.wvl.impute[which.aids.impute,'Effect'],2),nsmall=2), '', '',format(round(year_1.wvl.impute[which.year.impute,'Effect'],2),nsmall=2), format(round(year_2.wvl.impute[which.year.impute,'Effect'],2),nsmall=2), '1.00', format(round(year_3.wvl.impute[which.year.impute,'Effect'],2),nsmall=2), format(round(year_4.wvl.impute[which.year.impute,'Effect'],2),nsmall=2), '', '', '1.00', format(round(age_fhaart1.wvl.impute[which.risk1.impute,'Effect'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk2.impute,'Effect'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk3.impute,'Effect'],2),nsmall=2),'', '', format(round(cd4_1.wvl.impute[which.cd4.impute,'Effect'],2),nsmall=2), format(round(cd4_2.wvl.impute[which.cd4.impute,'Effect'],2),nsmall=2), format(round(cd4_3.wvl.impute[which.cd4.impute,'Effect'],2),nsmall=2), '1.00','', '', '1.00', format(round(age_fhaart1.wvl.impute[which.nnrti.impute,'Effect'],2),nsmall=2),'', '', format(round(vl_1.impute[which.vl.impute,'Effect'],2),nsmall=2), '1.00', format(round(vl_2.impute[which.vl.impute,'Effect'],2),nsmall=2)) primary.lci.wvl.impute <- c(format(round(age_fhaart1.wvl.impute[which.male.impute,'Lower 0.95'],2),nsmall=2),'', '', format(round(age_fhaart1.wvl.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart2.wvl.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart3.wvl.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart1.wvl.impute[which.aids.impute,'Lower 0.95'],2),nsmall=2), '', '',format(round(year_1.wvl.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), format(round(year_2.wvl.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), '', format(round(year_3.wvl.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), format(round(year_4.wvl.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.wvl.impute[which.risk1.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk2.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk3.impute,'Lower 0.95'],2),nsmall=2),'', '', format(round(cd4_1.wvl.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), format(round(cd4_2.wvl.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), format(round(cd4_3.wvl.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), '','', '', '', format(round(age_fhaart1.wvl.impute[which.nnrti.impute,'Lower 0.95'],2),nsmall=2),'', '', format(round(vl_1.impute[which.vl.impute,'Lower 0.95'],2),nsmall=2), '', format(round(vl_2.impute[which.vl.impute,'Lower 0.95'],2),nsmall=2)) primary.uci.wvl.impute <- c(format(round(age_fhaart1.wvl.impute[which.male.impute,'Upper 0.95'],2),nsmall=2),'', '', format(round(age_fhaart1.wvl.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart2.wvl.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart3.wvl.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart1.wvl.impute[which.aids.impute,'Upper 0.95'],2),nsmall=2), '', '',format(round(year_1.wvl.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), format(round(year_2.wvl.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), '', format(round(year_3.wvl.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), format(round(year_4.wvl.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.wvl.impute[which.risk1.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk2.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk3.impute,'Upper 0.95'],2),nsmall=2),'', '', format(round(cd4_1.wvl.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), format(round(cd4_2.wvl.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), format(round(cd4_3.wvl.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), '','', '', '', format(round(age_fhaart1.wvl.impute[which.nnrti.impute,'Upper 0.95'],2),nsmall=2),'', '', format(round(vl_1.impute[which.vl.impute,'Upper 0.95'],2),nsmall=2), '', format(round(vl_2.impute[which.vl.impute,'Upper 0.95'],2),nsmall=2)) primary.ci.wvl.impute <- paste('(',primary.lci.wvl.impute,', ',primary.uci.wvl.impute,')',sep='') primary.ci.wvl.impute <- ifelse(primary.ci.wvl.impute == '(, )','',primary.ci.wvl.impute) primary.p.wvl.impute <- anova(impute.mod.wvl)[,'P'] primary.p.wvl.impute <- ifelse(primary.p.wvl.impute < 0.001,'< 0.001', ifelse(primary.p.wvl.impute >= 0.001 & primary.p.wvl.impute < 0.01,format(round(primary.p.wvl.impute,3),nsmall=2), format(round(primary.p.wvl.impute,2),nsmall=2))) which.age.p.impute <- which(names(primary.p.wvl.impute) == 'age_fhaart') which.male.p.impute <- which(names(primary.p.wvl.impute) == 'male.factor') which.aids.p.impute <- which(names(primary.p.wvl.impute) == 'aids_at_fhaart.factor') which.cd4.p.impute <- which(names(primary.p.wvl.impute) == 'baseline_cd4') which.year.p.impute <- which(names(primary.p.wvl.impute) == 'year_fhaart') which.risk.p.impute <- which(names(primary.p.wvl.impute) == 'transmission_risk_larger_cat.factor') which.vl.p.impute <- which(names(primary.p.wvl.impute) == 'baseline_log_rna') which.nnrti.p.impute <- which(names(primary.p.wvl.impute) == 'initial_haart_nnrti.factor') primary.p.final.wvl.impute <- c(primary.p.wvl.impute[which.male.p.impute], '', primary.p.wvl.impute[which.age.p.impute], rep('',times=5), primary.p.wvl.impute[which.aids.p.impute],'', primary.p.wvl.impute[which.year.p.impute], rep('',times=6), primary.p.wvl.impute[which.risk.p.impute], rep('',times=5), primary.p.wvl.impute[which.cd4.p.impute], rep('',times=5), primary.p.wvl.impute[which.nnrti.p.impute], rep('',times=3), primary.p.wvl.impute[which.vl.p.impute], rep('',times=3)) secondary.df.impute <- data.frame('Covariate'=c('Male', '', 'Age (years)', '~~~~20','~~~~30','~~~~40 (ref)','~~~~50','', 'AIDS at enrollment','', 'Year of first HAART', '~~~~2002','~~~~2004','~~~~2006 (ref)','~~~~2008','~~~~2010','', 'Route of infection', '~~~~Heterosexual (ref)','~~~~Homo/Bisexual','~~~~IDU','~~~~Other','', 'CD4 at first HAART', '~~~~50','~~~~100','~~~~200','~~~~350 (ref)','', 'Type of first HAART', '~~~~NNRTI (ref)','~~~~Other','', 'HIV1-RNA at first HAART (log-transformed)', '~~~~4','~~~~5 (ref)','~~~~6'), 'HR'=primary.hr.wvl.impute, 'CI'=primary.ci.wvl.impute, 'P'=primary.p.final.wvl.impute) return(list(primary.df=primary.df, time_to_evt=time_to_evt, secondary.df=secondary.df, time_to_evt.wvl=time_to_evt.wvl, primary.df.impute=primary.df.impute, impute.mod=impute.mod, secondary.df.impute=secondary.df.impute, impute.mod.wvl=impute.mod.wvl)) } # end of time_to_evt_function %----------------------------------------------------------------------------------------% time_to_evt_nnrti_function <- function(df,switch,vl,censor){ if(switch == 'all' & vl == 'yes' & !censor){ total_followup <- 'total_followup.1000' outcome <- 'outcome.1000' } else if(switch == 'all' & vl == 'no' & !censor){ total_followup <- 'total_followup' outcome <- 'outcome' } else if(switch == 'all' & vl == 'yes' & censor){ total_followup <- 'total_followup.1000_new' outcome <- 'outcome.1000_new' } else if(switch == 'all' & vl == 'no' & censor){ total_followup <- 'total_followup_new' outcome <- 'outcome_new' } else if(switch == 'nnrti' & vl == 'yes' & !censor){ total_followup <- 'total_followup_nnrti.1000' outcome <- 'outcome_nnrti.1000' } else if(switch == 'nnrti' & vl == 'no' & !censor){ total_followup <- 'total_followup_nnrti' outcome <- 'outcome_nnrti' } else if(switch == 'nnrti' & vl == 'yes' & censor){ total_followup <- 'total_followup_nnrti.1000_new' outcome <- 'outcome_nnrti.1000_new' } else if(switch == 'nnrti' & vl == 'no' & censor){ total_followup <- 'total_followup_nnrti_new' outcome <- 'outcome_nnrti_new' } Srv.first <- Surv(df[[total_followup]], df[[outcome]]) ddist <<- datadist(df) options(datadist='ddist') # Primary analysis excluding log viral load from model time_to_evt <- cph(Srv.first ~ rcs(age_fhaart,3) + male.factor + aids_at_fhaart.factor + rcs(sqrt(baseline_cd4),3) + rcs(year_fhaart,3) + transmission_risk_larger_cat.factor + strat(site.factor), data=df) # age at first HAART age_fhaart1 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=c(40,20),year.comp=2006) age_fhaart2 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=c(40,30),year.comp=2006) age_fhaart3 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=c(40,50),year.comp=2006) # CD4 at first HAART cd4_1 <- summary.fun(switch=switch,time_to_evt, cd4.comp=c(350,50),age.comp=40,year.comp=2006) cd4_2 <- summary.fun(switch=switch,time_to_evt, cd4.comp=c(350,100),age.comp=40,year.comp=2006) cd4_3 <- summary.fun(switch=switch,time_to_evt, cd4.comp=c(350,200),age.comp=40,year.comp=2006) # year of first HAART year_1 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=40,year.comp=c(2006,2002)) year_2 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=40,year.comp=c(2006,2004)) year_3 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=40,year.comp=c(2006,2008)) year_4 <- summary.fun(switch=switch,time_to_evt, cd4.comp=350,age.comp=40,year.comp=c(2006,2010)) which.age <- which(rownames(age_fhaart1) == 'age_fhaart') + 1 which.male <- which(rownames(age_fhaart1) == 'male.factor - Male:Female') + 1 which.aids <- which(rownames(age_fhaart1) == 'aids_at_fhaart.factor - AIDS:Not AIDS') + 1 which.year <- which(rownames(age_fhaart1) == 'year_fhaart') + 1 which.risk1 <- which(rownames(age_fhaart1) == 'transmission_risk_larger_cat.factor - Homo/Bisexual:Heterosexual') + 1 which.risk2 <- which(rownames(age_fhaart1) == 'transmission_risk_larger_cat.factor - IDU:Heterosexual') + 1 which.risk3 <- which(rownames(age_fhaart1) == 'transmission_risk_larger_cat.factor - Other:Heterosexual') + 1 which.cd4 <- which(rownames(cd4_1) == 'baseline_cd4') + 1 primary.hr <- c(format(round(age_fhaart1[which.male,'Effect'],2),nsmall=2), '', '', format(round(age_fhaart1[which.age,'Effect'],2),nsmall=2), format(round(age_fhaart2[which.age,'Effect'],2),nsmall=2), '1.00', format(round(age_fhaart3[which.age,'Effect'],2),nsmall=2), '', format(round(age_fhaart1[which.aids,'Effect'],2),nsmall=2), '', '', format(round(year_1[which.year,'Effect'],2),nsmall=2), format(round(year_2[which.year,'Effect'],2),nsmall=2), '1.00', format(round(year_3[which.year,'Effect'],2),nsmall=2), format(round(year_4[which.year,'Effect'],2),nsmall=2), '', '', '1.00', format(round(age_fhaart1[which.risk1,'Effect'],2),nsmall=2), format(round(age_fhaart1[which.risk2,'Effect'],2),nsmall=2), format(round(age_fhaart1[which.risk3,'Effect'],2),nsmall=2), '', '', format(round(cd4_1[which.cd4,'Effect'],2),nsmall=2), format(round(cd4_2[which.cd4,'Effect'],2),nsmall=2), format(round(cd4_3[which.cd4,'Effect'],2),nsmall=2), '1.00', '',rep('',times=4)) primary.lci <- c(format(round(age_fhaart1[which.male,'Lower 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1[which.age,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart2[which.age,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart3[which.age,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart1[which.aids,'Lower 0.95'],2),nsmall=2), '', '', format(round(year_1[which.year,'Lower 0.95'],2),nsmall=2), format(round(year_2[which.year,'Lower 0.95'],2),nsmall=2), '', format(round(year_3[which.year,'Lower 0.95'],2),nsmall=2), format(round(year_4[which.year,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1[which.risk1,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1[which.risk2,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1[which.risk3,'Lower 0.95'],2),nsmall=2), '', '', format(round(cd4_1[which.cd4,'Lower 0.95'],2),nsmall=2), format(round(cd4_2[which.cd4,'Lower 0.95'],2),nsmall=2), format(round(cd4_3[which.cd4,'Lower 0.95'],2),nsmall=2), '', '',rep('',times=4)) primary.uci <- c(format(round(age_fhaart1[which.male,'Upper 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1[which.age,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart2[which.age,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart3[which.age,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart1[which.aids,'Upper 0.95'],2),nsmall=2), '', '', format(round(year_1[which.year,'Upper 0.95'],2),nsmall=2), format(round(year_2[which.year,'Upper 0.95'],2),nsmall=2), '', format(round(year_3[which.year,'Upper 0.95'],2),nsmall=2), format(round(year_4[which.year,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1[which.risk1,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1[which.risk2,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1[which.risk3,'Upper 0.95'],2),nsmall=2), '', '', format(round(cd4_1[which.cd4,'Upper 0.95'],2),nsmall=2), format(round(cd4_2[which.cd4,'Upper 0.95'],2),nsmall=2), format(round(cd4_3[which.cd4,'Upper 0.95'],2),nsmall=2), '', '',rep('',times=4)) primary.ci <- paste('(',primary.lci,', ',primary.uci,')',sep='') primary.ci <- ifelse(primary.ci == '(, )','',primary.ci) primary.p <- anova(time_to_evt)[,'P'] primary.p <- ifelse(primary.p < 0.001,'< 0.001', ifelse(primary.p >= 0.001 & primary.p < 0.01,format(round(primary.p,3),nsmall=2),format(round(primary.p,2),nsmall=2))) which.age.p <- which(names(primary.p) == 'age_fhaart') which.male.p <- which(names(primary.p) == 'male.factor') which.aids.p <- which(names(primary.p) == 'aids_at_fhaart.factor') which.cd4.p <- which(names(primary.p) == 'baseline_cd4') which.year.p <- which(names(primary.p) == 'year_fhaart') which.risk.p <- which(names(primary.p) == 'transmission_risk_larger_cat.factor') primary.p.final <- c(primary.p[which.male.p], '', primary.p[which.age.p], rep('',times=5), primary.p[which.aids.p], '', primary.p[which.year.p], rep('',times=6), primary.p[which.risk.p], rep('',times=5), primary.p[which.cd4.p], rep('',times=9)) primary.df <- data.frame('Covariate'=c('Male','','Age (years)','20','30','40 (ref)','50', '','AIDS at first HAART','','Year of first HAART', '2002','2004','2006 (ref)','2008','2010','', 'Probable route of infection', 'Heterosexual (ref)','Homo/Bisexual','IDU','Other','', 'CD4 at first HAART', '50','100','200','350 (ref)','','HIV1-RNA at first HAART (log-transformed)', '4','5 (ref)','6'), 'HR'=primary.hr, 'CI'=primary.ci, 'P'=primary.p.final) #--------------------------------------------------------# # Secondary analysis including log viral load from model #--------------------------------------------------------# time_to_evt.wvl <- cph(Srv.first ~ rcs(age_fhaart,3) + male.factor + aids_at_fhaart.factor + rcs(sqrt(baseline_cd4),3) + rcs(baseline_log_rna,3) + rcs(year_fhaart,3) + transmission_risk_larger_cat.factor + strat(site.factor), data=df) # age at first HAART age_fhaart1.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=c(40,20),year.comp=2006,vl.comp=5) age_fhaart2.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=c(40,30),year.comp=2006,vl.comp=5) age_fhaart3.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=c(40,50),year.comp=2006,vl.comp=5) # CD4 at first HAART cd4_1.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=c(350,50),age.comp=40,year.comp=2006,vl.comp=5) cd4_2.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=c(350,100),age.comp=40,year.comp=2006,vl.comp=5) cd4_3.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=c(350,200),age.comp=40,year.comp=2006,vl.comp=5) # year of first HAART year_1.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2002),vl.comp=5) year_2.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2004),vl.comp=5) year_3.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2008),vl.comp=5) year_4.wvl <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2010),vl.comp=5) vl_1 <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=2006,vl.comp=c(5,4)) vl_2 <- summary.fun.wvl(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=2006,vl.comp=c(5,6)) which.age <- which(rownames(age_fhaart1.wvl) == 'age_fhaart') + 1 which.male <- which(rownames(age_fhaart1.wvl) == 'male.factor - Male:Female') + 1 which.aids <- which(rownames(age_fhaart1.wvl) == 'aids_at_fhaart.factor - AIDS:Not AIDS') + 1 which.year <- which(rownames(age_fhaart1.wvl) == 'year_fhaart') + 1 which.risk1 <- which(rownames(age_fhaart1.wvl) == 'transmission_risk_larger_cat.factor - Homo/Bisexual:Heterosexual') + 1 which.risk2 <- which(rownames(age_fhaart1.wvl) == 'transmission_risk_larger_cat.factor - IDU:Heterosexual') + 1 which.risk3 <- which(rownames(age_fhaart1.wvl) == 'transmission_risk_larger_cat.factor - Other:Heterosexual') + 1 which.cd4 <- which(rownames(cd4_1.wvl) == 'baseline_cd4') + 1 which.vl <- which(rownames(vl_1) == 'baseline_log_rna') + 1 primary.hr.wvl <- c(format(round(age_fhaart1.wvl[which.male,'Effect'],2),nsmall=2), '', '', format(round(age_fhaart1.wvl[which.age,'Effect'],2),nsmall=2), format(round(age_fhaart2.wvl[which.age,'Effect'],2),nsmall=2), '1.00', format(round(age_fhaart3.wvl[which.age,'Effect'],2),nsmall=2), '', format(round(age_fhaart1.wvl[which.aids,'Effect'],2),nsmall=2), '', '', format(round(year_1.wvl[which.year,'Effect'],2),nsmall=2), format(round(year_2.wvl[which.year,'Effect'],2),nsmall=2), '1.00', format(round(year_3.wvl[which.year,'Effect'],2),nsmall=2), format(round(year_4.wvl[which.year,'Effect'],2),nsmall=2), '', '', '1.00', format(round(age_fhaart1.wvl[which.risk1,'Effect'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk2,'Effect'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk3,'Effect'],2),nsmall=2), '', '', format(round(cd4_1.wvl[which.cd4,'Effect'],2),nsmall=2), format(round(cd4_2.wvl[which.cd4,'Effect'],2),nsmall=2), format(round(cd4_3.wvl[which.cd4,'Effect'],2),nsmall=2), '1.00', '', '', format(round(vl_1[which.vl,'Effect'],2),nsmall=2), '1.00', format(round(vl_2[which.vl,'Effect'],2),nsmall=2)) primary.lci.wvl <- c(format(round(age_fhaart1.wvl[which.male,'Lower 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.wvl[which.age,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart2.wvl[which.age,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart3.wvl[which.age,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart1.wvl[which.aids,'Lower 0.95'],2),nsmall=2), '', '', format(round(year_1.wvl[which.year,'Lower 0.95'],2),nsmall=2), format(round(year_2.wvl[which.year,'Lower 0.95'],2),nsmall=2), '', format(round(year_3.wvl[which.year,'Lower 0.95'],2),nsmall=2), format(round(year_4.wvl[which.year,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.wvl[which.risk1,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk2,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk3,'Lower 0.95'],2),nsmall=2), '', '', format(round(cd4_1.wvl[which.cd4,'Lower 0.95'],2),nsmall=2), format(round(cd4_2.wvl[which.cd4,'Lower 0.95'],2),nsmall=2), format(round(cd4_3.wvl[which.cd4,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(vl_1[which.vl,'Lower 0.95'],2),nsmall=2), '', format(round(vl_2[which.vl,'Lower 0.95'],2),nsmall=2)) primary.uci.wvl <- c(format(round(age_fhaart1.wvl[which.male,'Upper 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.wvl[which.age,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart2.wvl[which.age,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart3.wvl[which.age,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart1.wvl[which.aids,'Upper 0.95'],2),nsmall=2), '', '', format(round(year_1.wvl[which.year,'Upper 0.95'],2),nsmall=2), format(round(year_2.wvl[which.year,'Upper 0.95'],2),nsmall=2), '', format(round(year_3.wvl[which.year,'Upper 0.95'],2),nsmall=2), format(round(year_4.wvl[which.year,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.wvl[which.risk1,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk2,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk3,'Upper 0.95'],2),nsmall=2), '', '', format(round(cd4_1.wvl[which.cd4,'Upper 0.95'],2),nsmall=2), format(round(cd4_2.wvl[which.cd4,'Upper 0.95'],2),nsmall=2), format(round(cd4_3.wvl[which.cd4,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(vl_1[which.vl,'Upper 0.95'],2),nsmall=2), '', format(round(vl_2[which.vl,'Upper 0.95'],2),nsmall=2)) primary.ci.wvl <- paste('(',primary.lci.wvl,', ',primary.uci.wvl,')',sep='') primary.ci.wvl <- ifelse(primary.ci.wvl == '(, )','',primary.ci.wvl) primary.p.wvl <- anova(time_to_evt.wvl)[,'P'] primary.p.wvl <- ifelse(primary.p.wvl < 0.001,'< 0.001', ifelse(primary.p.wvl >= 0.001 & primary.p.wvl < 0.01,format(round(primary.p.wvl,3),nsmall=2),format(round(primary.p.wvl,2),nsmall=2))) which.age.p <- which(names(primary.p.wvl) == 'age_fhaart') which.male.p <- which(names(primary.p.wvl) == 'male.factor') which.aids.p <- which(names(primary.p.wvl) == 'aids_at_fhaart.factor') which.cd4.p <- which(names(primary.p.wvl) == 'baseline_cd4') which.year.p <- which(names(primary.p.wvl) == 'year_fhaart') which.risk.p <- which(names(primary.p.wvl) == 'transmission_risk_larger_cat.factor') which.vl.p <- which(names(primary.p.wvl) == 'baseline_log_rna') primary.p.final.wvl <- c(primary.p.wvl[which.male.p], '', primary.p.wvl[which.age.p], rep('',times=5), primary.p.wvl[which.aids.p], '', primary.p.wvl[which.year.p], rep('',times=6), primary.p.wvl[which.risk.p], rep('',times=5), primary.p.wvl[which.cd4.p], rep('',times=5), primary.p.wvl[which.vl.p],rep('',times=3)) secondary.df <- data.frame('Covariate'=c('Male','','Age (years)','~~~~20','~~~~30','~~~~40 (ref)','~~~~50', '','AIDS at enrollment','','Year of first HAART', '~~~~2002','~~~~2004','~~~~2006 (ref)','~~~~2008','~~~~2010','', 'Probably route of infection', 'Heterosexual (ref)','Homo/Bisexual','IDU','Other','', 'CD4 at first HAART', '~~~~50','~~~~100','~~~~200','~~~~350 (ref)','', 'HIV1-RNA at first HAART (log-transformed)', '~~~~4','~~~~5 (ref)','~~~~6'), 'HR'=primary.hr.wvl, 'CI'=primary.ci.wvl, 'P'=primary.p.final.wvl) # For imputation set.seed(200) df$log.fu <- log(df[[total_followup]]) df$df.outcome <- df[[outcome]] impute.1 <- aregImpute(~ log.fu*df.outcome + age_fhaart + male.factor + aids_at_fhaart.factor + baseline_cd4 + year_fhaart + baseline_log_rna + transmission_risk_larger_cat.factor + site.factor, data=df,group=df$transmission_risk_larger_cat.factor) impute.mod <- fit.mult.impute(Srv.first ~ rcs(age_fhaart,3) + male.factor + aids_at_fhaart.factor + rcs(sqrt(baseline_cd4),3) + rcs(year_fhaart,3) + transmission_risk_larger_cat.factor + strat(site.factor), data=df, fitter=cph, xtrans=impute.1,x=TRUE,y=TRUE) # age at first HAART age_fhaart1.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=c(40,20),year.comp=2006) age_fhaart2.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=c(40,30),year.comp=2006) age_fhaart3.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=c(40,50),year.comp=2006) # CD4 at first HAART cd4_1.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=c(350,50),age.comp=40,year.comp=2006) cd4_2.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=c(350,100),age.comp=40,year.comp=2006) cd4_3.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=c(350,200),age.comp=40,year.comp=2006) # year of first HAART year_1.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=40,year.comp=c(2006,2002)) year_2.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=40,year.comp=c(2006,2004)) year_3.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=40,year.comp=c(2006,2008)) year_4.impute <- summary.fun(switch=switch,impute.mod, cd4.comp=350,age.comp=40,year.comp=c(2006,2010)) which.age.impute <- which(rownames(age_fhaart1.impute) == 'age_fhaart') + 1 which.male.impute <- which(rownames(age_fhaart1.impute) == 'male.factor - Male:Female') + 1 which.aids.impute <- which(rownames(age_fhaart1.impute) == 'aids_at_fhaart.factor - AIDS:Not AIDS') + 1 which.year.impute <- which(rownames(age_fhaart1.impute) == 'year_fhaart') + 1 which.risk1.impute <- which(rownames(age_fhaart1.impute) == 'transmission_risk_larger_cat.factor - Homo/Bisexual:Heterosexual') + 1 which.risk2.impute <- which(rownames(age_fhaart1.impute) == 'transmission_risk_larger_cat.factor - IDU:Heterosexual') + 1 which.risk3.impute <- which(rownames(age_fhaart1.impute) == 'transmission_risk_larger_cat.factor - Other:Heterosexual') + 1 which.cd4.impute <- which(rownames(cd4_1.impute) == 'baseline_cd4') + 1 primary.hr.impute <- c(format(round(age_fhaart1.impute[which.male.impute,'Effect'],2),nsmall=2), '', '', format(round(age_fhaart1.impute[which.age.impute,'Effect'],2),nsmall=2), format(round(age_fhaart2.impute[which.age.impute,'Effect'],2),nsmall=2), '1.00', format(round(age_fhaart3.impute[which.age.impute,'Effect'],2),nsmall=2), '', format(round(age_fhaart1.impute[which.aids.impute,'Effect'],2),nsmall=2), '', '', format(round(year_1.impute[which.year.impute,'Effect'],2),nsmall=2), format(round(year_2.impute[which.year.impute,'Effect'],2),nsmall=2), '1.00', format(round(year_3.impute[which.year.impute,'Effect'],2),nsmall=2), format(round(year_4.impute[which.year.impute,'Effect'],2),nsmall=2), '', '', '1.00', format(round(age_fhaart1.impute[which.risk1.impute,'Effect'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk2.impute,'Effect'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk3.impute,'Effect'],2),nsmall=2), '', '', format(round(cd4_1.impute[which.cd4.impute,'Effect'],2),nsmall=2), format(round(cd4_2.impute[which.cd4.impute,'Effect'],2),nsmall=2), format(round(cd4_3.impute[which.cd4.impute,'Effect'],2),nsmall=2), '1.00', '',rep('',times=4)) primary.lci.impute <- c(format(round(age_fhaart1.impute[which.male.impute,'Lower 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart2.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart3.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart1.impute[which.aids.impute,'Lower 0.95'],2),nsmall=2), '', '', format(round(year_1.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), format(round(year_2.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), '', format(round(year_3.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), format(round(year_4.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.impute[which.risk1.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk2.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk3.impute,'Lower 0.95'],2),nsmall=2), '', '', format(round(cd4_1.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), format(round(cd4_2.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), format(round(cd4_3.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), '', '',rep('',times=4)) primary.uci.impute <- c(format(round(age_fhaart1.impute[which.male.impute,'Upper 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart2.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart3.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart1.impute[which.aids.impute,'Upper 0.95'],2),nsmall=2), '', '', format(round(year_1.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), format(round(year_2.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), '', format(round(year_3.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), format(round(year_4.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.impute[which.risk1.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk2.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk3.impute,'Upper 0.95'],2),nsmall=2), '', '', format(round(cd4_1.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), format(round(cd4_2.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), format(round(cd4_3.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), '', '',rep('',times=4)) primary.ci.impute <- paste('(',primary.lci.impute,', ',primary.uci.impute,')',sep='') primary.ci.impute <- ifelse(primary.ci.impute == '(, )','',primary.ci.impute) primary.p.impute <- anova(impute.mod)[,'P'] primary.p.impute <- ifelse(primary.p.impute < 0.001,'< 0.001', ifelse(primary.p.impute >= 0.001 & primary.p.impute < 0.01,format(round(primary.p.impute,3),nsmall=2), format(round(primary.p.impute,2),nsmall=2))) which.age.p.impute <- which(names(primary.p.impute) == 'age_fhaart') which.male.p.impute <- which(names(primary.p.impute) == 'male.factor') which.aids.p.impute <- which(names(primary.p.impute) == 'aids_at_fhaart.factor') which.cd4.p.impute <- which(names(primary.p.impute) == 'baseline_cd4') which.year.p.impute <- which(names(primary.p.impute) == 'year_fhaart') which.risk.p.impute <- which(names(primary.p.impute) == 'transmission_risk_larger_cat.factor') primary.p.final.impute <- c(primary.p.impute[which.male.p.impute], '', primary.p.impute[which.age.p.impute], rep('',times=5), primary.p.impute[which.aids.p.impute], '', primary.p.impute[which.year.p.impute], rep('',times=6), primary.p.impute[which.risk.p.impute], rep('',times=5), primary.p.impute[which.cd4.p.impute], rep('',times=5), rep('',times=4)) primary.df.impute <- data.frame('Covariate'=c('Male','','Age (years)','20','30','40 (ref)','50', '','AIDS at enrollment','','Year of first HAART', '2002','2004','2006 (ref)','2008','2010','', 'Probable route of infection', 'Heterosexual (ref)','Homo/Bisexual','IDU','Other','', 'CD4 at first HAART', '50','100','200','350 (ref)','', 'HIV1-RNA at first HAART (log-transformed)', '4','5 (ref)','6'), 'HR'=primary.hr.impute, 'CI'=primary.ci.impute, 'P'=primary.p.final.impute) # Secondary analysis including log viral load from model impute.mod.wvl <- fit.mult.impute(Srv.first ~ rcs(age_fhaart,3) + male.factor + aids_at_fhaart.factor + rcs(sqrt(baseline_cd4),3) + rcs(baseline_log_rna,3) + rcs(year_fhaart,3) + transmission_risk_larger_cat.factor + strat(site.factor),data=df,fitter=cph,xtrans=impute.1,x=TRUE,y=TRUE) # age at first HAART age_fhaart1.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=c(40,20),year.comp=2006,vl.comp=5) age_fhaart2.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=c(40,30),year.comp=2006,vl.comp=5) age_fhaart3.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=c(40,50),year.comp=2006,vl.comp=5) # CD4 at first HAART cd4_1.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=c(350,50),age.comp=40,year.comp=2006,vl.comp=5) cd4_2.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=c(350,100),age.comp=40,year.comp=2006,vl.comp=5) cd4_3.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=c(350,200),age.comp=40,year.comp=2006,vl.comp=5) # year of first HAART year_1.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2002),vl.comp=5) year_2.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2004),vl.comp=5) year_3.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2008),vl.comp=5) year_4.wvl.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2010),vl.comp=5) vl_1.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=2006,vl.comp=c(5,4)) vl_2.impute <- summary.fun.wvl(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=2006,vl.comp=c(5,6)) which.age.impute <- which(rownames(age_fhaart1.wvl.impute) == 'age_fhaart') + 1 which.male.impute <- which(rownames(age_fhaart1.wvl.impute) == 'male.factor - Male:Female') + 1 which.aids.impute <- which(rownames(age_fhaart1.wvl.impute) == 'aids_at_fhaart.factor - AIDS:Not AIDS') + 1 which.year.impute <- which(rownames(age_fhaart1.wvl.impute) == 'year_fhaart') + 1 which.risk1.impute <- which(rownames(age_fhaart1.wvl.impute) == 'transmission_risk_larger_cat.factor - Homo/Bisexual:Heterosexual') + 1 which.risk2.impute <- which(rownames(age_fhaart1.wvl.impute) == 'transmission_risk_larger_cat.factor - IDU:Heterosexual') + 1 which.risk3.impute <- which(rownames(age_fhaart1.wvl.impute) == 'transmission_risk_larger_cat.factor - Other:Heterosexual') + 1 which.cd4.impute <- which(rownames(cd4_1.wvl.impute) == 'baseline_cd4') + 1 which.vl.impute <- which(rownames(vl_1.impute) == 'baseline_log_rna') + 1 primary.hr.wvl.impute <- c(format(round(age_fhaart1.wvl.impute[which.male.impute,'Effect'],2),nsmall=2), '', '', format(round(age_fhaart1.wvl.impute[which.age.impute,'Effect'],2),nsmall=2), format(round(age_fhaart2.wvl.impute[which.age.impute,'Effect'],2),nsmall=2), '1.00', format(round(age_fhaart3.wvl.impute[which.age.impute,'Effect'],2),nsmall=2), '', format(round(age_fhaart1.wvl.impute[which.aids.impute,'Effect'],2),nsmall=2), '', '', format(round(year_1.wvl.impute[which.year.impute,'Effect'],2),nsmall=2), format(round(year_2.wvl.impute[which.year.impute,'Effect'],2),nsmall=2), '1.00', format(round(year_3.wvl.impute[which.year.impute,'Effect'],2),nsmall=2), format(round(year_4.wvl.impute[which.year.impute,'Effect'],2),nsmall=2), '', '', '1.00', format(round(age_fhaart1.wvl.impute[which.risk1.impute,'Effect'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk2.impute,'Effect'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk3.impute,'Effect'],2),nsmall=2), '', '', format(round(cd4_1.wvl.impute[which.cd4.impute,'Effect'],2),nsmall=2), format(round(cd4_2.wvl.impute[which.cd4.impute,'Effect'],2),nsmall=2), format(round(cd4_3.wvl.impute[which.cd4.impute,'Effect'],2),nsmall=2), '1.00', '', '', format(round(vl_1.impute[which.vl.impute,'Effect'],2),nsmall=2), '1.00', format(round(vl_2.impute[which.vl.impute,'Effect'],2),nsmall=2)) primary.lci.wvl.impute <- c(format(round(age_fhaart1.wvl.impute[which.male.impute,'Lower 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.wvl.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart2.wvl.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart3.wvl.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart1.wvl.impute[which.aids.impute,'Lower 0.95'],2),nsmall=2), '', '', format(round(year_1.wvl.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), format(round(year_2.wvl.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), '', format(round(year_3.wvl.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), format(round(year_4.wvl.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.wvl.impute[which.risk1.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk2.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk3.impute,'Lower 0.95'],2),nsmall=2), '', '', format(round(cd4_1.wvl.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), format(round(cd4_2.wvl.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), format(round(cd4_3.wvl.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(vl_1.impute[which.vl.impute,'Lower 0.95'],2),nsmall=2), '', format(round(vl_2.impute[which.vl.impute,'Lower 0.95'],2),nsmall=2)) primary.uci.wvl.impute <- c(format(round(age_fhaart1.wvl.impute[which.male.impute,'Upper 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.wvl.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart2.wvl.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart3.wvl.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart1.wvl.impute[which.aids.impute,'Upper 0.95'],2),nsmall=2), '', '', format(round(year_1.wvl.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), format(round(year_2.wvl.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), '', format(round(year_3.wvl.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), format(round(year_4.wvl.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.wvl.impute[which.risk1.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk2.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk3.impute,'Upper 0.95'],2),nsmall=2), '', '', format(round(cd4_1.wvl.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), format(round(cd4_2.wvl.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), format(round(cd4_3.wvl.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(vl_1.impute[which.vl.impute,'Upper 0.95'],2),nsmall=2), '', format(round(vl_2.impute[which.vl.impute,'Upper 0.95'],2),nsmall=2)) primary.ci.wvl.impute <- paste('(',primary.lci.wvl.impute,', ',primary.uci.wvl.impute,')',sep='') primary.ci.wvl.impute <- ifelse(primary.ci.wvl.impute == '(, )','',primary.ci.wvl.impute) primary.p.wvl.impute <- anova(impute.mod.wvl)[,'P'] primary.p.wvl.impute <- ifelse(primary.p.wvl.impute < 0.001,'< 0.001', ifelse(primary.p.wvl.impute >= 0.001 & primary.p.wvl.impute < 0.01,format(round(primary.p.wvl.impute,3),nsmall=2), format(round(primary.p.wvl.impute,2),nsmall=2))) which.age.p.impute <- which(names(primary.p.wvl.impute) == 'age_fhaart') which.male.p.impute <- which(names(primary.p.wvl.impute) == 'male.factor') which.aids.p.impute <- which(names(primary.p.wvl.impute) == 'aids_at_fhaart.factor') which.cd4.p.impute <- which(names(primary.p.wvl.impute) == 'baseline_cd4') which.year.p.impute <- which(names(primary.p.wvl.impute) == 'year_fhaart') which.risk.p.impute <- which(names(primary.p.wvl.impute) == 'transmission_risk_larger_cat.factor') which.vl.p.impute <- which(names(primary.p.wvl.impute) == 'baseline_log_rna') primary.p.final.wvl.impute <- c(primary.p.wvl.impute[which.male.p.impute], '', primary.p.wvl.impute[which.age.p.impute], rep('',times=5), primary.p.wvl.impute[which.aids.p.impute], '', primary.p.wvl.impute[which.year.p.impute], rep('',times=6), primary.p.wvl.impute[which.risk.p.impute], rep('',times=5), primary.p.wvl.impute[which.cd4.p.impute], rep('',times=5), primary.p.wvl.impute[which.vl.p.impute], rep('',times=3)) secondary.df.impute <- data.frame('Covariate'=c('Male','','Age (years)','~~~~20','~~~~30','~~~~40 (ref)','~~~~50', '','AIDS at enrollment','','Year of first HAART', '~~~~2002','~~~~2004','~~~~2006 (ref)','~~~~2008','~~~~2010','', 'Probably route of infection', '~~~~Heterosexual (ref)','~~~~Homo/Bisexual','~~~~IDU','~~~~Other','', 'CD4 at first HAART', '~~~~50','~~~~100','~~~~200','~~~~350 (ref)','', 'HIV1-RNA at first HAART (log-transformed)', '~~~~4','~~~~5 (ref)','~~~~6'), 'HR'=primary.hr.wvl.impute, 'CI'=primary.ci.wvl.impute, 'P'=primary.p.final.wvl.impute) return(list(primary.df=primary.df, time_to_evt=time_to_evt, secondary.df=secondary.df, time_to_evt.wvl=time_to_evt.wvl, primary.df.impute=primary.df.impute, impute.mod=impute.mod, secondary.df.impute=secondary.df.impute, impute.mod.wvl=impute.mod.wvl)) } # end of time_to_evt_function %------------------------------------------------------------------------------------------------------% find_max_date <- function(art,cd4,rna,follow,basic){ # Finds max date for outcome #------------------# # HAART start # #------------------# art_start <- subset(art, select=c(unique_id,art_sd,art_rs,art_id)) art_start$art_date_type <- 'START' art_start$date <- as.Date(art_start$art_sd,format='%Y-%m-%d') art_start$regimen_number <- NA split(art_start$regimen_number, art_start$unique_id) <- lapply(split(art_start$date,art_start$unique_id),FUN=function(y){ seq(1,length(y))}) art_start <- art_start[order(art_start$unique_id,art_start$regimen_number),] #------------------# # HAART end # #------------------# art_end <- subset(art, select=c(unique_id, art_ed, art_rs,art_id)) art_end$art_date_type <- 'END' art_end$date <- as.Date(art_end$art_ed,format='%Y-%m-%d') art_end$regimen_number <- NA split(art_end$regimen_number, art_end$unique_id) <- lapply(split(art_end$date,art_end$unique_id),FUN=function(y){ seq(1,length(y))}) art_end <- art_end[order(art_end$unique_id,art_end$regimen_number),] art_end$l_alive_d <- follow[match(art_end$unique_id,follow$unique_id,nomatch=NA),'l_alive_d'] # Those with a missing value for art_ed (means they ended ART after end of study period) will have their last alive date # used as the end date which.na <- which(is.na(art_end$art_ed)) art_end$art_ed_new <- art$art_ed art_end$art_ed_new[which.na] <- art_end$l_alive_d[which.na] art_end$art_ed <- art_end$art_ed_new art_end$date <- art_end$art_ed #------------------# # HAART full # #------------------# art_full <- merge(art_start, art_end, all=TRUE) art_full <- art_full[order(art_full$unique_id, art_full$regimen_number),] art_full$l_alive_d <- art_end[match(art_full$unique_id,art_end$unique_id,nomatch=NA),'l_alive_d'] art_full$id_date <- paste(art_full$unique_id, art_full$date, sep='.') #---------------------------------# # Adding in CD4 date to long data # #---------------------------------# cd4$date <- cd4$cd4_d cd4$id_date <- paste(cd4$unique_id, cd4$date, sep='.') # # Also, for now am removing duplicate records until values from Brazil are verified: dup.id.date <- cd4[which(duplicated(cd4$id_date)),'id_date'] dup.id.date.df <- as.data.frame(with(subset(cd4, id_date %in% dup.id.date),tapply(cd4_v,INDEX=id_date,FUN=function(y){ mean(y,na.rm=TRUE) }))) dup.id.date.df <- cbind('id_date'=rownames(dup.id.date.df),dup.id.date.df) names(dup.id.date.df)[2] <- 'cd4_v' cd4$cd4_v2 <- dup.id.date.df[match(cd4$id_date,dup.id.date.df$id_date,nomatch=NA),'cd4_v'] cd4$cd4_v2 <- ifelse(is.na(cd4$cd4_v2),cd4$cd4_v,cd4$cd4_v2) cd4$cd4_v <- cd4$cd4_v2 cd4$date_fhaart <- art[match(cd4$unique_id, art$unique_id, nomatch=NA),'date_fhaart'] # Defining baseline CD4 cd4$cd4_d <- as.Date(cd4$cd4_d, format='%Y-%m-%d') cd4$diff <- as.numeric(difftime(cd4$cd4_d,cd4$date_fhaart,units='days')) cd4_sub <- subset(cd4, !is.na(cd4_v)) baseline_cd4 <- lapply(split(subset(cd4_sub, ,select=c(unique_id,diff,cd4_v)), cd4_sub$unique_id), FUN=function(y){ if(any(!is.na(y[,'diff']) & y[,'diff'] <= 0 & abs(y[,'diff']) <= 180)){ max.before <- max(y[which(round(y[,'diff']) %in% c(-180:0)),'diff'],na.rm=TRUE) } else { max.before <- NA } if(any(!is.na(y[,'diff']) & y[,'diff'] > 0 & y[,'diff'] <= 7)){ min.after <- min(y[which(round(y[,'diff']) %in% c(0:7)),'diff'],na.rm=TRUE) } else { min.after <- NA } min.distance <- ifelse(is.na(max.before) & is.na(min.after),NA, ifelse(is.na(max.before),min.after,max.before)) if(!is.na(min.distance)){ baseline_cd4 <- y[which(y[,'diff'] == min.distance),'cd4_v'] } else { baseline_cd4 <- NA } df <- data.frame('unique_id'=y[1,'unique_id'], 'min_distance'=min.distance, 'baseline_cd4'=as.numeric(baseline_cd4)) return(df) }) baseline_cd4.df <- do.call('rbind',baseline_cd4) cd4$baseline_cd4 <- baseline_cd4.df[match(cd4$unique_id, baseline_cd4.df$unique_id, nomatch=NA),'baseline_cd4'] # Adding in HIV1-RNA to long data rna$date <- rna$rna_d rna$id_date <- paste(rna$unique_id, rna$date, sep='.') # Negative values for rna_v means it was undetectable so will change to 399--check with Bryan rna$rna_v <- ifelse(rna$rna_v <= 399, 399, rna$rna_v) dup.id.date <- rna[which(duplicated(rna$id_date)),'id_date'] dup.id.date.df <- as.data.frame(with(subset(rna, id_date %in% dup.id.date),tapply(rna_v,INDEX=id_date,FUN=function(y){ mean(y,na.rm=TRUE) }))) dup.id.date.df <- cbind('id_date'=rownames(dup.id.date.df),dup.id.date.df) names(dup.id.date.df)[2] <- 'rna_v' rna$rna_v2 <- dup.id.date.df[match(rna$id_date,dup.id.date.df$id_date,nomatch=NA),'rna_v'] rna$rna_v2 <- ifelse(is.na(rna$rna_v2),rna$rna_v,rna$rna_v2) rna$rna_v <- rna$rna_v2 # Defining baseline viral load as the closest viral load to date_fhaart within 180 days prior to start of HAART rna$rna_d <- as.Date(rna$rna_d, format='%Y-%m-%d') rna$date_fhaart <- art[match(rna$unique_id, art$unique_id, nomatch=NA),'date_fhaart'] rna$diff <- as.numeric(difftime(rna$rna_d,rna$date_fhaart,units='days')) rna_sub <- subset(rna, !is.na(rna_v)) baseline_hiv1_rna <- lapply(split(subset(rna_sub, select=c(unique_id,diff,rna_v)), rna_sub$unique_id), FUN=function(y){ if(any(!is.na(y[,'diff']) & y[,'diff'] <= 0 & abs(y[,'diff']) <= 180)){ min.distance <- max(y[which(y[,'diff'] %in% c(-180:0)),'diff'],na.rm=TRUE) } else { min.distance <- NA } if(!is.na(min.distance)){ baseline_rna <- y[which(y[,'diff'] == min.distance),'rna_v'] } else { baseline_rna <- NA } df <- data.frame('unique_id'=y[1,'unique_id'], 'min_distance'=min.distance, 'baseline_rna'=as.numeric(baseline_rna)) return(df) }) baseline_hiv1_rna.df <- do.call('rbind',baseline_hiv1_rna) rna$baseline_rna <- baseline_hiv1_rna.df[match(rna$unique_id, baseline_hiv1_rna.df$unique_id, nomatch=NA),'baseline_rna'] # Adding in visit data visit <- subset(visit, !is.na(visit_d)) visit$date <- visit$visit_d visit$id_date <- paste(visit$unique_id, visit$date, sep='.') #----------------------------------------# # Creating data to find max date # #----------------------------------------# all_visits <- merge(art_full[which(!duplicated(art_full$id_date)),c('unique_id','date','id_date')], cd4[which(!is.na(cd4$date) & cd4$date > '1901-01-01' & cd4$unique_id %in% art$unique_id & !duplicated(cd4$id_date)), c('unique_id','date','id_date','cd4_v','cd4_per')], all=TRUE) all_visits <- merge(all_visits, rna[which(rna$date > '1901-01-01' & rna$unique_id %in% art$unique_id & !duplicated(rna$id_date)), c('unique_id','date','id_date','rna_v','rna_l','rna_u')], all=TRUE) all_visits <- merge(all_visits, visit[which(visit$date > '1950-01-01' & visit$unique_id %in% art$unique_id), c('unique_id','date','id_date','whostage','cdcstage')], all=TRUE) tmp <- subset(art, select=c(unique_id,date_fhaart)) names(tmp) <- c('unique_id','date') tmp$id_date <- paste(tmp$unique_id,tmp$date,sep='.') all_visits <- merge(all_visits, tmp[which(!duplicated(tmp$id_date)),], all=TRUE) # Adding record for death_d tmp <- subset(follow, !is.na(death_d) & unique_id %in% all_visits$unique_id, select=c(unique_id,death_d)) names(tmp) <- c('unique_id','date') tmp$id_date <- paste(tmp$unique_id,tmp$date,sep='.') all_visits <- merge(all_visits, tmp, all=TRUE) all_visits$birth_d <- basic[match(all_visits$unique_id, basic$unique_id,nomatch=NA),'birth_d'] all_visits$birth_d <- as.Date(all_visits$birth_d, format='%Y-%m-%d') all_visits$date_fhaart <- art[match(all_visits$unique_id, art$unique_id, nomatch=NA),'date_fhaart'] all_visits$age_fhaart <- as.numeric(difftime(all_visits$date_fhaart,all_visits$birth_d,unit='days'))/365.25 # Excluding those with an age_fhaart < 18 and all records before age_fhaart all_visits$age <- as.numeric(difftime(all_visits$date, all_visits$birth_d, units='days'))/365.25 # Adding in baseline CD4 all_visits$baseline_cd4 <- cd4[match(all_visits$unique_id, cd4$unique_id,nomatch=NA),'baseline_cd4'] all_visits$baseline_rna <- rna[match(all_visits$unique_id, rna$unique_id,nomatch=NA),'baseline_rna'] # Only want records from age_fhaart on and in subjects at least 18 years old all_visits <- subset(all_visits, age_fhaart >= 18 & age >= age_fhaart) # If someone excluded because their first HAART was prior to their 18th birthday, need to exclude from all data basic <- subset(basic, unique_id %in% all_visits$unique_id) art <- subset(art, unique_id %in% all_visits$unique_id) follow <- subset(follow, unique_id %in% all_visits$unique_id) cd4 <- subset(cd4, unique_id %in% all_visits$unique_id) rna <- subset(rna, unique_id %in% all_visits$unique_id) visit <- subset(visit, unique_id %in% all_visits$unique_id) # Some of l_alive_d are missing so will re-install it here all_visits$l_alive_d <- follow[match(all_visits$unique_id, follow$unique_id, nomatch=NA),'l_alive_d'] all_visits$death_d <- follow[match(all_visits$unique_id, follow$unique_id,nomatch=NA),'death_d'] all_visits$death_d <- as.Date(all_visits$death_d, format='%Y-%m-%d') #---------------------------# # Finding max dates # # for end of follow-up # #---------------------------# all_visits$year_gap_date <- rna[match(all_visits$unique_id,rna$unique_id,nomatch=NA),'year_gap_date'] all_visits$max_date <- NA split(all_visits$max_date, all_visits$unique_id) <- lapply(split(all_visits$date, all_visits$unique_id), FUN=function(y){ max(y,na.rm=TRUE)}) all_visits$max_date <- as.Date(all_visits$max_date, origin='1970-01-01') all_visits$male <- basic[match(all_visits$unique_id, basic$unique_id, nomatch=NA),'male'] all_visits$male.factor <- factor(all_visits$male, levels=c(0,1), labels=c('Female','Male')) all_visits$mode <- basic[match(all_visits$unique_id, basic$unique_id, nomatch=NA),'mode'] all_visits$drop_d <- follow[match(all_visits$unique_id, follow$unique_id, nomatch=NA),'drop_d'] # Adding in mode of infection all_visits$transmission_risk <- basic[match(all_visits$unique_id, basic$unique_id,nomatch=NA),'mode'] all_visits$transmission_risk_cat <- ifelse(all_visits$transmission_risk == 'Heterosexual contact',0,1) all_visits$transmission_risk_cat.factor <- factor(all_visits$transmission_risk_cat, levels=c(0,1),labels=c('Heterosexual contact','Other')) all_visits$transmission_risk_w_unknown_level <- ifelse(all_visits$transmission_risk == 'Heterosexual contact',0, ifelse(all_visits$transmission_risk %in% c('Homosexual contact','Bisexual'),1, ifelse(all_visits$transmission_risk %in% c('Injecting drug user','Heterosexual contact and Injecting drug user', 'Homo/Bisexual and Injecting drug user'),2, ifelse(all_visits$transmission_risk != 'Unknown',3,4)))) all_visits$transmission_risk_w_unknown_level.factor <- factor(all_visits$transmission_risk_w_unknown_level, levels=c(0,1,2,3,4), labels=c('Heterosexual','Homo/Bisexual','IDU','Other','Unknown')) all_visits$transmission_risk_larger_cat <- ifelse(all_visits$transmission_risk == 'Heterosexual contact',0, ifelse(all_visits$transmission_risk %in% c('Homosexual contact','Bisexual'),1, ifelse(all_visits$transmission_risk %in% c('Injecting drug user','Heterosexual contact and Injecting drug user', 'Homo/Bisexual and Injecting drug user'),2,3))) all_visits$transmission_risk_larger_cat.factor <- factor(all_visits$transmission_risk_larger_cat, levels=c(0,1,2,3), labels=c('Heterosexual','Homo/Bisexual','IDU','Other')) all_visits$transmission_risk_new <- ifelse(all_visits$transmission_risk == 'Heterosexual contact',0, ifelse(all_visits$transmission_risk %in% c('Homosexual contact','Bisexual'),1, ifelse(!is.na(all_visits$transmission_risk),2,NA))) all_visits$transmission_risk_new.factor <- factor(all_visits$transmission_risk_new, levels=c(0,1,2), labels=c('Heterosexual','Homo/Bisexual','IDU or Other')) # Adding in site information all_visits$site <- basic[match(all_visits$unique_id, basic$unique_id, nomatch=NA),'site'] all_visits$death_indicator <- ifelse(is.na(all_visits$death_d) | all_visits$date != all_visits$death_d,0, ifelse(!is.na(all_visits$death_d) & all_visits$date == all_visits$death_d,1,NA)) all_visits$death_indicator.factor <- factor(all_visits$death_indicator, levels=c(0,1),labels=c('No','Yes')) # Creating log viral load variable all_visits$baseline_log_rna <- log10(all_visits$baseline_rna) all_visits$overall_death_indicator <- NA split(all_visits$overall_death_indicator, all_visits$unique_id) <- lapply(split(all_visits$death_indicator, all_visits$unique_id),FUN=function(y){ max(y)}) all_visits$overall_death_indicator.factor <- factor(all_visits$overall_death_indicator, levels=c(0,1),labels=c('No','Yes')) return(list(art=art, cd4=cd4, rna=rna, follow=follow, basic=basic, all_visits=all_visits)) } # end of max_date_function %------------------------------------------------------------------------------% aids_at_fhaart_function <- function(all_visits, visit, basic){ # New way of defining AIDS at first HAART rather than AIDS at enrollment visit$date <- visit$visit_d visit$date_fhaart <- all_visits[match(visit$unique_id,all_visits$unique_id,nomatch=NA),'date_fhaart'] visit$days_from_fhaart_to_visit <- as.numeric(difftime(visit$visit_d,visit$date_fhaart,units='days')) pre_aids <- apply(subset(visit, unique_id %in% all_visits$unique_id,select=c(unique_id,cdcstage,whostage,date_fhaart,visit_d,days_from_fhaart_to_visit)),1,FUN=function(y){ if(!is.na(y['visit_d']) & as.numeric(y['days_from_fhaart_to_visit']) <= 30){ aids <- ifelse((!is.na(y['aids_y']) & as.numeric(y['aids_y']) == 1) | (!is.na(y['cdcstage']) & y['cdcstage'] %in% c('C','C1','C2','C3')) | (!is.na(y['whostage']) & as.numeric(y['whostage']) == 4),1, ifelse(is.na(y['aids_y']) & is.na(y['cdcstage']) & is.na(y['whostage']),NA,0)) } else { aids <- NA } return(aids) }) pre_not_aids <- apply(subset(visit, unique_id %in% all_visits$unique_id,select=c(unique_id,cdcstage,whostage,date_fhaart,visit_d,days_from_fhaart_to_visit)),1,FUN=function(y){ if(!is.na(y['visit_d']) & as.numeric(y['days_from_fhaart_to_visit']) >= -365 & as.numeric(y['days_from_fhaart_to_visit']) <= 30){ not.aids <- ifelse((!is.na(y['aids_y']) & as.numeric(y['aids_y']) == 0) | (!is.na(y['cdcstage']) & y['cdcstage'] %nin% c('C','C1','C2','C3')) | (!is.na(y['whostage']) & as.numeric(y['whostage']) != 4),1, ifelse(is.na(y['aids_y']) & is.na(y['cdcstage']) & is.na(y['whostage']),NA,0)) } else { not.aids <- NA } return(not.aids) }) aids_combined <- ifelse(!is.na(pre_aids) & as.numeric(pre_aids) == 1,1, ifelse(!is.na(pre_not_aids) & as.numeric(pre_not_aids) == 1,0,NA)) visit_aids2.df <- cbind(visit$unique_id, aids_combined) colnames(visit_aids2.df) <- c('unique_id','aids') visit_aids2.df <- as.data.frame(visit_aids2.df) visit_aids2.df$aids <- as.numeric(as.character(visit_aids2.df$aids)) sj <- tapply(visit_aids2.df$aids, INDEX=visit_aids2.df$unique_id, FUN=function(y){ max(y,na.rm=TRUE) }) visit_aids.df <- data.frame('unique_id'=names(sj), 'overall_visit_aids'=as.numeric(sj)) visit_aids.df$overall_visit_aids <- ifelse(visit_aids.df$overall_visit_aids == -Inf,NA,visit_aids.df$overall_visit_aids) basic$date_fhaart <- all_visits[match(basic$unique_id,all_visits$unique_id,nomatch=NA),'date_fhaart'] basic$days_from_fhaart_to_aids_d <- as.numeric(difftime(basic$aids_d,basic$date_fhaart,units='days')) basic$days_from_fhaart_to_enrol_d <- as.numeric(difftime(basic$enrol_d,basic$date_fhaart,units='days')) basic_aids <- apply(subset(basic, select=c(aids_y,days_from_fhaart_to_aids_d,days_from_fhaart_to_enrol_d)),1,FUN=function(y){ if((!is.na(y['days_from_fhaart_to_aids_d']) & as.numeric(y['days_from_fhaart_to_aids_d']) <= 30) | (!is.na(y['days_from_fhaart_to_enrol_d']) & as.numeric(y['days_from_fhaart_to_enrol_d']) <= 30)){ basic_aids <- y['aids_y'] } else { basic_aids <- NA } return(basic_aids) }) basic_aids <- as.numeric(basic_aids) basic_cdc_who <- apply(subset(basic, select=c(cdcstage,whostage,days_from_fhaart_to_aids_d,days_from_fhaart_to_enrol_d)),1,FUN=function(y){ if((!is.na(y['days_from_fhaart_to_aids_d']) & as.numeric(y['days_from_fhaart_to_aids_d']) >= -365 & as.numeric(y['days_from_fhaart_to_aids_d']) <= 30) | (!is.na(y['days_from_fhaart_to_enrol_d']) & as.numeric(y['days_from_fhaart_to_enrol_d']) >= -365 & as.numeric(y['days_from_fhaart_to_enrol_d']) <= 30)){ cdc_aids <- ifelse(y['cdcstage'] %in% c('C','C1','C2','C3'),1,ifelse(!is.na(y['cdcstage']),0,NA)) who_aids <- ifelse(as.numeric(y['whostage']) == 4,1,ifelse(!is.na(y['whostage']),0,NA)) basic_cdc_who <- ifelse((!is.na(cdc_aids) & cdc_aids == 1) | (!is.na(who_aids) & who_aids == 1),1, ifelse(!is.na(cdc_aids),cdc_aids, ifelse(!is.na(who_aids),who_aids,NA))) } else { basic_cdc_who <- NA } }) basic_cdc_who <- as.numeric(basic_cdc_who) basic_aids_combined <- ifelse((!is.na(basic_aids) & as.numeric(basic_aids) == 1) | (!is.na(basic_cdc_who) & as.numeric(basic_cdc_who)) == 1,1, ifelse(!is.na(basic_aids) & as.numeric(basic_aids) == 0,0, ifelse(!is.na(basic_cdc_who) & as.numeric(basic_cdc_who) == 0,0,NA))) basic$basic_aids_combined <- basic_aids_combined basic <- merge(basic,visit_aids.df,all=TRUE) basic$overall_aids <- ifelse((!is.na(basic$basic_aids_combined) & as.numeric(basic$basic_aids_combined) == 1) | (!is.na(basic$overall_visit_aids) & as.numeric(basic$overall_visit_aids) == 1),1, ifelse((!is.na(basic$basic_aids_combined) & as.numeric(basic$basic_aids_combined) == 0) | (!is.na(basic$overall_visit_aids) & as.numeric(basic$overall_visit_aids) == 0),0,NA)) all_visits$aids_at_fhaart <- basic[match(all_visits$unique_id,basic$unique_id,nomatch=NA),'overall_aids'] all_visits$aids_at_fhaart.factor <- factor(all_visits$aids_at_fhaart, levels=c(0,1),labels=c('Not AIDS','AIDS')) return(list(all_visits=all_visits, visit=visit, basic=basic)) } # end of function %-----------------------------------------------------------------------------------% second_line_regimen_function <- function(art,cd4,rna){ # Defining second line regimens based on two different definitions art$regimen_class_new <- apply(subset(art, select=c(art_id,regimen_class)),1,FUN=function(y){ split_regimen <- unlist(strsplit(y['art_id'],',')) jk <- ifelse(y['regimen_class'] != 'OTHER',y['regimen_class'], ifelse(y['regimen_class'] == 'OTHER' & any(c('EFV','NVP','DLV','RPV','ETR') %in% split_regimen) & any(c('SQV','NFV','LPV','IDV','FPV','APV') %in% split_regimen) & 'RTV' %in% split_regimen,'NNRTI AND BOOSTED PI',y['regimen_class'])) }) art$regimen_class_new <- ifelse(art$third_line_regimen == 1,'THIRD LINE',art$regimen_class_new) # For those regimens listed as first HAART and are 'OTHER', need to be marked as incorrect art$incorrect_regimen <- ifelse(art$art_sd == art$date_fhaart & art$regimen_class == 'OTHER',1,0) art$previous_art_ed <- c(NA,art$art_ed[-nrow(art)]) art$previous_art_ed <- as.Date(art$previous_art_ed, origin='1970-01-01') month_gap <- lapply(split(subset(art, select=c(unique_id,art_sd,art_ed,previous_art_ed)),art$unique_id),FUN=function(y){ month_gap <- ifelse(as.numeric(difftime(y[,'art_sd'],y[,'previous_art_ed'],units='days')) > 30,1,0) df <- data.frame('unique_id'=y[,'unique_id'], 'art_sd'=y[,'art_sd'], 'month_gap'=month_gap, 'month_gap_start'=y[,'previous_art_ed'], 'month_gap_end'=y[,'art_sd']) return(df) }) # return(month_gap) }) month_gap.df <- do.call('rbind',month_gap) art <- art[order(art$unique_id,art$art_sd),] month_gap.df <- month_gap.df[order(month_gap.df$unique_id,month_gap.df$art_sd),] art$month_gap <- month_gap.df$month_gap art$month_gap_start <- month_gap.df$month_gap_start art$month_gap_end <- month_gap.df$month_gap_end art$month_gap <- ifelse(is.na(art$month_gap),0,art$month_gap) # PI/r to PI/r in which backbone PI has been changed. A qualified OTHER regimen could be the 2nd line regimen. It qualifies for this if it contains an NNRTI and PI/r art <- art[order(art$unique_id,art$art_sd),] switch_pi <- lapply(split(subset(art, select=c(art_id,regimen_class_new,art_sd,art_ed,previous_art_ed,incorrect_regimen,unique_id)),art$unique_id),FUN=function(y){ if(!any(y[,'regimen_class_new'] %in% c('BOOSTED PI','NNRTI AND BOOSTED PI'))){ bpi_after_bpi <- rep(0, times=nrow(y)) second_line_start_date <- second_line_end_date <- NA } else { which.rows <- which(y[,'regimen_class_new'] %in% c('BOOSTED PI','NNRTI AND BOOSTED PI') & y[,'incorrect_regimen'] == 0) tmp.df <- y[which.rows,] if(nrow(tmp.df) == 1){ bpi_after_bpi <- 0 second_line_start_date <- second_line_end_date <- NA } else { bpi_after_bpi <- second_line_start_date <- second_line_end_date <- rep(NA,times=nrow(y)) for(j in 1:max(c(1,(nrow(tmp.df)-1)))){ tmp1 <- unlist(strsplit(tmp.df[j,'art_id'],',')) tmp2 <- unlist(strsplit(tmp.df[(j+1),'art_id'],',')) if(any(c('ATV','SQV','NFV','LPV','IDV','FPV','APV') %in% c(setdiff(tmp1,tmp2),setdiff(tmp2,tmp1)))){ bpi_after_bpi[which.rows[(j+1)]] <- 1 second_line_start_date[which.rows[(j+1)]] <- tmp.df[(j+1),'art_sd'] second_line_end_date[which.rows[(j+1)]] <- tmp.df[(j+1),'art_ed'] } else { bpi_after_bpi[which.rows[(j+1)]] <- 0 } } if(any(!is.na(bpi_after_bpi) & bpi_after_bpi == 1)){ min.bpi <- min(which(bpi_after_bpi == 1 & !is.na(bpi_after_bpi))) bpi_after_bpi[min.bpi:nrow(y)] <- 1 } if(nrow(y) > 1 & is.na(bpi_after_bpi[nrow(y)])){ bpi_after_bpi[nrow(y)] <- 0 second_line_start_date[nrow(y)] <- second_line_end_date[nrow(y)] <- NA } } } if(!all(is.na(second_line_start_date))){ min_second_line_start_date <- min(second_line_start_date,na.rm=TRUE) } else { min_second_line_start_date <- NA } df <- data.frame('unique_id'=y[,'unique_id'], 'bpi_after_bpi'=bpi_after_bpi, 'second_line_start_date'=second_line_start_date, 'second_line_end_date'=second_line_end_date, 'min_second_line_start_date'=min_second_line_start_date) return(df) }) switch_pi.df <- do.call('rbind',switch_pi) art <- art[order(art$unique_id,art$art_sd),] art <- cbind(art,'bpi_after_bpi'=switch_pi.df$bpi_after_bpi) art <- cbind(art, 'second_line_start_date_bpi'=switch_pi.df$second_line_start_date) art$second_line_start_date_bpi <- as.Date(art$second_line_start_date_bpi, origin='1970-01-01') art <- cbind(art, 'second_line_end_date_bpi'=switch_pi.df$second_line_end_date) art$second_line_end_date_bpi <- as.Date(art$second_line_end_date_bpi, origin='1970-01-01') art <- cbind(art, 'min_second_line_start_date_bpi'=switch_pi.df$min_second_line_start_date) art$bpi_after_bpi2 <- ifelse(is.na(art$bpi_after_bpi),0,art$bpi_after_bpi) art$bpi_after_bpi2 <- ifelse(!is.na(art$art_sd) & !is.na(art$third_line_regimen_date) & !is.na(art$min_second_line_start_date_bpi) & art$art_sd >= art$min_second_line_start_date_bpi & art$regimen_class_new %in% c('BOOSTED PI','NNRTI AND BOOSTED PI') & art$art_sd < art$third_line_regimen_date,1, art$bpi_after_bpi2) art$bpi_after_bpi <- art$bpi_after_bpi2 # Now finding those with switch from NNRTI to boosted PI (in secondary analysis, need to subset on those whose first HAART was NNRTI and then check for change to second line regimen of PI/r) art <- art[order(art$unique_id,art$art_sd),] switch_nnrti <- lapply(split(subset(art, select=c(art_id,regimen_class_new,art_sd,art_ed,unique_id)),art$unique_id),FUN=function(y){ nnrti_switch <- second_line_start_date <- second_line_end_date <- rep(NA,nrow(y)) if(!any(y[,'regimen_class_new'] == 'NNRTI')){ bpi_after_nnrti <- rep(0, times=nrow(y)) } else { which.rows <- which(y[,'regimen_class_new'] == 'NNRTI') tmp.df <- y[min(which.rows):nrow(y),] if(!any(tmp.df[,'regimen_class_new'] %in% c('BOOSTED PI','NNRTI AND BOOSTED PI'))){ bpi_after_nnrti <- 0 } else { if(nrow(tmp.df) == 1){ bpi_after_nnrti <- 0 } else { which.bpi <- min(which(tmp.df[,'regimen_class_new'] %in% c('BOOSTED PI','NNRTI AND BOOSTED PI'))) bpi_after_nnrti <- second_line_start_date <- second_line_end_date <- rep(NA,times=nrow(tmp.df)) bpi_after_nnrti[which.bpi:nrow(tmp.df)] <- 1 second_line_start_date[which.bpi] <- tmp.df[which.bpi,'art_sd'] second_line_end_date[which.bpi] <- tmp.df[which.bpi,'art_ed'] if(min(which.rows) > 1){ bpi_after_nnrti <- c(rep(NA,times=length(seq(1,(min(which.rows)-1)))),bpi_after_nnrti) second_line_start_date <- c(rep(NA,times=length(seq(1,(min(which.rows)-1)))),second_line_start_date) second_line_end_date <- c(rep(NA,times=length(seq(1,(min(which.rows)-1)))),second_line_end_date) } } } } if(!all(is.na(second_line_start_date))){ min_second_line_start_date <- min(second_line_start_date,na.rm=TRUE) } else { min_second_line_start_date <- NA } df <- data.frame('unique_id'=y[,'unique_id'], 'bpi_after_nnrti'=bpi_after_nnrti, 'second_line_start_date'=second_line_start_date, 'second_line_end_date'=second_line_end_date, 'min_second_line_start_date'=min_second_line_start_date) return(df) }) switch_nnrti.df <- do.call('rbind',switch_nnrti) art <- art[order(art$unique_id,art$art_sd),] art <- cbind(art, 'bpi_after_nnrti'=switch_nnrti.df$bpi_after_nnrti) art <- cbind(art, 'second_line_start_date_nnrti'=switch_nnrti.df$second_line_start_date) art$second_line_start_date_nnrti <- as.Date(art$second_line_start_date_nnrti, origin='1970-01-01') art <- cbind(art, 'second_line_end_date_nnrti'=switch_nnrti.df$second_line_end_date) art$second_line_end_date_nnrti <- as.Date(art$second_line_end_date_nnrti, origin='1970-01-01') art <- cbind(art, 'min_second_line_start_date_nnrti'=switch_nnrti.df$min_second_line_start_date) art$bpi_after_nnrti2 <- ifelse(is.na(art$bpi_after_nnrti),0,art$bpi_after_nnrti) art$bpi_after_nnrti2 <- ifelse(is.na(art$bpi_after_nnrti),0,art$bpi_after_nnrti) art$bpi_after_nnrti2 <- ifelse(!is.na(art$art_sd) & !is.na(art$third_line_regimen_date) & !is.na(art$min_second_line_start_date_nnrti) & art$art_sd >= art$min_second_line_start_date_nnrti & art$regimen_class_new %in% c('BOOSTED PI','NNRTI AND BOOSTED PI') & art$art_sd < art$third_line_regimen_date,1, art$bpi_after_nnrti2) art$bpi_after_nnrti <- art$bpi_after_nnrti2 art$bpi_after_bpi_or_nnrti <- ifelse(art$bpi_after_bpi == 1 | art$bpi_after_nnrti == 1,1,0) art$min_second_line_start_date_bpi_or_nnrti <- apply(subset(art, select=c(min_second_line_start_date_bpi,min_second_line_start_date_nnrti)),1,FUN=min,na.rm=TRUE) art$min_second_line_start_date_bpi_or_nnrti <- ifelse(art$min_second_line_start_date_bpi_or_nnrti == Inf,NA,art$min_second_line_start_date_bpi_or_nnrti) art$min_second_line_start_date_bpi_or_nnrti <- as.Date(art$min_second_line_start_date_bpi_or_nnrti,origin='1970-01-01') # Age at second HAART art$age_at_second_haart <- as.numeric(art$min_second_line_start_date_bpi_or_nnrti - art$birth_d)/365.25 year <- apply(subset(art, select=min_second_line_start_date_bpi_or_nnrti),1,FUN=function(y) {return(strsplit(as.character(y),split='-')[[1]][1])}) art$year_second_haart <- as.numeric(unlist(year)) # Need to find CD4 closest to second line start cd4$min_second_line_start_date_bpi_or_nnrti <- art[match(cd4$unique_id,art$unique_id,nomatch=NA),'min_second_line_start_date_bpi_or_nnrti'] cd4$second_haart_diff <- as.numeric(difftime(cd4$cd4_d,cd4$min_second_line_start_date_bpi_or_nnrti,units='days')) cd4_sub <- subset(cd4, !is.na(cd4_v)) second_haart_cd4 <- lapply(split(subset(cd4_sub, ,select=c(unique_id,second_haart_diff,cd4_v)), cd4_sub$unique_id), FUN=function(y){ if(any(!is.na(y[,'second_haart_diff']) & y[,'second_haart_diff'] <= 0 & abs(y[,'second_haart_diff']) <= 180)){ max.before <- max(y[which(round(y[,'second_haart_diff']) %in% c(-180:0)),'second_haart_diff'],na.rm=TRUE) } else { max.before <- NA } if(any(!is.na(y[,'second_haart_diff']) & y[,'second_haart_diff'] > 0 & y[,'second_haart_diff'] <= 7)){ min.after <- min(y[which(round(y[,'second_haart_diff']) %in% c(0:7)),'second_haart_diff'],na.rm=TRUE) } else { min.after <- NA } min.distance <- ifelse(is.na(max.before) & is.na(min.after),NA, ifelse(is.na(max.before),min.after,max.before)) if(!is.na(min.distance)){ second_haart_cd4 <- as.numeric(y[which(y[,'second_haart_diff'] == min.distance),'cd4_v']) } else { second_haart_cd4 <- NA } df <- data.frame('unique_id'=y[1,'unique_id'], 'min_distance'=min.distance, 'second_haart_cd4'=second_haart_cd4) return(df) }) second_haart_cd4.df <- do.call('rbind',second_haart_cd4) cd4$second_haart_cd4 <- second_haart_cd4.df[match(cd4$unique_id, second_haart_cd4.df$unique_id, nomatch=NA),'second_haart_cd4'] # Need to find HIV1-RNA closest to second line start rna$min_second_line_start_date_bpi_or_nnrti <- art[match(rna$unique_id,art$unique_id,nomatch=NA),'min_second_line_start_date_bpi_or_nnrti'] rna$second_haart_diff <- as.numeric(difftime(rna$rna_d,rna$min_second_line_start_date_bpi_or_nnrti,units='days')) rna_sub <- subset(rna, !is.na(rna_v)) second_haart_rna <- lapply(split(subset(rna_sub, ,select=c(unique_id,second_haart_diff,rna_v)), rna_sub$unique_id), FUN=function(y){ if(any(!is.na(y[,'second_haart_diff']) & y[,'second_haart_diff'] <= 0 & abs(y[,'second_haart_diff']) <= 180)){ max.before <- max(y[which(round(y[,'second_haart_diff']) %in% c(-180:0)),'second_haart_diff'],na.rm=TRUE) } else { max.before <- NA } if(any(!is.na(y[,'second_haart_diff']) & y[,'second_haart_diff'] > 0 & y[,'second_haart_diff'] <= 7)){ min.after <- min(y[which(round(y[,'second_haart_diff']) %in% c(0:7)),'second_haart_diff'],na.rm=TRUE) } else { min.after <- NA } min.distance <- ifelse(is.na(max.before) & is.na(min.after),NA, ifelse(is.na(max.before),min.after,max.before)) if(!is.na(min.distance)){ second_haart_rna <- as.numeric(y[which(y[,'second_haart_diff'] == min.distance),'rna_v']) } else { second_haart_rna <- NA } df <- data.frame('unique_id'=y[1,'unique_id'], 'min_distance'=min.distance, 'second_haart_rna'=second_haart_rna) return(df) }) second_haart_rna.df <- do.call('rbind',second_haart_rna) rna$second_haart_rna <- second_haart_rna.df[match(rna$unique_id, second_haart_rna.df$unique_id, nomatch=NA),'second_haart_rna'] rna$second_haart_log10_rna <- log10(rna$second_haart_rna) return(list(art=art, cd4=cd4, rna=rna)) } # end of function %-----------------------------------------------------------------------------------------% t2evt_data_mgmt_function <- function(all_visits, tmp_2nd_line,nnrti_ids) { # Final data management before calculating incidence and running Cox models all_visits$overall_failure_on_second_line <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'overall_failure_on_second_line'] all_visits$overall_failure_on_second_line.1000 <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'overall_failure_on_second_line.1000'] all_visits$overall_failure_on_second_line_nnrti <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'overall_failure_on_second_line_nnrti'] all_visits$overall_failure_on_second_line_nnrti.1000 <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'overall_failure_on_second_line_nnrti.1000'] all_visits$overall_failure_on_second_line_new <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'overall_failure_on_second_line_new'] all_visits$overall_failure_on_second_line.1000_new <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'overall_failure_on_second_line.1000_new'] all_visits$overall_failure_on_second_line_nnrti_new <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'overall_failure_on_second_line_nnrti_new'] all_visits$overall_failure_on_second_line_nnrti.1000_new <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'overall_failure_on_second_line_nnrti.1000_new'] # Includes date of 2nd line failure if there was a failure in all_visits data all_visits$date_failure_on_second_line <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'date_failure_on_second_line'] all_visits$date_failure_on_second_line.1000 <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'date_failure_on_second_line.1000'] all_visits$date_failure_on_second_line_nnrti <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'date_failure_on_second_line_nnrti'] all_visits$date_failure_on_second_line_nnrti.1000 <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'date_failure_on_second_line_nnrti.1000'] all_visits$date_failure_on_second_line_new <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'date_failure_on_second_line_new'] all_visits$date_failure_on_second_line.1000_new <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'date_failure_on_second_line.1000_new'] all_visits$date_failure_on_second_line_nnrti_new <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'date_failure_on_second_line_nnrti_new'] all_visits$date_failure_on_second_line_nnrti.1000_new <- tmp_2nd_line[match(all_visits$unique_id, tmp_2nd_line$unique_id,nomatch=NA), 'date_failure_on_second_line_nnrti.1000_new'] # Finds the minimum of the outcome dates all_visits$max_date_outcome <- apply(subset(all_visits, select=c(third_line_regimen_date, date_failure_on_second_line, max_date)),1,FUN=function(y){ min(y,na.rm=TRUE) }) all_visits$max_date_outcome.1000 <- apply(subset(all_visits, select=c(third_line_regimen_date, date_failure_on_second_line.1000, max_date)),1,FUN=function(y){ min(y,na.rm=TRUE) }) all_visits$max_date_outcome_nnrti <- apply(subset(all_visits, select=c(third_line_regimen_date, date_failure_on_second_line_nnrti, max_date)),1,FUN=function(y){ min(y,na.rm=TRUE) }) all_visits$max_date_outcome_nnrti.1000 <- apply(subset(all_visits, select=c(third_line_regimen_date, date_failure_on_second_line_nnrti.1000, max_date)),1,FUN=function(y){ min(y,na.rm=TRUE) }) all_visits$max_date_outcome_new <- apply(subset(all_visits, select=c(third_line_regimen_date_new, date_failure_on_second_line_new, max_date, # date_failure_on_second_line, year_gap_date)),1,FUN=function(y){ if(is.na(y['year_gap_date'])){ min(y[1:3],na.rm=TRUE) } else if(!is.na(y['year_gap_date'])){ min(y,na.rm=TRUE) } }) all_visits$max_date_outcome_new <- unlist(all_visits$max_date_outcome_new) all_visits$max_date_outcome.1000_new <- apply(subset(all_visits, select=c(third_line_regimen_date_new, date_failure_on_second_line.1000_new, max_date, year_gap_date)),1,FUN=function(y){ if(is.na(y['year_gap_date'])){ min(y[1:3],na.rm=TRUE) } else if(!is.na(y['year_gap_date'])){ min(y,na.rm=TRUE) } }) all_visits$max_date_outcome.1000_new <- unlist(all_visits$max_date_outcome.1000_new) all_visits$max_date_outcome_nnrti_new <- apply(subset(all_visits, select=c(third_line_regimen_date_new, date_failure_on_second_line_nnrti_new, max_date, year_gap_date)),1,FUN=function(y){ if(is.na(y['year_gap_date'])){ min(y[1:3],na.rm=TRUE) } else if(!is.na(y['year_gap_date'])){ min(y,na.rm=TRUE) } }) all_visits$max_date_outcome_nnrti_new <- unlist(all_visits$max_date_outcome_nnrti_new) all_visits$max_date_outcome_nnrti.1000_new <- apply(subset(all_visits, select=c(third_line_regimen_date_new, date_failure_on_second_line_nnrti.1000_new, max_date, date_failure_on_second_line_nnrti.1000, year_gap_date)),1,FUN=function(y){ if(is.na(y['year_gap_date'])){ min(y[1:3],na.rm=TRUE) } else if(!is.na(y['year_gap_date'])){ min(y,na.rm=TRUE) } }) all_visits$max_date_outcome_nnrti.1000_new <- unlist(all_visits$max_date_outcome_nnrti.1000_new) all_visits$max_date_outcome <- as.Date(all_visits$max_date_outcome, format='%Y-%m-%d') all_visits$max_date_outcome.1000 <- as.Date(all_visits$max_date_outcome.1000, format='%Y-%m-%d') all_visits$max_date_outcome_nnrti <- as.Date(all_visits$max_date_outcome_nnrti, format='%Y-%m-%d') all_visits$max_date_outcome_nnrti.1000 <- as.Date(all_visits$max_date_outcome_nnrti.1000, format='%Y-%m-%d') all_visits$max_date_outcome_new <- as.Date(all_visits$max_date_outcome_new, format='%Y-%m-%d') all_visits$max_date_outcome.1000_new <- as.Date(all_visits$max_date_outcome.1000_new, format='%Y-%m-%d') all_visits$max_date_outcome_nnrti_new <- as.Date(all_visits$max_date_outcome_nnrti_new, format='%Y-%m-%d') all_visits$max_date_outcome_nnrti.1000_new <- as.Date(all_visits$max_date_outcome_nnrti.1000_new, format='%Y-%m-%d') # Just finds minimum between when 3rd line started and failure on 2nd line all_visits$min_date_of_evt <- apply(subset(all_visits, select=c(third_line_regimen_date,date_failure_on_second_line)),1,FUN=function(y){ if(all(is.na(y))){ NA } else { min(y,na.rm=TRUE) } }) all_visits$min_date_of_evt.1000 <- apply(subset(all_visits, select=c(third_line_regimen_date,date_failure_on_second_line.1000)),1,FUN=function(y){ if(all(is.na(y))){ NA } else { min(y,na.rm=TRUE) } }) all_visits$min_date_of_evt_nnrti <- apply(subset(all_visits, select=c(third_line_regimen_date,date_failure_on_second_line_nnrti)),1,FUN=function(y){ if(all(is.na(y))){ NA } else { min(y,na.rm=TRUE) } }) all_visits$min_date_of_evt_nnrti.1000 <- apply(subset(all_visits, select=c(third_line_regimen_date,date_failure_on_second_line_nnrti.1000)),1, FUN=function(y){ if(all(is.na(y))){ NA } else { min(y,na.rm=TRUE) } }) all_visits$min_date_of_evt <- as.Date(all_visits$min_date_of_evt, format=c('%Y-%m-%d')) all_visits$min_date_of_evt.1000 <- as.Date(all_visits$min_date_of_evt.1000, format=c('%Y-%m-%d')) all_visits$min_date_of_evt_nnrti <- as.Date(all_visits$min_date_of_evt_nnrti, format=c('%Y-%m-%d')) all_visits$min_date_of_evt_nnrti.1000 <- as.Date(all_visits$min_date_of_evt_nnrti.1000, format=c('%Y-%m-%d')) # Calculating time to event from date_fhaart to ... should this be min_date_of_evt or max_date_outcome??? all_visits$time_to_evt <- as.numeric(difftime(all_visits$min_date_of_evt,all_visits$date_fhaart,units='days')/365.25) all_visits$time_to_evt.1000 <- as.numeric(difftime(all_visits$min_date_of_evt.1000,all_visits$date_fhaart,units='days')/365.25) all_visits$time_to_evt_nnrti <- as.numeric(difftime(all_visits$min_date_of_evt_nnrti,all_visits$date_fhaart,units='days')/365.25) all_visits$time_to_evt_nnrti.1000 <- as.numeric(difftime(all_visits$min_date_of_evt_nnrti.1000,all_visits$date_fhaart,units='days')/365.25) # For another analysis, Bryan and Carina want new start to be date of second line regimen start, but only for the 1' analysis with the 1000 criteria included all_visits$time_to_evt_2nd_start.1000 <- as.numeric(difftime(all_visits$min_date_of_evt.1000,all_visits$min_second_line_start_date_bpi_or_nnrti,units='days')/365.25) # Adding in an indicator for whether someone's initial HAART was an NNRTI or not all_visits$initial_haart_nnrti <- ifelse(all_visits$unique_id %in% nnrti_ids,1,0) all_visits$initial_haart_nnrti.factor <- factor(all_visits$initial_haart_nnrti, levels=c(1,0),labels=c('NNRTI','Other')) # Adding in ltfu information all_visits$db_closing_date <- ifelse(all_visits$site == 'brazil','2013-06-14', ifelse(all_visits$site == 'mexico','2013-05-07', ifelse(all_visits$site == 'chile','2010-12-31', ifelse(all_visits$site == 'honduras','2013-04-25',NA)))) all_visits$db_closing_date <- as.Date(all_visits$db_closing_date) all_visits$lost1 <- ltfu[match(all_visits$unique_id,ltfu$unique_id,nomatch=NA),'lost1'] all_visits$l_alive_d <- as.Date(all_visits$l_alive_d,format='%Y-%m-%d') all_visits$lost1 <- ifelse(is.na(all_visits$lost1) & !is.na(all_visits$db_closing_date) & (all_visits$db_closing_date - all_visits$l_alive_d)/365.25 > 1.0,1, ifelse(is.na(all_visits$lost1) & !is.na(all_visits$db_closing_date) & (all_visits$db_closing_date - all_visits$l_alive_d)/365.25 <= 1.0,0,all_visits$lost1)) # Subsetting on records <= max_date_outcome d <- subset(all_visits, !duplicated(unique_id) & date <= max_date_outcome) d.1000 <- subset(all_visits, !duplicated(unique_id) & date <= max_date_outcome.1000) d_nnrti <- subset(all_visits, !duplicated(unique_id) & date <= max_date_outcome_nnrti & unique_id %in% nnrti_ids) d_nnrti.1000 <- subset(all_visits, !duplicated(unique_id) & date <= max_date_outcome_nnrti.1000 & unique_id %in% nnrti_ids) d$total_followup <- as.numeric(difftime(d$max_date_outcome,d$date_fhaart,units='days')/365.25) d.1000$total_followup.1000 <- as.numeric(difftime(d.1000$max_date_outcome.1000,d.1000$date_fhaart,units='days')/365.25) d_nnrti$total_followup_nnrti <- as.numeric(difftime(d_nnrti$max_date_outcome_nnrti,d_nnrti$date_fhaart,units='days')/365.25) d_nnrti.1000$total_followup_nnrti.1000 <- as.numeric(difftime(d_nnrti.1000$max_date_outcome_nnrti.1000,d_nnrti.1000$date_fhaart,units='days')/365.25) d$total_followup_new <- as.numeric(difftime(d$max_date_outcome_new,d$date_fhaart,units='days')/365.25) d.1000$total_followup.1000_new <- as.numeric(difftime(d.1000$max_date_outcome.1000_new,d.1000$date_fhaart,units='days')/365.25) d_nnrti$total_followup_nnrti_new <- as.numeric(difftime(d_nnrti$max_date_outcome_nnrti_new,d_nnrti$date_fhaart,units='days')/365.25) d_nnrti.1000$total_followup_nnrti.1000_new <- as.numeric(difftime(d_nnrti.1000$max_date_outcome_nnrti.1000_new,d_nnrti.1000$date_fhaart,units='days')/365.25) # Total follow-up for when 2nd line regimen start is the starting date d.1000$total_followup_2nd_start.1000 <- as.numeric(difftime(d.1000$max_date_outcome.1000, d.1000$min_second_line_start_date_bpi_or_nnrti,units='days')/365.25) d.1000$total_followup_2nd_start.1000_new <- as.numeric(difftime(d.1000$max_date_outcome.1000_new, d.1000$min_second_line_start_date_bpi_or_nnrti,units='days')/365.25) d.1000$fu_ignoring_outcomes <- as.numeric(difftime(d.1000$max_date, d.1000$date_fhaart, units='days')/365.25) d.1000$fu_ignoring_outcomes_2nd_start <- as.numeric(difftime(d.1000$max_date, d.1000$min_second_line_start_date_bpi_or_nnrti,units='days')/365.25) d$total_followup_2nd_start <- as.numeric(difftime(d$max_date_outcome, d$min_second_line_start_date_bpi_or_nnrti,units='days')/365.25) d$total_followup_2nd_start_new <- as.numeric(difftime(d$max_date_outcome_new, d$min_second_line_start_date_bpi_or_nnrti,units='days')/365.25) d$fu_ignoring_outcomes <- as.numeric(difftime(d$max_date, d$date_fhaart, units='days')/365.25) d$fu_ignoring_outcomes_2nd_start <- as.numeric(difftime(d$max_date,d$min_second_line_start_date_bpi_or_nnrti,units='days')/365.25) # Need to also include year of HAART start as a covariate # Ignoring 1000 criterion for defining failure on 2nd regimen year. <- apply(subset(d, select=c(date_fhaart)), 1, FUN=function(y){ unlist(strsplit(as.character(y), split='-'))[1] }) d$year_fhaart <- as.numeric(year.) # Including 1000 criterion for defining failure on 2nd regimen year. <- apply(subset(d.1000, select=c(date_fhaart)), 1, FUN=function(y){ unlist(strsplit(as.character(y), split='-'))[1] }) d.1000$year_fhaart <- as.numeric(year.) # Only using NNRTI to PI/r for defining 2nd line and ignoring 1000 criterion for defining failure on 2nd regimen year. <- apply(subset(d_nnrti, select=c(date_fhaart)), 1, FUN=function(y){ unlist(strsplit(as.character(y), split='-'))[1] }) d_nnrti$year_fhaart <- as.numeric(year.) # Only using NNRTI to PI/r for defining 2nd line and including 1000 criterion for defining failure on 2nd regimen year. <- apply(subset(d_nnrti.1000, select=c(date_fhaart)), 1, FUN=function(y){ unlist(strsplit(as.character(y), split='-'))[1] }) d_nnrti.1000$year_fhaart <- as.numeric(year.) # Removing those who had total_followup == 0.0 (ie., just record of age_fhaart) d.1000.bf.0.fu <- dim(d.1000)[1] d.bf.0.fu <- dim(d)[1] fu.1000.bf.0 <- describe(d.1000$total_followup.1000) fu.bf.0 <- describe(d$total_followup) d_nnrti.1000.bf.0.fu <- dim(d_nnrti.1000)[1] fu_nnrti.1000.bf.0 <- describe(d_nnrti.1000$total_followup_nnrti.1000) d <- subset(d, total_followup > 0) d.1000 <- subset(d.1000, total_followup.1000 > 0) d_nnrti <- subset(d_nnrti, total_followup_nnrti > 0) d_nnrti.1000 <- subset(d_nnrti.1000, total_followup_nnrti.1000 > 0) d$outcome <- ifelse((d$overall_third_line_regimen == 1 & !is.na(d$overall_third_line_regimen))| (d$overall_failure_on_second_line == 1 & !is.na(d$overall_failure_on_second_line)),1,0) d.1000$outcome.1000 <- ifelse((d.1000$overall_third_line_regimen == 1 & !is.na(d.1000$overall_third_line_regimen))| (d.1000$overall_failure_on_second_line.1000 == 1 & !is.na(d.1000$overall_failure_on_second_line.1000)),1,0) d_nnrti$outcome_nnrti <- ifelse((d_nnrti$overall_third_line_regimen == 1 & !is.na(d_nnrti$overall_third_line_regimen))| (d_nnrti$overall_failure_on_second_line_nnrti == 1 & !is.na(d_nnrti$overall_failure_on_second_line_nnrti)),1,0) d_nnrti.1000$outcome_nnrti.1000 <- ifelse((d_nnrti.1000$overall_third_line_regimen == 1 & !is.na(d_nnrti$overall_third_line_regimen))| (d_nnrti.1000$overall_failure_on_second_line_nnrti.1000 == 1 & !is.na(d_nnrti.1000$overall_failure_on_second_line_nnrti.1000)),1,0) d$outcome_new <- ifelse(d$overall_third_line_regimen_new == 1 | d$overall_failure_on_second_line_new == 1, 1, ifelse(d$overall_third_line_regimen_new == 0 & d$overall_failure_on_second_line_new == 0,0,NA)) d.1000$outcome.1000_new <- ifelse(d.1000$overall_third_line_regimen_new == 1 | d.1000$overall_failure_on_second_line.1000_new == 1, 1, ifelse(d.1000$overall_third_line_regimen_new == 0 & d.1000$overall_failure_on_second_line.1000_new == 0,0,NA)) d_nnrti$outcome_nnrti_new <- ifelse(d_nnrti$overall_third_line_regimen_new == 1 | d_nnrti$overall_failure_on_second_line_nnrti_new == 1, 1, ifelse(d_nnrti$overall_third_line_regimen_new == 0 & d_nnrti$overall_failure_on_second_line_nnrti_new == 0,0,NA)) d_nnrti.1000$outcome_nnrti.1000_new <- ifelse(d_nnrti.1000$overall_third_line_regimen_new == 1 | d_nnrti.1000$overall_failure_on_second_line_nnrti.1000_new == 1, 1, ifelse(d_nnrti.1000$overall_third_line_regimen_new == 0 & d_nnrti.1000$overall_failure_on_second_line_nnrti.1000_new == 0,0,NA)) # Cumulative incidence # Need to create a 3-level censoring variable that is 0=No event, 1=Third line regimen or failure of 2nd line, 2=Death d$censor <- ifelse(d$outcome == 0 & d$overall_death_indicator == 0,0, ifelse(d$outcome == 1,1, ifelse(d$outcome == 0 & d$overall_death_indicator == 1,2,NA))) d.1000$censor.1000 <- ifelse(d.1000$outcome.1000 == 0 & d.1000$overall_death_indicator == 0,0, ifelse(d.1000$outcome.1000 == 1,1, ifelse(d.1000$outcome.1000 == 0 & d.1000$overall_death_indicator == 1,2,NA))) d_nnrti$censor.nnrti <- ifelse(d_nnrti$outcome_nnrti == 0 & d_nnrti$overall_death_indicator == 0,0, ifelse(d_nnrti$outcome_nnrti == 1,1, ifelse(d_nnrti$outcome_nnrti == 0 & d_nnrti$overall_death_indicator == 1,2,NA))) d_nnrti.1000$censor.nnrti.1000 <- ifelse(d_nnrti.1000$outcome_nnrti.1000 == 0 & d_nnrti.1000$overall_death_indicator == 0,0, ifelse(d_nnrti.1000$outcome_nnrti.1000 == 1,1, ifelse(d_nnrti.1000$outcome_nnrti.1000 == 0 & d_nnrti.1000$overall_death_indicator == 1,2,NA))) d$overall_death_indicator_new <- ifelse(!is.na(d$death_d) & !is.na(d$year_gap_date) & d$death_d > d$year_gap_date,0,d$overall_death_indicator) d.1000$overall_death_indicator_new <- ifelse(!is.na(d.1000$death_d) & !is.na(d.1000$year_gap_date) & d.1000$death_d > d.1000$year_gap_date,0, d.1000$overall_death_indicator) d_nnrti$overall_death_indicator_new <- ifelse(!is.na(d_nnrti$death_d) & !is.na(d_nnrti$year_gap_date) & d_nnrti$death_d > d_nnrti$year_gap_date,0, d_nnrti$overall_death_indicator) d_nnrti.1000$overall_death_indicator_new <- ifelse(!is.na(d_nnrti.1000$death_d) & !is.na(d_nnrti.1000$year_gap_date) & d_nnrti.1000$death_d > d_nnrti.1000$year_gap_date,0, d_nnrti.1000$overall_death_indicator) d$censor_new <- ifelse(d$outcome_new == 0 & d$overall_death_indicator_new == 0,0, ifelse(d$outcome_new == 1,1, ifelse(d$outcome_new == 0 & d$overall_death_indicator_new == 1,2,NA))) d.1000$censor.1000_new <- ifelse(d.1000$outcome.1000_new == 0 & d.1000$overall_death_indicator_new == 0,0, ifelse(d.1000$outcome.1000_new == 1,1, ifelse(d.1000$outcome.1000_new == 0 & d.1000$overall_death_indicator_new == 1,2,NA))) d_nnrti$censor.nnrti_new <- ifelse(d_nnrti$outcome_nnrti_new == 0 & d_nnrti$overall_death_indicator_new == 0,0, ifelse(d_nnrti$outcome_nnrti_new == 1,1, ifelse(d_nnrti$outcome_nnrti_new == 0 & d_nnrti$overall_death_indicator_new == 1,2,NA))) d_nnrti.1000$censor.nnrti.1000_new <- ifelse(d_nnrti.1000$outcome_nnrti.1000_new == 0 & d_nnrti.1000$overall_death_indicator_new == 0,0, ifelse(d_nnrti.1000$outcome_nnrti.1000_new == 1,1, ifelse(d_nnrti.1000$outcome_nnrti.1000_new == 0 & d_nnrti.1000$overall_death_indicator_new == 1,2,NA))) return(list(all_visits=all_visits, d=d, d.1000=d.1000, d_nnrti=d_nnrti, d_nnrti.1000=d_nnrti.1000, d.1000.bf.0.fu=d.1000.bf.0.fu, d.bf.0.fu=d.bf.0.fu, fu.bf.0=fu.bf.0, fu.1000.bf.0=fu.1000.bf.0, d_nnrti.1000.bf.0.fu=d_nnrti.1000.bf.0.fu, fu_nnrti.1000.bf.0=fu_nnrti.1000.bf.0)) } # end of t2evt_data_mgmt_function %------------------------------------------------------------------------------------------------------% time_to_evt_function_new_start <- function(df,switch,vl,censor){ if(switch == 'second_line' & vl=='yes' & !censor){ total_followup <- 'total_followup_2nd_start.1000' outcome <- 'outcome.1000' df <- subset(df, total_followup > 0.0) } else if(switch == 'second_line' & vl=='no' & !censor){ total_followup <- 'total_followup_2nd_start' outcome <- 'outcome' df <- subset(df, total_followup > 0.0) } else if(switch == 'second_line' & vl=='yes' & censor){ total_followup <- 'total_followup_2nd_start.1000_new' outcome <- 'outcome.1000_new' df <- subset(df, total_followup > 0.0) } else if(switch == 'second_line' & vl=='no' & censor){ total_followup <- 'total_followup_2nd_start_new' outcome <- 'outcome_new' df <- subset(df, total_followup > 0.0) } Srv.first <- Surv(df[[total_followup]], df[[outcome]]) ddist <<- datadist(df) options(datadist='ddist') # Primary analysis excluding log viral load from model time_to_evt <- cph(Srv.first ~ rcs(age_at_second_haart,3) + male.factor + aids_at_fhaart.factor + rcs(sqrt(second_haart_cd4),3) + rcs(year_second_haart,3) + transmission_risk_larger_cat.factor + strat(site.factor), data=df) # age at first HAART age_fhaart1 <- summary.fun.2nd(switch=switch,time_to_evt, cd4.comp=350,age.comp=c(40,20),year.comp=2006) age_fhaart2 <- summary.fun.2nd(switch=switch,time_to_evt, cd4.comp=350,age.comp=c(40,30),year.comp=2006) age_fhaart3 <- summary.fun.2nd(switch=switch,time_to_evt, cd4.comp=350,age.comp=c(40,50),year.comp=2006) # CD4 at first HAART cd4_1 <- summary.fun.2nd(switch=switch,time_to_evt, cd4.comp=c(350,50),age.comp=40,year.comp=2006) cd4_2 <- summary.fun.2nd(switch=switch,time_to_evt, cd4.comp=c(350,100),age.comp=40,year.comp=2006) cd4_3 <- summary.fun.2nd(switch=switch,time_to_evt, cd4.comp=c(350,200),age.comp=40,year.comp=2006) # year of first HAART year_1 <- summary.fun.2nd(switch=switch,time_to_evt, cd4.comp=350,age.comp=40,year.comp=c(2006,2002)) year_2 <- summary.fun.2nd(switch=switch,time_to_evt, cd4.comp=350,age.comp=40,year.comp=c(2006,2004)) year_3 <- summary.fun.2nd(switch=switch,time_to_evt, cd4.comp=350,age.comp=40,year.comp=c(2006,2008)) year_4 <- summary.fun.2nd(switch=switch,time_to_evt, cd4.comp=350,age.comp=40,year.comp=c(2006,2010)) which.age <- which(rownames(age_fhaart1) == 'age_at_second_haart') + 1 which.male <- which(rownames(age_fhaart1) == 'male.factor - Male:Female') + 1 which.aids <- which(rownames(age_fhaart1) == 'aids_at_fhaart.factor - AIDS:Not AIDS') + 1 which.year <- which(rownames(age_fhaart1) == 'year_second_haart') + 1 which.risk1 <- which(rownames(age_fhaart1) == 'transmission_risk_larger_cat.factor - Homo/Bisexual:Heterosexual') + 1 which.risk2 <- which(rownames(age_fhaart1) == 'transmission_risk_larger_cat.factor - IDU:Heterosexual') + 1 which.risk3 <- which(rownames(age_fhaart1) == 'transmission_risk_larger_cat.factor - Other:Heterosexual') + 1 which.cd4 <- which(rownames(cd4_1) == 'second_haart_cd4') + 1 primary.hr <- c(format(round(age_fhaart1[which.male,'Effect'],2),nsmall=2), '', '', format(round(age_fhaart1[which.age,'Effect'],2),nsmall=2), format(round(age_fhaart2[which.age,'Effect'],2),nsmall=2), '1.00', format(round(age_fhaart3[which.age,'Effect'],2),nsmall=2), '', format(round(age_fhaart1[which.aids,'Effect'],2),nsmall=2), '', '', format(round(year_1[which.year,'Effect'],2),nsmall=2), format(round(year_2[which.year,'Effect'],2),nsmall=2), '1.00', format(round(year_3[which.year,'Effect'],2),nsmall=2), format(round(year_4[which.year,'Effect'],2),nsmall=2), '', '', '1.00', format(round(age_fhaart1[which.risk1,'Effect'],2),nsmall=2), format(round(age_fhaart1[which.risk2,'Effect'],2),nsmall=2), format(round(age_fhaart1[which.risk3,'Effect'],2),nsmall=2), '', '', format(round(cd4_1[which.cd4,'Effect'],2),nsmall=2), format(round(cd4_2[which.cd4,'Effect'],2),nsmall=2), format(round(cd4_3[which.cd4,'Effect'],2),nsmall=2), '1.00', '', rep('',times=4)) primary.lci <- c(format(round(age_fhaart1[which.male,'Lower 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1[which.age,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart2[which.age,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart3[which.age,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart1[which.aids,'Lower 0.95'],2),nsmall=2), '', '', format(round(year_1[which.year,'Lower 0.95'],2),nsmall=2), format(round(year_2[which.year,'Lower 0.95'],2),nsmall=2), '', format(round(year_3[which.year,'Lower 0.95'],2),nsmall=2), format(round(year_4[which.year,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1[which.risk1,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1[which.risk2,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1[which.risk3,'Lower 0.95'],2),nsmall=2), '', '', format(round(cd4_1[which.cd4,'Lower 0.95'],2),nsmall=2), format(round(cd4_2[which.cd4,'Lower 0.95'],2),nsmall=2), format(round(cd4_3[which.cd4,'Lower 0.95'],2),nsmall=2), '', '', rep('',times=4)) primary.uci <- c(format(round(age_fhaart1[which.male,'Upper 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1[which.age,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart2[which.age,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart3[which.age,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart1[which.aids,'Upper 0.95'],2),nsmall=2), '', '', format(round(year_1[which.year,'Upper 0.95'],2),nsmall=2), format(round(year_2[which.year,'Upper 0.95'],2),nsmall=2), '', format(round(year_3[which.year,'Upper 0.95'],2),nsmall=2), format(round(year_4[which.year,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1[which.risk1,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1[which.risk2,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1[which.risk3,'Upper 0.95'],2),nsmall=2), '', '', format(round(cd4_1[which.cd4,'Upper 0.95'],2),nsmall=2), format(round(cd4_2[which.cd4,'Upper 0.95'],2),nsmall=2), format(round(cd4_3[which.cd4,'Upper 0.95'],2),nsmall=2), '', '', rep('',times=4)) primary.ci <- paste('(',primary.lci,', ',primary.uci,')',sep='') primary.ci <- ifelse(primary.ci == '(, )','',primary.ci) primary.p <- anova(time_to_evt)[,'P'] primary.p <- ifelse(primary.p < 0.001,'< 0.001', ifelse(primary.p >= 0.001 & primary.p < 0.01,format(round(primary.p,3),nsmall=2),format(round(primary.p,2),nsmall=2))) which.age.p <- which(names(primary.p) == 'age_at_second_haart') which.male.p <- which(names(primary.p) == 'male.factor') which.aids.p <- which(names(primary.p) == 'aids_at_fhaart.factor') which.cd4.p <- which(names(primary.p) == 'second_haart_cd4') which.year.p <- which(names(primary.p) == 'year_second_haart') which.risk.p <- which(names(primary.p) == 'transmission_risk_larger_cat.factor') primary.p.final <- c(primary.p[which.male.p], '', primary.p[which.age.p], rep('',times=5), primary.p[which.aids.p], '', primary.p[which.year.p], rep('',times=6), primary.p[which.risk.p], rep('',5), primary.p[which.cd4.p], rep('',times=5),rep('',times=4)) primary.df <- data.frame('Covariate'=c('Male','','Age at second HAART (years)','20','30','40 (ref)','50', '','AIDS at first HAART','','Year of second HAART', '2002','2004','2006 (ref)','2008','2010','', 'Route of infection', 'Heterosexual (ref)','Homo/Bisexual','IDU','Other','','CD4 at second HAART', '50','100','200','350 (ref)', '', 'HIV1-RNA at second HAART (log-transformed)', '4','5 (ref)','6'), 'HR'=primary.hr, 'CI'=primary.ci, 'P'=primary.p.final) #--------------------------------------------------------# # Secondary analysis including log viral load from model #--------------------------------------------------------# time_to_evt.wvl <- cph(Srv.first ~ rcs(age_at_second_haart,3) + male.factor + aids_at_fhaart.factor + rcs(sqrt(second_haart_cd4),3) + rcs(second_haart_log10_rna,3) + rcs(year_second_haart,3) + transmission_risk_larger_cat.factor + strat(site.factor), data=df) # age at first HAART age_fhaart1.wvl <- summary.fun.wvl.2nd(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=c(40,20),year.comp=2006,vl.comp=5) age_fhaart2.wvl <- summary.fun.wvl.2nd(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=c(40,30),year.comp=2006,vl.comp=5) age_fhaart3.wvl <- summary.fun.wvl.2nd(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=c(40,50),year.comp=2006,vl.comp=5) # CD4 at first HAART cd4_1.wvl <- summary.fun.wvl.2nd(switch=switch,time_to_evt.wvl, cd4.comp=c(350,50),age.comp=40,year.comp=2006,vl.comp=5) cd4_2.wvl <- summary.fun.wvl.2nd(switch=switch,time_to_evt.wvl, cd4.comp=c(350,100),age.comp=40,year.comp=2006,vl.comp=5) cd4_3.wvl <- summary.fun.wvl.2nd(switch=switch,time_to_evt.wvl, cd4.comp=c(350,200),age.comp=40,year.comp=2006,vl.comp=5) # year of first HAART year_1.wvl <- summary.fun.wvl.2nd(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2002),vl.comp=5) year_2.wvl <- summary.fun.wvl.2nd(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2004),vl.comp=5) year_3.wvl <- summary.fun.wvl.2nd(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2008),vl.comp=5) year_4.wvl <- summary.fun.wvl.2nd(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2010),vl.comp=5) vl_1 <- summary.fun.wvl.2nd(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=2006,vl.comp=c(5,4)) vl_2 <- summary.fun.wvl.2nd(switch=switch,time_to_evt.wvl, cd4.comp=350,age.comp=40,year.comp=2006,vl.comp=c(5,6)) which.age <- which(rownames(age_fhaart1.wvl) == 'age_at_second_haart') + 1 which.male <- which(rownames(age_fhaart1.wvl) == 'male.factor - Male:Female') + 1 which.aids <- which(rownames(age_fhaart1.wvl) == 'aids_at_fhaart.factor - AIDS:Not AIDS') + 1 which.year <- which(rownames(age_fhaart1.wvl) == 'year_second_haart') + 1 which.risk1 <- which(rownames(age_fhaart1.wvl) == 'transmission_risk_larger_cat.factor - Homo/Bisexual:Heterosexual') + 1 which.risk2 <- which(rownames(age_fhaart1.wvl) == 'transmission_risk_larger_cat.factor - IDU:Heterosexual') + 1 which.risk3 <- which(rownames(age_fhaart1.wvl) == 'transmission_risk_larger_cat.factor - Other:Heterosexual') + 1 which.cd4 <- which(rownames(cd4_1.wvl) == 'second_haart_cd4') + 1 which.vl <- which(rownames(vl_1) == 'second_haart_log10_rna') + 1 primary.hr.wvl <- c(format(round(age_fhaart1.wvl[which.male,'Effect'],2),nsmall=2), '', '', format(round(age_fhaart1.wvl[which.age,'Effect'],2),nsmall=2), format(round(age_fhaart2.wvl[which.age,'Effect'],2),nsmall=2), '1.00', format(round(age_fhaart3.wvl[which.age,'Effect'],2),nsmall=2), '', format(round(age_fhaart1.wvl[which.aids,'Effect'],2),nsmall=2), '', '', format(round(year_1.wvl[which.year,'Effect'],2),nsmall=2), format(round(year_2.wvl[which.year,'Effect'],2),nsmall=2), '1.00', format(round(year_3.wvl[which.year,'Effect'],2),nsmall=2), format(round(year_4.wvl[which.year,'Effect'],2),nsmall=2), '', '', '1.00', format(round(age_fhaart1.wvl[which.risk1,'Effect'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk2,'Effect'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk3,'Effect'],2),nsmall=2), '','', format(round(cd4_1.wvl[which.cd4,'Effect'],2),nsmall=2), format(round(cd4_2.wvl[which.cd4,'Effect'],2),nsmall=2), format(round(cd4_3.wvl[which.cd4,'Effect'],2),nsmall=2), '1.00', '','', format(round(vl_1[which.vl,'Effect'],2),nsmall=2), '1.00', format(round(vl_2[which.vl,'Effect'],2),nsmall=2)) primary.lci.wvl <- c(format(round(age_fhaart1.wvl[which.male,'Lower 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.wvl[which.age,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart2.wvl[which.age,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart3.wvl[which.age,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart1.wvl[which.aids,'Lower 0.95'],2),nsmall=2), '', '', format(round(year_1.wvl[which.year,'Lower 0.95'],2),nsmall=2), format(round(year_2.wvl[which.year,'Lower 0.95'],2),nsmall=2), '', format(round(year_3.wvl[which.year,'Lower 0.95'],2),nsmall=2), format(round(year_4.wvl[which.year,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.wvl[which.risk1,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk2,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk3,'Lower 0.95'],2),nsmall=2), '','', format(round(cd4_1.wvl[which.cd4,'Lower 0.95'],2),nsmall=2), format(round(cd4_2.wvl[which.cd4,'Lower 0.95'],2),nsmall=2), format(round(cd4_3.wvl[which.cd4,'Lower 0.95'],2),nsmall=2), '', '','', format(round(vl_1[which.vl,'Lower 0.95'],2),nsmall=2), '', format(round(vl_2[which.vl,'Lower 0.95'],2),nsmall=2)) primary.uci.wvl <- c(format(round(age_fhaart1.wvl[which.male,'Upper 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.wvl[which.age,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart2.wvl[which.age,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart3.wvl[which.age,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart1.wvl[which.aids,'Upper 0.95'],2),nsmall=2), '', '', format(round(year_1.wvl[which.year,'Upper 0.95'],2),nsmall=2), format(round(year_2.wvl[which.year,'Upper 0.95'],2),nsmall=2), '', format(round(year_3.wvl[which.year,'Upper 0.95'],2),nsmall=2), format(round(year_4.wvl[which.year,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.wvl[which.risk1,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk2,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl[which.risk3,'Upper 0.95'],2),nsmall=2), '','', format(round(cd4_1.wvl[which.cd4,'Upper 0.95'],2),nsmall=2), format(round(cd4_2.wvl[which.cd4,'Upper 0.95'],2),nsmall=2), format(round(cd4_3.wvl[which.cd4,'Upper 0.95'],2),nsmall=2), '', '','', format(round(vl_1[which.vl,'Upper 0.95'],2),nsmall=2), '', format(round(vl_2[which.vl,'Upper 0.95'],2),nsmall=2)) primary.ci.wvl <- paste('(',primary.lci.wvl,', ',primary.uci.wvl,')',sep='') primary.ci.wvl <- ifelse(primary.ci.wvl == '(, )','',primary.ci.wvl) primary.p.wvl <- anova(time_to_evt.wvl)[,'P'] primary.p.wvl <- ifelse(primary.p.wvl < 0.001,'< 0.001', ifelse(primary.p.wvl >= 0.001 & primary.p.wvl < 0.01,format(round(primary.p.wvl,3),nsmall=2),format(round(primary.p.wvl,2),nsmall=2))) which.age.p <- which(names(primary.p.wvl) == 'age_at_second_haart') which.male.p <- which(names(primary.p.wvl) == 'male.factor') which.aids.p <- which(names(primary.p.wvl) == 'aids_at_fhaart.factor') which.cd4.p <- which(names(primary.p.wvl) == 'second_haart_cd4') which.year.p <- which(names(primary.p.wvl) == 'year_second_haart') which.risk.p <- which(names(primary.p.wvl) == 'transmission_risk_larger_cat.factor') which.vl.p <- which(names(primary.p.wvl) == 'second_haart_log10_rna') primary.p.final.wvl <- c(primary.p.wvl[which.male.p], '', primary.p.wvl[which.age.p], rep('',times=5), primary.p.wvl[which.aids.p], '', primary.p.wvl[which.year.p], rep('',times=6), primary.p.wvl[which.risk.p], rep('',times=5), primary.p.wvl[which.cd4.p], rep('',times=5), primary.p.wvl[which.vl.p], rep('',times=3)) secondary.df <- data.frame('Covariate'=c('Male', '', 'Age at second HAART (years)', '~~~~20','~~~~30','~~~~40 (ref)','~~~~50','', 'AIDS at first HAART','', 'Year of second HAART', '~~~~2002','~~~~2004','~~~~2006 (ref)','~~~~2008','~~~~2010','', 'Route of infection', '~~~~Heterosexual (ref)','Homo/Bisexual','IDU','Other','', 'CD4 at second HAART', '~~~~50','~~~~100','~~~~200','~~~~350 (ref)', '', 'HIV1-RNA at second HAART (log-transformed)', '~~~~4','~~~~5 (ref)','~~~~6'), 'HR'=primary.hr.wvl, 'CI'=primary.ci.wvl, 'P'=primary.p.final.wvl) # For imputation set.seed(1) df$log.fu <- log(df[[total_followup]]) df$df.outcome <- df[[outcome]] impute.1 <- aregImpute(~ log.fu*df.outcome + age_at_second_haart + male.factor + aids_at_fhaart.factor + second_haart_cd4 + year_second_haart + second_haart_log10_rna + transmission_risk_larger_cat.factor + site.factor, data=df) impute.mod <- fit.mult.impute(Srv.first ~ rcs(age_at_second_haart,3) + male.factor + aids_at_fhaart.factor + rcs(sqrt(second_haart_cd4),3) + rcs(year_second_haart,3) + transmission_risk_larger_cat.factor + strat(site.factor), data=df, fitter=cph, xtrans=impute.1,x=TRUE,y=TRUE) # age at first HAART age_fhaart1.impute <- summary.fun.2nd(switch=switch,impute.mod, cd4.comp=350,age.comp=c(40,20),year.comp=2006) age_fhaart2.impute <- summary.fun.2nd(switch=switch,impute.mod, cd4.comp=350,age.comp=c(40,30),year.comp=2006) age_fhaart3.impute <- summary.fun.2nd(switch=switch,impute.mod, cd4.comp=350,age.comp=c(40,50),year.comp=2006) # CD4 at first HAART cd4_1.impute <- summary.fun.2nd(switch=switch,impute.mod, cd4.comp=c(350,50),age.comp=40,year.comp=2006) cd4_2.impute <- summary.fun.2nd(switch=switch,impute.mod, cd4.comp=c(350,100),age.comp=40,year.comp=2006) cd4_3.impute <- summary.fun.2nd(switch=switch,impute.mod, cd4.comp=c(350,200),age.comp=40,year.comp=2006) # year of first HAART year_1.impute <- summary.fun.2nd(switch=switch,impute.mod, cd4.comp=350,age.comp=40,year.comp=c(2006,2002)) year_2.impute <- summary.fun.2nd(switch=switch,impute.mod, cd4.comp=350,age.comp=40,year.comp=c(2006,2004)) year_3.impute <- summary.fun.2nd(switch=switch,impute.mod, cd4.comp=350,age.comp=40,year.comp=c(2006,2008)) year_4.impute <- summary.fun.2nd(switch=switch,impute.mod, cd4.comp=350,age.comp=40,year.comp=c(2006,2010)) which.age.impute <- which(rownames(age_fhaart1.impute) == 'age_at_second_haart') + 1 which.male.impute <- which(rownames(age_fhaart1.impute) == 'male.factor - Male:Female') + 1 which.aids.impute <- which(rownames(age_fhaart1.impute) == 'aids_at_fhaart.factor - AIDS:Not AIDS') + 1 which.year.impute <- which(rownames(age_fhaart1.impute) == 'year_second_haart') + 1 which.risk1.impute <- which(rownames(age_fhaart1.impute) == 'transmission_risk_larger_cat.factor - Homo/Bisexual:Heterosexual') + 1 which.risk2.impute <- which(rownames(age_fhaart1.impute) == 'transmission_risk_larger_cat.factor - IDU:Heterosexual') + 1 which.risk3.impute <- which(rownames(age_fhaart1.impute) == 'transmission_risk_larger_cat.factor - Other:Heterosexual') + 1 which.cd4.impute <- which(rownames(cd4_1.impute) == 'second_haart_cd4') + 1 primary.hr.impute <- c(format(round(age_fhaart1.impute[which.male.impute,'Effect'],2),nsmall=2), '', '', format(round(age_fhaart1.impute[which.age.impute,'Effect'],2),nsmall=2), format(round(age_fhaart2.impute[which.age.impute,'Effect'],2),nsmall=2), '1.00', format(round(age_fhaart3.impute[which.age.impute,'Effect'],2),nsmall=2), '', format(round(age_fhaart1.impute[which.aids.impute,'Effect'],2),nsmall=2), '', '', format(round(year_1.impute[which.year.impute,'Effect'],2),nsmall=2), format(round(year_2.impute[which.year.impute,'Effect'],2),nsmall=2), '1.00', format(round(year_3.impute[which.year.impute,'Effect'],2),nsmall=2), format(round(year_4.impute[which.year.impute,'Effect'],2),nsmall=2), '', '', '1.00', format(round(age_fhaart1.impute[which.risk1.impute,'Effect'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk2.impute,'Effect'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk3.impute,'Effect'],2),nsmall=2), '', '', format(round(cd4_1.impute[which.cd4.impute,'Effect'],2),nsmall=2), format(round(cd4_2.impute[which.cd4.impute,'Effect'],2),nsmall=2), format(round(cd4_3.impute[which.cd4.impute,'Effect'],2),nsmall=2), '1.00', '', rep('',times=4)) primary.lci.impute <- c(format(round(age_fhaart1.impute[which.male.impute,'Lower 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart2.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart3.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart1.impute[which.aids.impute,'Lower 0.95'],2),nsmall=2), '', '', format(round(year_1.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), format(round(year_2.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), '', format(round(year_3.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), format(round(year_4.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.impute[which.risk1.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk2.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk3.impute,'Lower 0.95'],2),nsmall=2), '', '', format(round(cd4_1.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), format(round(cd4_2.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), format(round(cd4_3.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), '', '', rep('',times=4)) primary.uci.impute <- c(format(round(age_fhaart1.impute[which.male.impute,'Upper 0.95'],2),nsmall=2), '', '', format(round(age_fhaart1.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart2.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart3.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart1.impute[which.aids.impute,'Upper 0.95'],2),nsmall=2), '', '', format(round(year_1.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), format(round(year_2.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), '', format(round(year_3.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), format(round(year_4.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.impute[which.risk1.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk2.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.impute[which.risk3.impute,'Upper 0.95'],2),nsmall=2), '', '', format(round(cd4_1.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), format(round(cd4_2.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), format(round(cd4_3.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), '', '', rep('',times=4)) primary.ci.impute <- paste('(',primary.lci.impute,', ',primary.uci.impute,')',sep='') primary.ci.impute <- ifelse(primary.ci.impute == '(, )','',primary.ci.impute) primary.p.impute <- anova(impute.mod)[,'P'] primary.p.impute <- ifelse(primary.p.impute < 0.001,'< 0.001', ifelse(primary.p.impute >= 0.001 & primary.p.impute < 0.01,format(round(primary.p.impute,3),nsmall=2), format(round(primary.p.impute,2),nsmall=2))) which.age.p.impute <- which(names(primary.p.impute) == 'age_at_second_haart') which.male.p.impute <- which(names(primary.p.impute) == 'male.factor') which.aids.p.impute <- which(names(primary.p.impute) == 'aids_at_fhaart.factor') which.cd4.p.impute <- which(names(primary.p.impute) == 'second_haart_cd4') which.year.p.impute <- which(names(primary.p.impute) == 'year_second_haart') which.risk.p.impute <- which(names(primary.p.impute) == 'transmission_risk_larger_cat.factor') primary.p.final.impute <- c(primary.p.impute[which.male.p.impute], '', primary.p.impute[which.age.p.impute], rep('',times=5), primary.p.impute[which.aids.p.impute], '', primary.p.impute[which.year.p.impute], rep('',times=6), primary.p.impute[which.risk.p.impute], rep('',times=5), primary.p.impute[which.cd4.p.impute], rep('',times=5), rep('',times=4)) primary.df.impute <- data.frame('Covariate'=c('Male', '', 'Age at second HAART (years)','20','30','40 (ref)','50','', 'AIDS at first HAART','', 'Year of second HAART', '2002','2004','2006 (ref)','2008','2010','', 'Route of infection', 'Heterosexual (ref)','Homo/Bisexual','IDU','Other','', 'CD4 at second HAART', '50','100','200','350 (ref)','', 'HIV1-RNA at second HAART (log-transformed)', '4','5 (ref)','6'), 'HR'=primary.hr.impute, 'CI'=primary.ci.impute, 'P'=primary.p.final.impute) # Secondary analysis including log viral load from model impute.mod.wvl <- fit.mult.impute(Srv.first ~ rcs(age_at_second_haart,3) + male.factor + aids_at_fhaart.factor + rcs(sqrt(second_haart_cd4),3) + rcs(second_haart_log10_rna,3) + rcs(year_second_haart,3) + transmission_risk_larger_cat.factor + strat(site.factor),data=df,fitter=cph,xtrans=impute.1,x=TRUE,y=TRUE) # age at first HAART age_fhaart1.wvl.impute <- summary.fun.wvl.2nd(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=c(40,20),year.comp=2006,vl.comp=5) age_fhaart2.wvl.impute <- summary.fun.wvl.2nd(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=c(40,30),year.comp=2006,vl.comp=5) age_fhaart3.wvl.impute <- summary.fun.wvl.2nd(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=c(40,50),year.comp=2006,vl.comp=5) # CD4 at first HAART cd4_1.wvl.impute <- summary.fun.wvl.2nd(switch=switch,impute.mod.wvl, cd4.comp=c(350,50),age.comp=40,year.comp=2006,vl.comp=5) cd4_2.wvl.impute <- summary.fun.wvl.2nd(switch=switch,impute.mod.wvl, cd4.comp=c(350,100),age.comp=40,year.comp=2006,vl.comp=5) cd4_3.wvl.impute <- summary.fun.wvl.2nd(switch=switch,impute.mod.wvl, cd4.comp=c(350,200),age.comp=40,year.comp=2006,vl.comp=5) # year of first HAART year_1.wvl.impute <- summary.fun.wvl.2nd(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2002),vl.comp=5) year_2.wvl.impute <- summary.fun.wvl.2nd(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2004),vl.comp=5) year_3.wvl.impute <- summary.fun.wvl.2nd(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2008),vl.comp=5) year_4.wvl.impute <- summary.fun.wvl.2nd(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=c(2006,2010),vl.comp=5) vl_1.impute <- summary.fun.wvl.2nd(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=2006,vl.comp=c(5,4)) vl_2.impute <- summary.fun.wvl.2nd(switch=switch,impute.mod.wvl, cd4.comp=350,age.comp=40,year.comp=2006,vl.comp=c(5,6)) which.age.impute <- which(rownames(age_fhaart1.wvl.impute) == 'age_at_second_haart') + 1 which.male.impute <- which(rownames(age_fhaart1.wvl.impute) == 'male.factor - Male:Female') + 1 which.aids.impute <- which(rownames(age_fhaart1.wvl.impute) == 'aids_at_fhaart.factor - AIDS:Not AIDS') + 1 which.year.impute <- which(rownames(age_fhaart1.wvl.impute) == 'year_second_haart') + 1 which.risk1.impute <- which(rownames(age_fhaart1.wvl.impute) == 'transmission_risk_larger_cat.factor - Homo/Bisexual:Heterosexual') + 1 which.risk2.impute <- which(rownames(age_fhaart1.wvl.impute) == 'transmission_risk_larger_cat.factor - IDU:Heterosexual') + 1 which.risk3.impute <- which(rownames(age_fhaart1.wvl.impute) == 'transmission_risk_larger_cat.factor - Other:Heterosexual') + 1 which.cd4.impute <- which(rownames(cd4_1.wvl.impute) == 'second_haart_cd4') + 1 which.vl.impute <- which(rownames(vl_1.impute) == 'second_haart_log10_rna') + 1 primary.hr.wvl.impute <- c(format(round(age_fhaart1.wvl.impute[which.male.impute,'Effect'],2),nsmall=2),'', '', format(round(age_fhaart1.wvl.impute[which.age.impute,'Effect'],2),nsmall=2), format(round(age_fhaart2.wvl.impute[which.age.impute,'Effect'],2),nsmall=2), '1.00', format(round(age_fhaart3.wvl.impute[which.age.impute,'Effect'],2),nsmall=2), '', format(round(age_fhaart1.wvl.impute[which.aids.impute,'Effect'],2),nsmall=2), '', '',format(round(year_1.wvl.impute[which.year.impute,'Effect'],2),nsmall=2), format(round(year_2.wvl.impute[which.year.impute,'Effect'],2),nsmall=2), '1.00', format(round(year_3.wvl.impute[which.year.impute,'Effect'],2),nsmall=2), format(round(year_4.wvl.impute[which.year.impute,'Effect'],2),nsmall=2), '', '', '1.00', format(round(age_fhaart1.wvl.impute[which.risk1.impute,'Effect'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk2.impute,'Effect'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk3.impute,'Effect'],2),nsmall=2),'', '', format(round(cd4_1.wvl.impute[which.cd4.impute,'Effect'],2),nsmall=2), format(round(cd4_2.wvl.impute[which.cd4.impute,'Effect'],2),nsmall=2), format(round(cd4_3.wvl.impute[which.cd4.impute,'Effect'],2),nsmall=2), '1.00','', '', format(round(vl_1.impute[which.vl.impute,'Effect'],2),nsmall=2), '1.00', format(round(vl_2.impute[which.vl.impute,'Effect'],2),nsmall=2)) primary.lci.wvl.impute <- c(format(round(age_fhaart1.wvl.impute[which.male.impute,'Lower 0.95'],2),nsmall=2),'', '', format(round(age_fhaart1.wvl.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart2.wvl.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart3.wvl.impute[which.age.impute,'Lower 0.95'],2),nsmall=2), '', format(round(age_fhaart1.wvl.impute[which.aids.impute,'Lower 0.95'],2),nsmall=2), '', '',format(round(year_1.wvl.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), format(round(year_2.wvl.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), '', format(round(year_3.wvl.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), format(round(year_4.wvl.impute[which.year.impute,'Lower 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.wvl.impute[which.risk1.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk2.impute,'Lower 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk3.impute,'Lower 0.95'],2),nsmall=2),'', '', format(round(cd4_1.wvl.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), format(round(cd4_2.wvl.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), format(round(cd4_3.wvl.impute[which.cd4.impute,'Lower 0.95'],2),nsmall=2), '','', '', format(round(vl_1.impute[which.vl.impute,'Lower 0.95'],2),nsmall=2), '', format(round(vl_2.impute[which.vl.impute,'Lower 0.95'],2),nsmall=2)) primary.uci.wvl.impute <- c(format(round(age_fhaart1.wvl.impute[which.male.impute,'Upper 0.95'],2),nsmall=2),'', '', format(round(age_fhaart1.wvl.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart2.wvl.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart3.wvl.impute[which.age.impute,'Upper 0.95'],2),nsmall=2), '', format(round(age_fhaart1.wvl.impute[which.aids.impute,'Upper 0.95'],2),nsmall=2), '', '',format(round(year_1.wvl.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), format(round(year_2.wvl.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), '', format(round(year_3.wvl.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), format(round(year_4.wvl.impute[which.year.impute,'Upper 0.95'],2),nsmall=2), '', '', '', format(round(age_fhaart1.wvl.impute[which.risk1.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk2.impute,'Upper 0.95'],2),nsmall=2), format(round(age_fhaart1.wvl.impute[which.risk3.impute,'Upper 0.95'],2),nsmall=2),'', '', format(round(cd4_1.wvl.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), format(round(cd4_2.wvl.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), format(round(cd4_3.wvl.impute[which.cd4.impute,'Upper 0.95'],2),nsmall=2), '','', '', format(round(vl_1.impute[which.vl.impute,'Upper 0.95'],2),nsmall=2), '', format(round(vl_2.impute[which.vl.impute,'Upper 0.95'],2),nsmall=2)) primary.ci.wvl.impute <- paste('(',primary.lci.wvl.impute,', ',primary.uci.wvl.impute,')',sep='') primary.ci.wvl.impute <- ifelse(primary.ci.wvl.impute == '(, )','',primary.ci.wvl.impute) primary.p.wvl.impute <- anova(impute.mod.wvl)[,'P'] primary.p.wvl.impute <- ifelse(primary.p.wvl.impute < 0.001,'< 0.001', ifelse(primary.p.wvl.impute >= 0.001 & primary.p.wvl.impute < 0.01,format(round(primary.p.wvl.impute,3),nsmall=2), format(round(primary.p.wvl.impute,2),nsmall=2))) which.age.p.impute <- which(names(primary.p.wvl.impute) == 'age_at_second_haart') which.male.p.impute <- which(names(primary.p.wvl.impute) == 'male.factor') which.aids.p.impute <- which(names(primary.p.wvl.impute) == 'aids_at_fhaart.factor') which.cd4.p.impute <- which(names(primary.p.wvl.impute) == 'second_haart_cd4') which.year.p.impute <- which(names(primary.p.wvl.impute) == 'year_second_haart') which.risk.p.impute <- which(names(primary.p.wvl.impute) == 'transmission_risk_larger_cat.factor') which.vl.p.impute <- which(names(primary.p.wvl.impute) == 'second_haart_log10_rna') primary.p.final.wvl.impute <- c(primary.p.wvl.impute[which.male.p.impute], '', primary.p.wvl.impute[which.age.p.impute], rep('',times=5), primary.p.wvl.impute[which.aids.p.impute],'', primary.p.wvl.impute[which.year.p.impute], rep('',times=6), primary.p.wvl.impute[which.risk.p.impute], rep('',times=5), primary.p.wvl.impute[which.cd4.p.impute], rep('',times=5), primary.p.wvl.impute[which.vl.p.impute], rep('',times=3)) secondary.df.impute <- data.frame('Covariate'=c('Male', '', 'Age at second HAART (years)', '~~~~20','~~~~30','~~~~40 (ref)','~~~~50','', 'AIDS at enrollment','', 'Year of second HAART', '~~~~2002','~~~~2004','~~~~2006 (ref)','~~~~2008','~~~~2010','', 'Route of infection', '~~~~Heterosexual (ref)','~~~~Homo/Bisexual','~~~~IDU','~~~~Other','', 'CD4 at second HAART', '~~~~50','~~~~100','~~~~200','~~~~350 (ref)','', 'HIV1-RNA at second HAART (log-transformed)', '~~~~4','~~~~5 (ref)','~~~~6'), 'HR'=primary.hr.wvl.impute, 'CI'=primary.ci.wvl.impute, 'P'=primary.p.final.wvl.impute) return(list(primary.df=primary.df, time_to_evt=time_to_evt, secondary.df=secondary.df, time_to_evt.wvl=time_to_evt.wvl, primary.df.impute=primary.df.impute, impute.mod=impute.mod, secondary.df.impute=secondary.df.impute, impute.mod.wvl=impute.mod.wvl)) } # end of time_to_evt_function