From 0972b6f77e5290562eec2100e7cc0f858e98b3ba Mon Sep 17 00:00:00 2001 From: awamaeva Date: Tue, 30 Jan 2024 01:16:17 -0500 Subject: [PATCH] Updates 12 --- .DS_Store | Bin 12292 -> 12292 bytes DESCRIPTION | 15 +- Data/Obsdata.kml.Rdata | Bin 51936 -> 0 bytes Meta/.DS_Store | Bin 6148 -> 6148 bytes Meta/vignette.rds | Bin 195 -> 0 bytes NAMESPACE | 33 +-- R/IPW.R | 11 +- R/build_traj.R | 4 +- R/gendata.R | 8 +- R/gformula.R | 11 +- R/ggtraj.R | 3 +- R/pltmle.R | 31 +-- R/pltmle_countermeans2.R | 153 -------------- R/predict_traj.R | 7 +- R/split_data.R | 7 +- R/stabilized_ipcw.R | 1 + R/stabilized_iptw.R | 2 + R/test.R | 56 ------ R/trajHRMSM_IPW.R | 6 +- R/trajHRMSM_gform.R | 25 ++- R/trajHRMSM_pltmle.R | 7 +- R/trajmsm_gform.R | 36 ++-- R/trajmsm_ipw.R | 18 +- R/trajmsm_pltmle.R | 18 +- R/unstabilized_ipcw.R | 1 + R/unstabilized_iptw.R | 1 + google39ef60d579fe8149.html | 1 - man/IPW.Rd | 60 ------ man/build_traj.Rd | 45 +++++ man/buildtraj.Rd | 48 ----- man/gendata.Rd | 36 ++++ man/gendatatraj.Rd | 53 ----- man/gform_countermeans.Rd | 50 ----- man/gformula.Rd | 40 ++++ man/ggplotraj.Rd | 57 ------ man/ggtraj.Rd | 51 +++++ man/inverse_probability_weighting.Rd | 56 ++++++ man/longtowide.Rd | 26 --- man/pltmle.Rd | 84 ++++++++ man/pooledltmle_countermeans.Rd | 59 ------ man/predicTraj..Rd | 29 --- man/predict_traj.Rd | 35 ++++ man/split_data.Rd | 29 ++- man/trajMSM-package.Rd | 34 ---- man/trajMSM_IPW.Rd | 108 +++++----- man/trajMSM_gform.Rd | 90 +++++---- man/trajMSM_pooled_ltmle.Rd | 67 ------ man/trajhrmsm_gform.Rd | 84 ++++++++ man/trajhrmsm_ipw.Rd | 80 ++++++++ man/trajmsm_pltmle.Rd | 80 ++++++++ man/widetolong.Rd | 26 --- vignettes/.DS_Store | Bin 6148 -> 6148 bytes vignettes/ex_MSM_IPW.Rmd | 291 --------------------------- vignettes/trajMSM.Rmd | 46 ----- vignettes/trajMSM_0.1.0.pdf | Bin 102424 -> 0 bytes vignettes/vignette_trajmsm.Rmd | 11 + 56 files changed, 877 insertions(+), 1253 deletions(-) delete mode 100644 Data/Obsdata.kml.Rdata delete mode 100644 Meta/vignette.rds delete mode 100644 R/pltmle_countermeans2.R delete mode 100644 R/test.R delete mode 100644 google39ef60d579fe8149.html delete mode 100644 man/IPW.Rd create mode 100644 man/build_traj.Rd delete mode 100644 man/buildtraj.Rd create mode 100644 man/gendata.Rd delete mode 100644 man/gendatatraj.Rd delete mode 100644 man/gform_countermeans.Rd create mode 100644 man/gformula.Rd delete mode 100644 man/ggplotraj.Rd create mode 100644 man/ggtraj.Rd create mode 100644 man/inverse_probability_weighting.Rd delete mode 100644 man/longtowide.Rd create mode 100644 man/pltmle.Rd delete mode 100644 man/pooledltmle_countermeans.Rd delete mode 100644 man/predicTraj..Rd create mode 100644 man/predict_traj.Rd delete mode 100644 man/trajMSM-package.Rd delete mode 100644 man/trajMSM_pooled_ltmle.Rd create mode 100644 man/trajhrmsm_gform.Rd create mode 100644 man/trajhrmsm_ipw.Rd create mode 100644 man/trajmsm_pltmle.Rd delete mode 100644 man/widetolong.Rd delete mode 100644 vignettes/ex_MSM_IPW.Rmd delete mode 100644 vignettes/trajMSM.Rmd delete mode 100644 vignettes/trajMSM_0.1.0.pdf create mode 100644 vignettes/vignette_trajmsm.Rmd diff --git a/.DS_Store b/.DS_Store index 0532d283ffd93382f5904e92fe8ca88f24bf89c9..8c75ced21cdb7fae02f8a558293ef386ea2683c8 100644 GIT binary patch delta 1555 zcmchXZETZO6vxm1w(Fk9)$yz^>%%riXDKaM_tI{|F%mjja19V=yP?j-y>xR-`?eLP zP@AFIYxqP42zt z+>@O9&+ndd5A+@Ad$fYl!O1F*xs`}CL<-S%+Dswppf>VNj@o#=OIrjH)bb*So1JxL zUsrv_*MnT-eqm{ zG^f+DWVY3{27B*`L}T$oe8#eJ%|tFoWVj&|jz<&16FKkrE`ORF_vJEcR`Y&id2vN& z*N$8Dw?Aew^KNBN$!#Oycq}xscSu3@8zqU1ck5CDvU#0(BexNC#`>c}vdvqcKagkz zxyeu4sE@`dMThAK9j7UprZ?$5`k2ns0)0;3(k1$lexl1LLMarK!GKCQu@=|Eg(kFN z6MWc)TM$Agx-z&EVGQ9e3?qSY+=o5bi~X3uVLXgSa0JKj9G=H3IEANZp%&W0sYoIw3P+Wo$0~+cc9Yk)=6xc}1nZMc*nb zNmd=CX@Cwv^ zY{AXwKu`eh6102Kj{yuKikKiiiX`qw8X4@vgM#`)g8Som0!Q&Ap2iD!5ij9oyn!rE zU>Ya!7T(1Ng8n?t=P2gc_K>KHs|G$3uBi2B-0#oVx^&{$^hfPeXWFhr2LB?G*jZ59 zjI!&?!!UY0qCwoA-}0}Q`yk1p#wR(+C-hHZi_BgLqS4lbZOdDUYl=FmI ziiK=OZP&rU_15LRx-UFJgO+M(m_}$0rkJ#0tPC_HTPZ`0tlb6_`U^XU z(9Djos3XQuuNV`}rV@!tg3cQLQ9+GE6Mtn1FjX^rgPYv@ z&bjC1-tYaKd(U|Pc>i&W05NB6HFgk@j!2<&DiTXZxOX;^%FUi+Zl}H$+|~0A>WLg& z`hhju4m8$eGT!@~YU`*|&3HU+uTyPnYZ)DtM5E31K+mrIv3Mf+9P_VRTQT7{HRESz zR4e;Sm8WNQmH8E-UfiZ=3&-|&dIys66!-W>p$m(%>5+|^9$j4|6^o{a-R=SeoxY-S zg(%%+kXKrQ+k+vwuP-`~O!P(%53z679Aep3M#<)LFRVp*)9N&`noVT$IW#kv2*-yc z1td~E*{Pj;6r|mhq$Bh^P0@$+37w;F=?D6WF4G@$m97C0po0t}YGHyI4RFDO7PMjm zHlrI`(2G7if=BTfhOiGY#F4;3j3S%G7>?i=Uc^f{ftN9bxA6|%MIN8y3(VjGzQ-I2 z_z^$j7hJ{_{E5Hu53UJ{U=}PwozN_}gm%F%bO{0N075Y>#kN!Xlt!VOTRc^<^vGf^ zh2xRNo5HgOHV3-pwj1EpUxz2n-Cd=uT3x-ySW~Mu-s@W5{-B=?8b8gpNuq*_CbOkZ zzF*!TDQQX3Yi_;llO%-}9P38wCQECG|H(muUyF9((BaC9&|jTrTHfvNCAQWNwi#E0l82mk;8 diff --git a/DESCRIPTION b/DESCRIPTION index 3b9d587..e307918 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,11 +1,13 @@ Package: trajmsm Type: Package Title: Marginal Structural Models with Latent Class Growth Analysis of Treatment Trajectories -Version: 0.1.0 -Author: Awa Diop, Denis Talbot +Version: 0.1.2 +Authors@R: c( + person("Awa", "Diop", email = "awa.diop.2@ulaval.ca", role = c("aut", "cre")), + person("Denis", "Talbot", role = "aut")) Maintainer: Awa Diop -Description: The package trajmsm is based on the paper Marginal Structural Models with Latent Class Growth Analysis of Treatment Trajectories:https://journals.sagepub.com/doi/pdf/10.1177/09622802231202384. -License: GPL-3 +Description: Implements marginal structural models combined with latent class growth analysis framework for assessing the causal effect of treatment trajectories. Based on the approach described in "Marginal Structural Models with Latent Class Growth Analysis of Treatment Trajectories" (https://journals.sagepub.com/doi/pdf/10.1177/09622802231202384). +License: GPL (>= 3) Encoding: UTF-8 Imports: class, @@ -13,10 +15,13 @@ Imports: flexmix, geepack, ggplot2, - survival + survival, + sandwich LazyData: true Suggests: knitr, rmarkdown VignetteBuilder: knitr RoxygenNote: 7.2.0 +URL: https://github.com/awamaeva/R-package-trajmsm +BugReports: https://github.com/awamaeva/R-package-trajmsm/issues diff --git a/Data/Obsdata.kml.Rdata b/Data/Obsdata.kml.Rdata deleted file mode 100644 index 88cbcd519659f6680a65b16a8b2db1db1a7e6e9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51936 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 z 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 diff --git a/Meta/.DS_Store b/Meta/.DS_Store index fae34bd29c78b0b76920eeb4f78a4691ea8f6797..6be89cf89766b45fc6a3f7661c8147db63795723 100644 GIT binary patch delta 59 zcmZoMXfc=|&e%4wP;8=}A|vC(0Ba!8W4iIX0Q+PCMzhWA90DASZJQYxzcWwf7tv*9 OWME)8u-R7RFf#!E#tk(i!p?QW;8sFqJ`%p@<=c zq1ZDgKRGEUKZ${XK>&yyfmrW97;HQ!%)XhOLx6*^edEFJ%#-;=bQu{oJBl1;p4h+w E082$5xBvhE diff --git a/Meta/vignette.rds b/Meta/vignette.rds deleted file mode 100644 index 45830091864614415a3a2c34b380dfac66716f77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmV;!06hO6iwFP!000001B>8dU|?WkU}0opU}6R`nT3G_8xRWsF(U&D11FH?E-6aP z@(uRY3(8GFlVXQTp$YTAbYzs|=Ag-O!c7C(EDV-_C;$Q$CM1Qdd5O8H#po8gq!y&+ zrGSM0Vb{<2A59B~cWPyMei2L$iW)Yk8Wy+AoK%>-A( Weights[, x], quantile(Weights[, x], treshold, na.rm = TRUE), Weights[, x]) diff --git a/R/pltmle_countermeans2.R b/R/pltmle_countermeans2.R deleted file mode 100644 index 7ef9434..0000000 --- a/R/pltmle_countermeans2.R +++ /dev/null @@ -1,153 +0,0 @@ -#' @title Counterfactual means for a Pooled LTMLE -#' @description function to estimate counterfactual means for a pooled LTMLE. -#' @name sub_pltmle2 -#' @param formula specification of the model for the outcome to be fitted. -#' @param id name of the column for unique identifiant. -#' @param V baseline covariates. -#' @param L time-varying covariates. -#' @param A time-varying treatment. -#' @param Y outcome variable. -#' @param s number of measuring times. -#' @param J number of trajectory groups. -#' @param time measuring times. -#' @param obsdata observed data in wide format. -#' @returns \item{list_pltmle_countermeans}{Counterfactual means and influence functions with the pooled ltmle.} -#' \item{D}{Influence functions} -#' @import e1071 -#' @examples -#' obsdata_msm <- genobsdata_msm(n=2500) -#' V <- "V" -#' L <- "L" -#' time <- 1:3 -#' A <- "A" -#' Y <- "Y" -#' @author Awa Diop, Denis Talbot - - -sub_pltmle2<-function(formula,Y,A,L,V,s,time,timevar,idvar,obsdata,Traj){ - A. = paste0(A,".") - L. = paste0(L,".") - Y. = paste0(Y,".") - varA <- paste0(A.,time[1:s]) - D = NULL - j = 0; - obsdata0.all=list() - obsdata.all=list() - nb_regimes = 2^s #number of treatment regimes - logit = qlogis; - expit = plogis; - - if(nb_regimes > 1000) { - cat("With that number of periods, there is more than 1,000 thousand potential treatment regimes:",nb_regimes); - cont <- readline("Continue? y/n: "); - if(cont == "n" | cont == "no" | cont == "NO") stop("Aborted.") - } - #Treatment regimes - dat.combn = bincombinations(s); - list.regimes=lapply(1:nb_regimes,function(x){; - regime = dat.combn[x,]; - return(regime); - }) - - j = 0 - for(regimes in list.regimes){ - j=j+1 - obsdata0 = obsdata; - obsdata0[,paste0(A.,time[1:s])] <- do.call(cbind,lapply(1:s, function(x){ - rgm <- rep(regimes[x],nrow(obsdata0)) - return(rgm)})); - - obsdata0.all[j]=list(obsdata0) - obsdata.all[j]=list(obsdata) - } - obsdata.all2 = data.frame(do.call(rbind,obsdata.all)) - obsdata0.all2 = data.frame(do.call(rbind,obsdata0.all)) - - #Model - modQs = glm(formula = formula, family = binomial, data = obsdata); - #for t=3 predict the outcome for all different regimes of treatment - Qs = lapply(1:nb_regimes,function(i)predict(modQs, newdata = obsdata0.all[[i]], type = "res")); - - #Compute the weights for all different regimes of treatment - W = IPW(numerator = "unstabilized", id = idvar , V = V,L =L.,A = A., C = FALSE, - censor = censor, K = s,obsdata = obsdata); - - Hs.all=list() - j=0; - for(regimes in list.regimes){ - j=j+1 - Hs.all[j] = list(as.matrix(1*(rowSums(sapply(1:s,function(x) - 1*(obsdata[,varA[x]] == unlist(regimes)[x])))==s)*W[,s])%*%t(as.matrix(Traj[j,1:J]))) - } - - Hs=do.call(rbind,Hs.all) - # Update the risk for each regime of treatment - ## First estimate the vector of fluctuation error - - modEs = glm(as.formula(paste0(paste0(Y.,s), "~", "-1 + offset(logit(unlist(Qs))) + Hs")), family = binomial, data = obsdata.all2); - coef_Es <- coef(modEs) - coef_Es<- ifelse(is.na(coef_Es),0, coef_Es) - Qstar = lapply(1:nb_regimes,function(x) expit(logit(Qs[[x]]) + - as.numeric(t(t(as.matrix(coef_Es))%*%t(Hs.all[[x]]))))); - - ##Influence curve for each regime of treatment - D_list <- list() - Ds = lapply(1:nb_regimes,function(x)sapply(1:J,function(y) - (Hs.all[[x]][,y]*(obsdata[,paste0(Y.,s)] - Qstar[[x]])))) - - D_list[s]<-list(Ds) - - for(i in (s-1):1){ - #For t=s-1 repeat the same process as for t=s - sf1 <- paste0(A.,time[1:i], collapse = "+"); - sf2 <- paste0(unlist(lapply(1:length(L.), function(x) paste0(L.[x],time[1:i], collapse = "+"))),collapse = "+"); - sf3 <- paste0(V,collapse = "+") - - - modQs = lapply(1:nb_regimes,function(x){ - qstar = Qstar[[x]]; - form.up <- as.formula(paste("qstar ~",paste0(sf1, "+", sf2, "+", sf3))); - mod_temp = glm(form.up, family = binomial, data = obsdata); - return(mod_temp); - }); - - Qs = lapply(1:nb_regimes,function(x)predict(modQs[[x]], newdata = obsdata0.all[[x]], type = "res")); - - Hs.all=list() - j=0 - for(regimes in list.regimes){ - j=j+1 - Hs.all[j] = list(as.matrix(1*(rowSums(sapply(1:i,function(x) 1*(obsdata[,varA[x]] == unlist(regimes)[x])))==i)*W[,i])%*%t(as.matrix(Traj[j,1:J]))) - } - - Hs = do.call(rbind,Hs.all) - - modEs = glm(unlist(Qstar) ~-1+offset(logit(unlist(Qs)))+Hs, family = binomial,data = obsdata.all2); - coef_Es <- coef(modEs) - coef_Es<- ifelse(is.na(coef_Es),0, coef_Es) - Qstarm1 = lapply(1:nb_regimes,function(x)expit(logit(Qs[[x]]) + - as.numeric(t(t(as.matrix( coef_Es))%*%t(Hs.all[[x]]))))); - - ##Influence curve for each regime of treatment - Ds = lapply(1:nb_regimes,function(x) sapply(1:J,function(y) - as.matrix(Hs.all[[x]][,y]*(Qstar[[x]]-Qstarm1[[x]])))) - D_list[i]<-list(Ds) - Qstar = Qstarm1; - } - - Q0 = unlist(Qstar); - - D = lapply(1:nb_regimes,function(x) as.matrix(Reduce('+',lapply(1:J, function(y){ - comps = as.matrix(D_list[[y]][[x]] + as.numeric(Qstar[[x]] - mean(Qstar[[x]]))) - return(comps) - })))) - - obsdata0.all2$Y = Q0 - obsdata0.all2$atraj <- apply(obsdata0.all2[,varA],1,paste0,collapse="") - obsdataT2 = aggregate(as.formula(paste0(Y,"~", "atraj")), FUN = mean,data = obsdata0.all2) - obsdataT2[,Y] = as.numeric(as.character(obsdataT2[,Y])) - - - list_pltmle_countermeans = list(counter.means = obsdataT2[,Y],D=D) - return(list_pltmle_countermeans) -} diff --git a/R/predict_traj.R b/R/predict_traj.R index 85cef29..3bcf530 100644 --- a/R/predict_traj.R +++ b/R/predict_traj.R @@ -12,12 +12,13 @@ #' @export predict_traj #' @author Awa Diop, Denis Talbot -predict_traj <- function(identifier, total_followup, treatment, time, trajmodel) { +predict_traj <- function(identifier, total_followup, treatment, time, time_values, trajmodel) { data_combn <- bincombinations(total_followup) # Treatment regime in a long format - rdata_counter <- reshape(data.frame(data_combn), direction = "long", varying = 1:total_followup, sep = "") - colnames(rdata_counter) <- c(time, treatment, identifier) + rdata_counter <- reshape(data.frame(data_combn), direction = "long", varying = list(1:total_followup), + times = time_values, v.names = treatment, timevar = time, + idvar = identifier, sep = "") post_probs <- posterior(trajmodel, newdata = rdata_counter) diff --git a/R/split_data.R b/R/split_data.R index e803ffe..bc43d7e 100644 --- a/R/split_data.R +++ b/R/split_data.R @@ -8,8 +8,13 @@ #' @param total_followup total length of follow-up. #' @param time name of the time variable. #' @return \item{all_df}{all subsets, list of time intervals.} +#' @export #' @author Awa Diop Denis Talbot -#' @examples res = split_data(obsdata = dat.obs, total_followup = 5, s = s, time = "time", identifier = "id") +#' @examples +#' obsdata = gendata(n = 1000, format = "long", total_followup = 8, seed = 945) +#' years <- 2011:2018 +#' res = split_data(obsdata = obsdata, total_followup = 8, +#' ntimes_interval = 6,time = "time", time_values = years,identifier = "id") split_data <- function(obsdata,total_followup,ntimes_interval,time,time_values, identifier){ total_followup = total_followup diff --git a/R/stabilized_ipcw.R b/R/stabilized_ipcw.R index a409c7a..f915fbc 100644 --- a/R/stabilized_ipcw.R +++ b/R/stabilized_ipcw.R @@ -9,6 +9,7 @@ #' @param censor Name of the censoring variable. #' @param obsdata Observed data in wide format. #' @return Stabilized Inverse Probability of Censoring Weights +#' @noRd #' @export #' @author Awa Diop, Denis Talbot #' @note This function requires data in a wide format. diff --git a/R/stabilized_iptw.R b/R/stabilized_iptw.R index c7ce1d8..84c6710 100644 --- a/R/stabilized_iptw.R +++ b/R/stabilized_iptw.R @@ -8,7 +8,9 @@ #' @param total_followup Total length of follow-up. #' @param obsdata Observed data in wide format. #' @return Stabilized inverse of treatment probabilities +#' @noRd #' @export +#' @note This function requires data in a wide format. #' @author Awa Diop, Denis Talbot stabilized_iptw <- function(identifier, treatment, covariates, baseline, total_followup, obsdata) { diff --git a/R/test.R b/R/test.R deleted file mode 100644 index 26ac4e2..0000000 --- a/R/test.R +++ /dev/null @@ -1,56 +0,0 @@ -# LCGA - MSM - obsdata_msm <- genobsdatamsm(n=5000,t=10, seed = 345) - V <- "V" - L <- "L" - K = 10 - time <- 1:10 - A <- "A" - Y <- "Y" - Adat_long <- widetolong(obsdata = obsdata_msm[, paste0(A,time)], varying = 1:10) - res.traj = buildtraj(Rdat = Adat_long, J=3,formula = cbind(A,1-A) ~ time, id= "id") - table(res.traj$dpost$class) - obsdata_msm2 = merge(obsdata_msm,res.traj$dpost, by = "id") - obsdata_msm2[,"class"] <- relevel(as.factor(obsdata_msm2[,"class"]), ref = 3) - - #IPW - trajMSM_IPW(formula1 = as.formula("Y ~ class"), numerator = "stabilized", - id = id, V = V,L = L,A = A,Y=Y,J=3, - C = FALSE,K = K, time = time, family = "binomial", - obsdata = obsdata_msm2) - - #g-computation - - -trajMSM_gform(formula = paste0("Y~", paste0("A", 1:K,collapse = "+"), "+", - paste0("L", 1:K,collapse = "+"),"+", V, collapse = "+"),rep = 50, -id = id, V = V,L = L,A = A,Y=Y,K=K,time = time,timevar= "time",J=3, - trajmodel = res.traj$model, ref = "2", obsdata = obsdata) - - -#Pooled-ltmle - -trajMSM_pltmle(formula = paste0("Y~", paste0("A", 1:K,collapse = "+"), "+", - paste0("L", 1:K,collapse = "+"),"+", - V, collapse = "+"), - id = id, V = V,L = L,A = A,Y=Y,K = K,time = time,timevar = "time",J=3, - trajmodel = res.traj$model, obsdata = obsdata, ref = "2") -# LCGA - HRMSM - -obsdata = gendatahrmsm(5000) -res_IPW = trajHRMSM_IPW(formulaY = as.formula("Y ~ factor(traj) + factor(Interv)"), - numerator = "stabilized", degree_traj = "linear", - idvar = "id", V = V,L = L,A = A,Y=Y, - C = FALSE,s = 3, K = 5, J=3, family = "poisson", - obsdata = obsdata, v.names = v.names) - -res_gform = trajHRMSM_gform(obsdata = obsdata,Rep=50,degree_traj = "linear", - A = A,L = L,V=V,Y = Y, s = 3,K = 5, timevar = timevar, idvar = "id", - J = 3, family = "poisson") - -res_pltmle = trajHRMSM_pltmle(obsdata = obsdata,degree_traj = "linear", - A = A,L = L,V=V,Y = Y, s = 3,K = 5, - timevar = timevar, idvar = idvar, - J = 3, family = "poisson") -res_IPW[[1]] -res_gform[[1]] -res_pltmle[[1]] diff --git a/R/trajHRMSM_IPW.R b/R/trajHRMSM_IPW.R index 151139b..6119780 100644 --- a/R/trajHRMSM_IPW.R +++ b/R/trajHRMSM_IPW.R @@ -18,7 +18,7 @@ #' @param obsdata data in a long format. #' @author Awa Diop, Denis Talbot #' @export trajhrmsm_ipw -#' @importFrom sandwich +#' @import sandwich #' @import flexmix #' @examples #' obsdata_long = gendata(n = 1000, format = "long", total_followup = 8, timedep_outcome = TRUE, seed = 945) @@ -29,11 +29,11 @@ #' paste0(variables, year)}) #' treatment_var <- paste0("statins", 2011:2018) #' var_cov <- c("statins","hyper", "bmi","y") -#' resipw <- trajhrmsm_ipw(degree_traj = "linear", numerator = "stabilized", +#' reshrmsm_ipw <- trajhrmsm_ipw(degree_traj = "linear", numerator = "stabilized", #' identifier = "id", baseline = baseline_var, covariates = covariates, treatment = treatment_var, #' outcome = "y", var_cov= var_cov,include_censor = FALSE, ntimes_interval = 6,total_followup = 8, time = "time", time_values = 2011:2018, #' family = "poisson", number_traj = 3, obsdata = obsdata_long, treshold = 0.999) -#' resipw$res_trajhrmsm_ipw +#' reshrmsm_ipw$res_trajhrmsm_ipw diff --git a/R/trajHRMSM_gform.R b/R/trajHRMSM_gform.R index fc1dd4d..fc749bf 100644 --- a/R/trajHRMSM_gform.R +++ b/R/trajHRMSM_gform.R @@ -1,5 +1,5 @@ -#' @title g-formula without SuperLearner -#' @description function to estimate parameters of a HRMSM-LCGA using g-formula +#' @title Estimating parameters of LCGA-HRMSM using g-formula +#' @description function to estimate parameters of a LCGA-HRMSM using g-formula #' and bootstrap to get standard errors. #' @name trajhrmsm_gform #' @param formula specification of the model for the outcome to be fitted for a binomial or gaussian distribution. @@ -16,11 +16,14 @@ #' @param number_traj number of trajectory groups. #' @param rep number of repetition for the bootstrap. #' @param obsdata data in a long format. -#' @noRd +#' @param time name of the time variable. +#' @param time_values measuring times. #' @return \item{trajMSM_gform }{g-formula} +#' @export #' @author Awa Diop Denis Talbot #' @examples -#' obsdata_long = gendata(n = 1000, format = "long", total_followup = 8, timedep_outcome = TRUE, seed = 945) +#' obsdata_long = gendata(n = 1000, format = "long", total_followup = 8, +#' timedep_outcome = TRUE, seed = 945) #' baseline_var <- c("age","sex") #' years <- 2011:2018 #' variables <- c("hyper", "bmi") @@ -28,10 +31,12 @@ #' paste0(variables, year)}) #' treatment_var <- paste0("statins", 2011:2018) #' var_cov <- c("statins","hyper", "bmi") -#' resgform = trajhrmsm_gform(degree_traj = "linear", rep=2 , treatment = treatment_var,covariates = covariates, baseline = baseline_var, -#' outcome = "y",var_cov = var_cov, ntimes_interval = 6, total_followup = 8, time = "time",time_values = years, identifier = "id", -#' number_traj = 3, family = "poisson", obsdata = obsdata_long) -#'resgform$results_hrmsm_gform +#' reshrmsm_gform = trajhrmsm_gform(degree_traj = "linear", rep=5 , +#' treatment = treatment_var,covariates = covariates, baseline = baseline_var, +#' outcome = "y",var_cov = var_cov, ntimes_interval = 6, total_followup = 8, +#' time = "time",time_values = years, identifier = "id", +#' number_traj = 3, family = "poisson", obsdata = obsdata_long) +#'reshrmsm_gform$results_hrmsm_gform @@ -109,7 +114,7 @@ trajhrmsm_gform <- function(degree_traj = c("linear","quadratic","cubic"), #Predict trajectory groups based on each treatment regime obsdataG=data.frame(res) obsdataG$gform_group = factor(predict_traj(identifier = "identifier2", total_followup = ntimes_interval, - treatment = treatment_name, time = "time2", + treatment = treatment_name, time = "time2", time_values = 1:ntimes_interval, trajmodel = restraj$traj_model)$post_class); obsdataG$Interv <- i list_obsdataG[i] <- list(obsdataG) @@ -166,7 +171,7 @@ trajhrmsm_gform <- function(degree_traj = c("linear","quadratic","cubic"), #Predict trajectory groups based on each treatment regime obsdataG=data.frame(res) obsdataG$gform_group = factor(predict_traj(identifier = "identifier2", total_followup = ntimes_interval, - treatment = treatment_name, time = "time2", + treatment = treatment_name, time = "time2", time_values = 1:ntimes_interval, trajmodel = restraj$traj_model)$post_class); obsdataG$Interv <- i list_obsdataG[i] <- list(obsdataG) diff --git a/R/trajHRMSM_pltmle.R b/R/trajHRMSM_pltmle.R index fcc3ec6..7c2f7e6 100644 --- a/R/trajHRMSM_pltmle.R +++ b/R/trajHRMSM_pltmle.R @@ -8,7 +8,8 @@ #' @param Rep number of repetitions for the bootstrap. #' @param s number of measuring times per interval. #' @param K total length of follow-up. -#' @param time measuring times. +#' @param time name of the time variable. +#' @param time_values measuring times. #' @param timevar name of the variable time. #' @param obsdata observed data in wide format. #' @noRd @@ -33,7 +34,7 @@ trajhrmsm_pltmle <- function(degree_traj = c("linear","quadratic","cubic"), treatment,covariates,baseline,outcome, ntimes_interval, total_followup, time, time_values,identifier, var_cov, - number_traj = 3, family = "poisson",obsdata){ + number_traj = 3, family = "poisson",obsdata, treshold = 0.99){ nb_sub = total_followup - ntimes_interval + 1 nregimes = 2^ntimes_interval @@ -78,7 +79,7 @@ trajhrmsm_pltmle <- function(degree_traj = c("linear","quadratic","cubic"), treatment_names <- sub("\\d+", "", treatment) treatment_name <- unique(treatment_names)[1] class = factor(predict_traj(identifier = "identifier2", total_followup = ntimes_interval, - treatment = treatment_name, time = "time2", + treatment = treatment_name, time = "time2", time_values = 1:ntimes_interval, trajmodel = restraj$traj_model)$post_class); if(length(unique(class)) < number_traj){stop("number of trajectory groups identified is inferior to the target number.")} diff --git a/R/trajmsm_gform.R b/R/trajmsm_gform.R index 500ff61..12fef3f 100644 --- a/R/trajmsm_gform.R +++ b/R/trajmsm_gform.R @@ -9,40 +9,47 @@ #' @param treatment vector of names of the time-varying treatment. #' @param outcome name of the outcome of interest. #' @param total_followup of measuring times. -#' @param time name of the variable time. +#' @param time name of the time variable. +#' @param time_values measuring times. #' @param rep number of repetitions for the bootstrap. #' @param trajmodel trajectory model built with the observed treatment. +#' @param var_cov names of the time-varying covariates in a long format. #' @param ref the reference trajectory group. #' @param obsdata observed data in wide format. #' @return \item{results_msm_gform}{Estimates of a LCGA-MSM with g-formula.} -#' @export trajmsm_gform +#' @export #' @examples -#' obsdata_long = gendata(n = 2000, format = "long", total_followup = 6, seed = 1945) +#' obsdata_long = gendata(n = 1000, format = "long", total_followup = 6, seed = 945) #' years <- 2011:2016 #' baseline_var <- c("age","sex") #' variables <- c("hyper", "bmi") +#' var_cov <- c("statins","hyper", "bmi") #' covariates <- lapply(years, function(year) { #' paste0(variables, year)}) #' treatment_var <- paste0("statins", 2011:2016) #' formula_treatment = as.formula(cbind(statins, 1 - statins) ~ time) -#' restraj = build_traj(obsdata = obsdata_long, number_traj = 3, formula = formula_treatment, identifier = "id") +#' restraj = build_traj(obsdata = obsdata_long, number_traj = 3, +#' formula = formula_treatment, identifier = "id") #' datapost = restraj$data_post #' trajmsm_long <- merge(obsdata_long, datapost, by = "id") #' AggFormula <- as.formula(paste("statins", "~", "time", "+", "class")) #' AggTrajData <- aggregate(AggFormula, data = trajmsm_long, FUN = mean) #' AggTrajData -#' trajmsm_wide = reshape(data = trajmsm_long, direction = "wide", idvar = "id", +#' obsdata = reshape(data = trajmsm_long, direction = "wide", idvar = "id", #' v.names = c("statins","bmi","hyper"), timevar = "time", sep ="") #'formula = paste0("y ~", paste0(treatment_var,collapse = "+"), "+", #' paste0(unlist(covariates), collapse = "+"),"+", #' paste0(baseline_var, collapse = "+")) -#'trajmsm_gform(formula = formula, identifier = "id",rep = 2, baseline = baseline_var, covariates = covariates, -#' treatment = treatment_var, outcome = "y", total_followup = 6,time = "time", -#' trajmodel = restraj$traj_model,ref = "1", obsdata = trajmsm_wide) +#'resmsm_gform <- trajmsm_gform(formula = formula, identifier = "id",rep = 5, +#'baseline = baseline_var, covariates = covariates, var_cov = var_cov, +#'treatment = treatment_var, outcome = "y", total_followup = 6,time = "time", +#' time_values = years, trajmodel = restraj$traj_model,ref = "1", obsdata = obsdata ) +#' resmsm_gform #' @author Awa Diop Denis Talbot trajmsm_gform <- function(formula = formula, rep = 50, - identifier,baseline,covariates,treatment,outcome, total_followup,time = time, + identifier,baseline,covariates,treatment,outcome, + total_followup,time = time,time_values, var_cov, trajmodel,ref, obsdata){ @@ -60,8 +67,9 @@ trajmsm_gform <- function(formula = formula, rep = 50, bootf=function(df,x=index){ #Echantillons bootstrap df=obsdata[x,]; - res = gformula(formula = formula,outcome = outcome, treatment = treatment, covariates = covariates,baseline = baseline, - ntimes_interval = total_followup, obsdata = df)$counter_means + + res = gformula(formula = formula,outcome = outcome, treatment = treatment, covariates = covariates, + baseline = baseline,ntimes_interval = total_followup, obsdata = df)$counter_means colnames(res) <- "Y"; #Counterfactual means + trajectory groups @@ -69,7 +77,7 @@ trajmsm_gform <- function(formula = formula, rep = 50, treatment_names <- sub("\\d+", "", treatment) treatment_name <- unique(treatment_names)[1] obsdataG$gform_group = factor(predict_traj(identifier = identifier, total_followup = total_followup, - treatment = treatment_name, time = time, + treatment = treatment_name, time = time,time_values = time_values, trajmodel = trajmodel)$post_class); obsdataG$gform_group <- relevel(as.factor(obsdataG$gform_group), ref = ref) @@ -94,8 +102,10 @@ trajmsm_gform <- function(formula = formula, rep = 50, #Counterfactual means + trajectory groups obsdataG = data.frame(res); + treatment_names <- sub("\\d+", "", treatment) + treatment_name <- unique(treatment_names)[1] obsdataG$gform_group = factor(predict_traj(identifier = identifier, total_followup = total_followup, - treatment = treatment_name, time = time, + treatment = treatment_name, time = time,time_values = time_values, trajmodel = trajmodel)$post_class); obsdataG$gform_group <- relevel(as.factor(obsdataG$gform_group), ref = ref) #Estimation diff --git a/R/trajmsm_ipw.R b/R/trajmsm_ipw.R index a1bfe9a..dda7ce7 100644 --- a/R/trajmsm_ipw.R +++ b/R/trajmsm_ipw.R @@ -16,7 +16,7 @@ #' @param treshold For weight truncation. #' @return Stabilized and unstabilized inverse of probabilities #' @export trajmsm_ipw -#' @importFrom sandwich +#' @import sandwich #' @importFrom survival coxph #' @import flexmix #' @examples @@ -28,21 +28,25 @@ #' paste0(variables, year)}) #' treatment_var <- paste0("statins", 2011:2016) #' formula_treatment = as.formula(cbind(statins, 1 - statins) ~ time) -#' restraj = build_traj(obsdata = obsdata_long, number_traj = 3, formula = formula_treatment, identifier = "id") +#' restraj = build_traj(obsdata = obsdata_long, number_traj = 3, +#' formula = formula_treatment, identifier = "id") #' datapost = restraj$data_post #' trajmsm_long <- merge(obsdata_long, datapost, by = "id") #' AggFormula <- as.formula(paste("statins", "~", "time", "+", "class")) #' AggTrajData <- aggregate(AggFormula, data = trajmsm_long, FUN = mean) #' AggTrajData -#' trajmsm_wide = reshape(data = trajmsm_long, direction = "wide", idvar = "id", +#' trajmsm_long$ipw_group <- relevel(trajmsm_long$class, ref = "1") +#' obsdata = reshape(data = trajmsm_long, direction = "wide", idvar = "id", #' v.names = c("statins","bmi","hyper"), timevar = "time", sep ="") #' formula = paste0("y ~", paste0(treatment_var,collapse = "+"), "+", #' paste0(unlist(covariates), collapse = "+"),"+", #' paste0(baseline_var, collapse = "+")) -#' trajmsm_ipw(formula1 = as.formula("y ~ class"), -#' identifier = "id", baseline = baseline_var, covariates = covariates, treatment = treatment_var, -#' number_traj=3,total_followup = 6, family = "binomial", -#' obsdata = trajmsm_wide,numerator = "stabilized", include_censor = FALSE) +#' +#'resmsm_ipw = trajmsm_ipw(formula1 = as.formula("y ~ ipw_group"), +#' identifier = "id", baseline = baseline_var, covariates = covariates, +#' treatment = treatment_var, number_traj=3,total_followup = 6, family = "binomial", +#' obsdata = obsdata,numerator = "stabilized", include_censor = FALSE) +#'resmsm_ipw trajmsm_ipw <- function(formula1, formula2, family, identifier, treatment, covariates, diff --git a/R/trajmsm_pltmle.R b/R/trajmsm_pltmle.R index a32390b..82ff944 100644 --- a/R/trajmsm_pltmle.R +++ b/R/trajmsm_pltmle.R @@ -14,7 +14,7 @@ #' @param ref the reference group. #' @export trajmsm_pltmle #' @examples -#' obsdata_long = gendata(n = 2000, format = "long", total_followup = 6, seed = 945) +#' obsdata_long = gendata(n = 1000, format = "long", total_followup = 6, seed = 945) #' years <- 2011:2016 #' baseline_var <- c("age","sex") #' variables <- c("hyper", "bmi") @@ -22,7 +22,8 @@ #' paste0(variables, year)}) #' treatment_var <- paste0("statins", 2011:2016) #' formula_treatment = as.formula(cbind(statins, 1 - statins) ~ time) -#' restraj = build_traj(obsdata = obsdata_long, number_traj = 3, formula = formula_treatment, identifier = "id") +#' restraj = build_traj(obsdata = obsdata_long, number_traj = 3, +#' formula = formula_treatment, identifier = "id") #' datapost = restraj$data_post #' trajmsm_long <- merge(obsdata_long, datapost, by = "id") #' AggFormula <- as.formula(paste("statins", "~", "time", "+", "class")) @@ -33,16 +34,17 @@ #'formula = paste0("y ~", paste0(treatment_var,collapse = "+"), "+", #' paste0(unlist(covariates), collapse = "+"),"+", #' paste0(baseline_var, collapse = "+")) -#'trajmsm_pltmle(formula = formula, identifier = "id", baseline = baseline_var, -#' covariates = covariates, treatment = treatment_var, outcome = "y", -#' time = "time", number_traj = 3, total_followup = 6, -#' trajmodel = restraj$traj_model, ref = "3", obsdata = trajmsm_wide, treshold = 0.99) +#' resmsm_pltmle <- trajmsm_pltmle(formula = formula, identifier = "id", baseline = baseline_var, +#' covariates = covariates, treatment = treatment_var, outcome = "y", +#' time = "time", time_values = years, number_traj = 3, total_followup = 6, +#' trajmodel = restraj$traj_model, ref = "1", obsdata = trajmsm_wide, treshold = 0.99) +#' resmsm_pltmle #' @return \item{results_msm_pooledltmle}{Estimates of a LCGA-MSM with pooled LTMLE.} #' @author Awa Diop, Denis Talbot trajmsm_pltmle <- function(formula = formula,identifier,baseline,covariates,treatment,outcome, - number_traj,total_followup, time,trajmodel,ref,obsdata,treshold=0.999){ + number_traj,total_followup, time, time_values , trajmodel,ref,obsdata,treshold=0.999){ stopifnot(!is.null(identifier)); stopifnot(!is.null(baseline)); @@ -59,7 +61,7 @@ trajmsm_pltmle <- function(formula = formula,identifier,baseline,covariates,trea treatment_names <- sub("\\d+", "", treatment) treatment_name <- unique(treatment_names)[1] class = factor(predict_traj(identifier = identifier, total_followup = total_followup, - treatment = treatment_name, time = time, + treatment = treatment_name, time = time, time_values = time_values, trajmodel = trajmodel)$post_class); if(length(unique(class)) < number_traj){ stop(paste("Number of predicted trajectory groups inferior to", number_traj)) diff --git a/R/unstabilized_ipcw.R b/R/unstabilized_ipcw.R index fd2f6d6..cf49901 100644 --- a/R/unstabilized_ipcw.R +++ b/R/unstabilized_ipcw.R @@ -9,6 +9,7 @@ #' @param total_follow_up Total length of follow-up. #' @param obsdata Observed data in wide format. #' @return Unstabilized Inverse Probability of Censoring Weights +#' @noRd #' @export #' @author Awa Diop, Denis Talbot #' @note This function requires data in a wide format. diff --git a/R/unstabilized_iptw.R b/R/unstabilized_iptw.R index dd828cb..c84dde8 100644 --- a/R/unstabilized_iptw.R +++ b/R/unstabilized_iptw.R @@ -8,6 +8,7 @@ #' @param total_follow_up Total length of follow-up. #' @param obsdata Observed data in wide format. #' @return Unstabilized inverse of treatment probabilities +#' @noRd #' @export #' @author Awa Diop, Denis Talbot #' @note This function requires data in a wide format. diff --git a/google39ef60d579fe8149.html b/google39ef60d579fe8149.html deleted file mode 100644 index 2b471c2..0000000 --- a/google39ef60d579fe8149.html +++ /dev/null @@ -1 +0,0 @@ -google-site-verification: google39ef60d579fe8149.html \ No newline at end of file diff --git a/man/IPW.Rd b/man/IPW.Rd deleted file mode 100644 index d242cd8..0000000 --- a/man/IPW.Rd +++ /dev/null @@ -1,60 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/IPW.R -\name{IPW} -\alias{IPW} -\title{Inverse of Probability Weighting} -\usage{ -IPW( - numerator = c("stabilized", "unstabilized"), - id = id, - V = V, - L = L, - A = A, - C = FALSE, - s = s, - time = time, - censor = NULL, - obsdata = obsdata_msm -) -} -\arguments{ -\item{id}{name of the column for unique identifiant.} - -\item{V}{baseline covariates.} - -\item{L}{time-varying covariates.} - -\item{A}{time-varying treatment.} - -\item{C}{logical value TRUE/FALSE to include or not a censoring variable.} - -\item{s}{number of measuring times.} - -\item{time}{measuring times.} - -\item{censor}{name of the censoring variable.} - -\item{obsdata}{observed data in wide format.} -} -\value{ -\item{IPW}{Stabilized and unstabilized inverse of probabilities with and without censoring} -} -\description{ -Compute stabilized and unstabilized with and without censor weights. -} -\examples{ -dat = gendatTrajMSM(n=500, Censor=FALSE) -V <- c("Age","Sex") -L <- c("Hyper","BMI") -time <- "Time" -A <- "Statins" -Censor = "C" -sw = IPW(numerator = "stabilized",id= "ID", V = c("Age","Sex"), - L = c("Hyper","BMI"), - time ="Time", - A=c("Statins"),obsdata = dat) -summary(sw) -} -\author{ -Awa Diop, Denis Talbot -} diff --git a/man/build_traj.Rd b/man/build_traj.Rd new file mode 100644 index 0000000..09d2bc7 --- /dev/null +++ b/man/build_traj.Rd @@ -0,0 +1,45 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/build_traj.R +\name{build_traj} +\alias{build_traj} +\title{Wrapper of flexmix} +\usage{ +build_traj( + obsdata, + formula, + number_traj, + identifier, + family = "binomial", + seed = 945, + control = list(iter.max = 1000, minprior = 0), + ... +) +} +\arguments{ +\item{obsdata}{Data to build trajectory groups in long format.} + +\item{formula}{Designate the formula to model the longitudinal variable of interest.} + +\item{number_traj}{An integer to fix the number of trajectory groups.} + +\item{identifier}{A string to designate the column name for the unique identifier.} + +\item{family}{Designate the type of distribution ("gaussian", "binomial", "poisson", "gamma").} + +\item{seed}{Set a seed for replicability.} + +\item{control}{Object of class FLXcontrol.} + +\item{...}{Additional arguments passed to the flexmix function.} +} +\value{ +A list containing the posterior probability matrix and the fitted trajectory model. +} +\description{ +Call the package flexmix to construct trajectory groups +} +\examples{ +obsdata_long = gendata(n = 1000,format = "long", total_followup = 6, seed = 945) +formula = as.formula(cbind(statins, 1 - statins) ~ time) +restraj = build_traj(obsdata = obsdata_long, number_traj = 3, formula = formula, identifier = "id") +} diff --git a/man/buildtraj.Rd b/man/buildtraj.Rd deleted file mode 100644 index 62d55a9..0000000 --- a/man/buildtraj.Rd +++ /dev/null @@ -1,48 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/buildtraj.R -\name{buildtraj} -\alias{buildtraj} -\title{Wrapper of flexmix} -\usage{ -buildtraj( - Rdat, - formula = as.formula(cbind(A, 1 - A) ~ time), - J, - id = "id", - family = "binomial", - control = list(iter.max = 1000, minprior = 0), - ... -) -} -\arguments{ -\item{Rdat}{sample data to build trajectory groups. These data are in long format. -Each row represent a person time, column A is a binary data.} - -\item{formula}{designate the formula to model the longitudinal variable of interest.} - -\item{J}{an integer to choose the number of trajectory groups.} - -\item{family}{designate the type of distribution "gaussian", "binomial", "poisson" and "gamma".} - -\item{control}{object of class FLXcontrol.} - -\item{\dots}{to add supplementary functions.} -} -\value{ -\item{dpost}{Posterior probability.} - -\item{model}{Fitted trajectory model.} -} -\description{ -Call the package flexmix to construct trajectory groups -} -\examples{ -obsdata = gendatatraj() -Rdat =longtowide(obsdata = obsdata, varying = 1:5) -head(Rdat) -res.traj = buildtraj(Rdat = Rdat, k=3,formula = cbind(A,1-A) ~ time, id=id) -head(res.traj$dpost) -} -\author{ -Awa Diop, Denis Talbot -} diff --git a/man/gendata.Rd b/man/gendata.Rd new file mode 100644 index 0000000..ded801b --- /dev/null +++ b/man/gendata.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/gendata.R +\name{gendata} +\alias{gendata} +\title{Generate Data Trajectories for MSM} +\usage{ +gendata( + n, + include_censor = FALSE, + format = c("long", "wide"), + start_year = 2011, + total_followup, + timedep_outcome = FALSE, + seed +) +} +\arguments{ +\item{n}{Number of observations to generate.} + +\item{include_censor}{Logical, if TRUE, includes censoring.} + +\item{format}{Character, either "long" or "wide" for the format of the output data frame.} + +\item{timedep_outcome}{Logical, if TRUE, includes a time-dependent outcome.} + +\item{seed, }{use a specific seed value to ensure the simulated data is replicable.} +} +\value{ +A data frame with generated trajectories. +} +\description{ +Generate Data Trajectories for MSM +} +\examples{ +gendata(n = 100, include_censor = FALSE, format = "wide",total_followup = 3, seed = 945) +} diff --git a/man/gendatatraj.Rd b/man/gendatatraj.Rd deleted file mode 100644 index 3db2175..0000000 --- a/man/gendatatraj.Rd +++ /dev/null @@ -1,53 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ex_datatraj.R -\name{gendatatraj} -\alias{gendatatraj} -\title{Data Simulation for Trajectory Analysis} -\usage{ -gendatatraj( - n1 = 250, - n2 = 350, - n3 = 400, - beta01 = -5, - beta02 = -0.15, - beta03 = -0.01, - beta11 = -1, - beta12 = 0.5, - beta13 = 5, - set.seed = 355 -) -} -\arguments{ -\item{n1}{sample size of the first subgroup.} - -\item{n2}{sample size of the second subgroup.} - -\item{n3}{sample size of the third subgroup.} - -\item{beta01}{intercept for the first subgroup.} - -\item{beta02}{intercept for the second subgroup.} - -\item{beta03}{intercept for the third subgroup.} - -\item{beta11}{slope for the first subgroup.} - -\item{beta12}{slope for the second subgroup.} - -\item{beta13}{slope for the third subgroup.} - -\item{set.seed}{to add a seed.} -} -\value{ -\item{Obsdata}{Wide format data.} -} -\description{ -Example of longitudinal data with three hidden subgroups to perform LCGA/GBTM. -} -\examples{ -Obsdata = gendatatraj() -head(Obsdata) -} -\author{ -Awa Diop, Denis Talbot -} diff --git a/man/gform_countermeans.Rd b/man/gform_countermeans.Rd deleted file mode 100644 index 51e3e31..0000000 --- a/man/gform_countermeans.Rd +++ /dev/null @@ -1,50 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/gform_countermeans.R -\name{gform_countermeans} -\alias{gform_countermeans} -\alias{sub_gform} -\title{Counterfactual means for g-formula.} -\usage{ -sub_gform(formula, V, L, A, Y, s, time, obsdata) -} -\arguments{ -\item{formula}{specification of the model for the outcome to be fitted.} - -\item{V}{baseline covariates.} - -\item{L}{time-varying covariates.} - -\item{A}{time-varying treatment.} - -\item{Y}{outcome variable.} - -\item{s}{number of measuring times.} - -\item{time}{measuring times.} - -\item{obsdata}{observed data in wide format.} -} -\value{ -\item{list_gform_countermeans}{Counterfactual means obtained with g-formula.} -} -\description{ -Get the counterfactual means for the g-formula. -} -\examples{ -Obswidedata = longtowide(Obsdata = gendatrajMSM(n=500), idvar = "ID", timevar = "Time"); -formula = paste0("Y.2013~", paste0("Statins.", c(2011:2013),collapse = "+"), "+", -paste0("BMI.", c(2011:2013),collapse = "+"),"+", -paste0("Hyper.", c(2011:2013),collapse = "+"),"+", -"Age.2011 + Sex.2011", collapse = "+") -Y = "Y.2013 " -A = "Statins." -L = c("Hyper.", "BMI.") -V = c("Age.", "Sex.") -s=3 -time = c(2011,2012,2013) -res.gform = sub_gform(dat=Obswidedata, formula = formula, Y=Y, A=A,L=L,V=V,s=3, time=time) -res.gform$counter_means -} -\author{ -Awa Diop, Denis Talbot -} diff --git a/man/gformula.Rd b/man/gformula.Rd new file mode 100644 index 0000000..b969c89 --- /dev/null +++ b/man/gformula.Rd @@ -0,0 +1,40 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/gformula.R +\name{gformula} +\alias{gformula} +\title{Counterfactual means for g-formula.} +\usage{ +gformula( + formula, + baseline, + covariates, + treatment, + outcome, + ntimes_interval, + obsdata +) +} +\arguments{ +\item{formula}{specification of the model for the outcome to be fitted.} + +\item{baseline}{name of the baseline covariates.} + +\item{covariates}{list of the names of the time-varying covariates.} + +\item{treatment}{name of the time-varying treatment.} + +\item{ntimes_interval}{length of a time-interval (s).} + +\item{obsdata}{observed data in wide format.} + +\item{Y}{outcome variable.} +} +\value{ +\item{list_gform_countermeans}{Counterfactual means obtained with g-formula.} +} +\description{ +Get the counterfactual means for the g-formula. +} +\author{ +Awa Diop, Denis Talbot +} diff --git a/man/ggplotraj.Rd b/man/ggplotraj.Rd deleted file mode 100644 index 95864cb..0000000 --- a/man/ggplotraj.Rd +++ /dev/null @@ -1,57 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ggplotraj.R -\name{ggplotraj} -\alias{ggplotraj} -\title{ggplotraj} -\usage{ -ggplotraj( - Rdat = NULL, - dpost = NULL, - trajdat = NULL, - formula = as.formula(A ~ time + class), - trt = "A", - time = "time", - id = "id", - class = "class", - FUN = "mean", - ... -) -} -\arguments{ -\item{Rdat}{an object produced by the function \code{"longtowide"}.} - -\item{dpost}{matrix of the posterior probabilities and the trajectory groups.} - -\item{trt}{name of the time-varying treatment.} - -\item{time}{name of the variable measurements of time.} - -\item{id}{name of the id variable.} - -\item{class}{name of the trajectory groups.} - -\item{FUN}{specify what statistics to display, by default calculate the mean.} - -\item{\dots}{to add supplementary functions.} - -\item{Trajdat}{merged datasets containing observed data in long format and trajectory groups.} -} -\value{ -\item{p}{Plot the trajectory groups using the observed treatment.} -} -\description{ -Use \code{"ggplot2"} to plot trajectory groups produced by the function \code{"buildtraj"} using the observed treatment. -} -\examples{ -Obsdata = gendatatraj() -Rdat = longtowide(Obsdata = Obsdata, varying = 1:5) -head(Rdat) -res.traj = buildtraj(Rdat = Rdat, k=3,formula = cbind(A,1-A) ~ time, id="id") -dpost = res.traj$dpost -head(dpost) -ggplotraj(Rdat = Rdat, dpost = dpost, formula = A ~ time + class, -trt = "A",time = "time",id="id",class = "class", FUN = "mean") -} -\author{ -Awa Diop, Denis Talbot -} diff --git a/man/ggtraj.Rd b/man/ggtraj.Rd new file mode 100644 index 0000000..9f3fd60 --- /dev/null +++ b/man/ggtraj.Rd @@ -0,0 +1,51 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ggtraj.R +\name{ggtraj} +\alias{ggtraj} +\title{ggplot Trajectory} +\usage{ +ggtraj(traj_data, treatment, time, identifier, class, FUN = mean, ...) +} +\arguments{ +\item{traj_data}{Merged datasets containing observed data in long format and trajectory groups.} + +\item{treatment}{Name of the time-varying treatment.} + +\item{time}{Name of the variable measurements of time.} + +\item{identifier}{Name of the identifier variable.} + +\item{class}{Name of the trajectory groups.} + +\item{\dots}{Additional arguments to be passed to ggplot functions.} + +\item{obsdata}{Data to plot trajectory groups.} + +\item{fun}{Specify what statistics to display, by default calculate the mean.} + +\item{data_post}{Matrix of the posterior probabilities and the trajectory groups.} +} +\value{ +A ggplot object representing the trajectory groups using the observed treatment. +} +\description{ +Use \code{"ggplot2"} to plot trajectory groups produced by the function \code{"build_traj"} using the observed treatment. +} +\examples{ +obsdata_long = gendata(n = 1000, format = "long", total_followup = 12, seed = 945) +restraj = build_traj(obsdata = obsdata_long, number_traj = 3, +formula = as.formula(cbind(statins, 1 - statins) ~ time), identifier = "id") +datapost = restraj$data_post +head(datapost) +traj_data_long <- merge(obsdata_long, datapost, by = "id") + AggFormula <- as.formula(paste("statins", "~", "time", "+", "class")) + Aggtraj_data <- aggregate(AggFormula, data = traj_data_long, FUN = mean) + Aggtraj_data +#Aggtraj_data with labels +traj_data_long[ , "traj_group"] <- factor(ifelse(traj_data_long[ , "class"] == "2" ,"Group3" , +ifelse (traj_data_long[ , "class"]== "1" , "Group1" ,"Group2"))) +AggFormula <- as.formula(paste("statins", "~", "time", "+", "traj_group")) +Aggtraj_data <- aggregate(AggFormula, data = traj_data_long, FUN = mean) +ggtraj(traj_data = Aggtraj_data, +treatment = "statins",time= "time",identifier="id",class = "traj_group", FUN = mean) +} diff --git a/man/inverse_probability_weighting.Rd b/man/inverse_probability_weighting.Rd new file mode 100644 index 0000000..3cbfec4 --- /dev/null +++ b/man/inverse_probability_weighting.Rd @@ -0,0 +1,56 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ipw.R +\name{inverse_probability_weighting} +\alias{inverse_probability_weighting} +\title{Inverse Probability Weighting} +\usage{ +inverse_probability_weighting( + numerator = c("stabilized", "unstabilized"), + identifier, + baseline, + covariates, + treatment, + total_followup, + include_censor = FALSE, + censor, + obsdata +) +} +\arguments{ +\item{numerator}{To choose between stabilized and unstabilized weights.} + +\item{identifier}{Name of the column for unique identifier.} + +\item{baseline}{Name of the baseline covariates.} + +\item{covariates}{Name of the time-varying covariates.} + +\item{treatment}{Name of the time-varying treatment.} + +\item{total_followup}{Total length of follow-up.} + +\item{include_censor}{Logical value TRUE/FALSE to include or not a censoring variable.} + +\item{censor}{Name of the censoring variable.} + +\item{obsdata}{Observed data in wide format.} +} +\value{ +Inverse Probability Weights (Stabilized and Unstabilized) with and without censoring. +} +\description{ +Compute stabilized and unstabilized with and without censor weights. +} +\examples{ +obsdata = gendata(n = 1000, format = "wide",total_followup = 3, seed = 945) +baseline_var <- c("age","sex") +covariates <- list(c("hyper2011", "bmi2011"), +c("hyper2012", "bmi2012"),c("hyper2013", "bmi2013")) +treatment_var <- c("statins2011","statins2012","statins2013") +stabilized_weights = inverse_probability_weighting(numerator = "stabilized", +identifier = "id", covariates = covariates, treatment = treatment_var, +baseline = baseline_var, total_followup = 3,obsdata = obsdata) +} +\author{ +Awa Diop, Denis Talbot +} diff --git a/man/longtowide.Rd b/man/longtowide.Rd deleted file mode 100644 index f15c228..0000000 --- a/man/longtowide.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/longtowide.R -\name{longtowide} -\alias{longtowide} -\title{Reshape from long to wide format.} -\usage{ -longtowide(obsdata, idvar, timevar) -} -\arguments{ -\item{obsdata}{the data to reshape in a long format.} - -\item{varying}{varying columns.} -} -\value{ -\item{long_dat}{Long format data.} -} -\description{ -To convert observed data into a wide format for the g-formula and pooled ltmle. -} -\examples{ -widedata = longtowide(obsdata = gendatrajMSM(n=500), idvar = "ID", timevar = "Time") -head(widedata) -} -\author{ -Awa Diop, Denis Talbot -} diff --git a/man/pltmle.Rd b/man/pltmle.Rd new file mode 100644 index 0000000..eb4fe24 --- /dev/null +++ b/man/pltmle.Rd @@ -0,0 +1,84 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/pltmle.R +\name{pltmle} +\alias{pltmle} +\title{Counterfactual means for a Pooled LTMLE} +\usage{ +pltmle( + formula, + outcome, + treatment, + covariates, + baseline, + ntimes_interval, + number_traj, + time, + time_values, + identifier, + obsdata, + traj, + total_followup, + treshold = treshold +) +} +\arguments{ +\item{formula}{specification of the model for the outcome to be fitted.} + +\item{treatment}{time-varying treatment.} + +\item{covariates}{covariates.} + +\item{ntimes_interval}{length of a time-interval (s).} + +\item{number_traj}{an integer to choose the number of trajectory groups.} + +\item{time}{name of the time variable.} + +\item{identifier}{name of the column for unique identifiant.} + +\item{obsdata}{observed data in wide format.} + +\item{total_followup}{number of measuring times per interval.} +} +\value{ +\item{list_pltmle_countermeans}{Counterfactual means and influence functions with the pooled ltmle.} +\item{D}{Influence functions} +} +\description{ +function to estimate counterfactual means for a pooled LTMLE. +} +\examples{ +obsdata_long = gendata(n = 2000, format = "long",total_followup = 3, seed = 945) +baseline_var <- c("age","sex") +covariates <- list(c("hyper2011", "bmi2011"), +c("hyper2012", "bmi2012"),c("hyper2013", "bmi2013")) +treatment_var <- c("statins2011","statins2012","statins2013") +time_values <- c(2011,2012,2013) +formulaA = as.formula(cbind(statins, 1 - statins) ~ time) +restraj = build_traj(obsdata = obsdata_long, number_traj = 3, +formula = formulaA, identifier = "id") +datapost = restraj$data_post +trajmsm_long <- merge(obsdata_long, datapost, by = "id") + AggFormula <- as.formula(paste("statins", "~", "time", "+", "class")) + AggTrajData <- aggregate(AggFormula, data = trajmsm_long, FUN = mean) + AggTrajData +trajmsm_long[ , "traj_group"] <- trajmsm_long[ , "class"] +trajmsm_wide = reshape(trajmsm_long, direction = "wide", idvar = "id", +v.names = c("statins","bmi","hyper"), timevar = "time", sep ="") +formula = as.formula(" y ~ statins2011 + statins2012 + statins2013 + +hyper2011 + bmi2011 + hyper2012 + bmi2012 + + hyper2013 + bmi2013 + age + sex ") +class = factor(predict_traj(identifier = "id", total_followup = 3, + treatment = "statins", time = "time", time_values = time_values, + trajmodel = restraj$traj_model)$post_class); +traj=t(sapply(1:8,function(x)sapply(1:3,function(i)ifelse(class[x]==i,1,0)))) +traj[,1]=1 +res_pltmle = pltmle(formula = formula, outcome = "y",treatment = treatment_var, +covariates = covariates, baseline = baseline_var, ntimes_interval = 3, number_traj = 3, + time = "time",time_values = time_values,identifier = "id",obsdata = trajmsm_wide, +traj=traj, treshold = 0.99) +res_pltmle$counter_means +} +\author{ +Awa Diop, Denis Talbot +} diff --git a/man/pooledltmle_countermeans.Rd b/man/pooledltmle_countermeans.Rd deleted file mode 100644 index 2023b82..0000000 --- a/man/pooledltmle_countermeans.Rd +++ /dev/null @@ -1,59 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/pooledltmle_countermeans.R -\name{pooledltmle_countermeans} -\alias{pooledltmle_countermeans} -\alias{sub_pooled_ltmle} -\title{Counterfactual means for a Pooled LTMLE} -\usage{ -sub_pooled_ltmle( - formula, - id, - Y, - A, - L, - V, - s, - time, - time_name, - trajname, - obsdata, - trajmodel -) -} -\arguments{ -\item{formula}{specification of the model for the outcome to be fitted.} - -\item{id}{name of the column for unique identifiant.} - -\item{Y}{outcome variable.} - -\item{A}{time-varying treatment.} - -\item{L}{time-varying covariates.} - -\item{V}{baseline covariates.} - -\item{s}{number of measuring times.} - -\item{time}{measuring times.} - -\item{obsdata}{observed data in wide format.} -} -\value{ -\item{list_pooledltmle_countermeans}{Counterfactual means and influence functions with the pooled ltmle.} -\item{D}{Influence functions} -} -\description{ -function to estimate counterfactual means for a pooled LTMLE. -} -\examples{ -obsdata_msm <- genobsdata_msm(n=2500) -V <- "V" -L <- "L" -time <- 1:3 -A <- "A" -Y <- "Y" -} -\author{ -Awa Diop, Denis Talbot -} diff --git a/man/predicTraj..Rd b/man/predicTraj..Rd deleted file mode 100644 index 3b03159..0000000 --- a/man/predicTraj..Rd +++ /dev/null @@ -1,29 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/predicTraj.R -\name{predicTraj.} -\alias{predicTraj.} -\alias{predicTraj} -\title{Predict trajectory groups for deterministic treatment regimes} -\usage{ -predicTraj(id, s, trt, time_name, trajmodel) -} -\arguments{ -\item{id}{name of the column for unique identifiant.} - -\item{s}{number of measuring times per interval.} - -\item{trt}{name of the time-varying treatment.} - -\item{time_name}{name of the measuring times.} - -\item{trajmodel}{trajectory model built with the observed treatment.} - -\item{name}{of the id column variable.} -} -\description{ -function to predict trajectory groups for deterministic treatment regimes -used with gformula and pooled LTMLE. -} -\author{ -Awa Diop, Denis Talbot -} diff --git a/man/predict_traj.Rd b/man/predict_traj.Rd new file mode 100644 index 0000000..10f44b9 --- /dev/null +++ b/man/predict_traj.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/predict_traj.R +\name{predict_traj} +\alias{predict_traj} +\title{Predict trajectory groups for deterministic treatment regimes} +\usage{ +predict_traj( + identifier, + total_followup, + treatment, + time, + time_values, + trajmodel +) +} +\arguments{ +\item{identifier}{Name of the column for unique identifier.} + +\item{total_followup}{Number of measuring times.} + +\item{treatment}{Name of the time-varying treatment.} + +\item{time}{name of the variable time.} + +\item{time_values}{values of the time variable.} + +\item{trajmodel}{Trajectory model built with the observed treatment.} +} +\description{ +Function to predict trajectory groups for deterministic treatment regimes +used with gformula and pooled LTMLE. +} +\author{ +Awa Diop, Denis Talbot +} diff --git a/man/split_data.Rd b/man/split_data.Rd index bdcd498..1182d1e 100644 --- a/man/split_data.Rd +++ b/man/split_data.Rd @@ -2,30 +2,41 @@ % Please edit documentation in R/split_data.R \name{split_data} \alias{split_data} -\title{Split Observed data into multiple subsets} +\title{Split observed data into multiple subsets} \usage{ -split_data(obsdata, K, s, A, L, Y) +split_data( + obsdata, + total_followup, + ntimes_interval, + time, + time_values, + identifier +) } \arguments{ \item{obsdata}{observed data in wide format.} -\item{K}{total length of follow-up.} +\item{total_followup}{total length of follow-up.} -\item{s}{number of measuring times per interval.} +\item{time}{name of the time variable.} -\item{A}{time-varying treatment.} +\item{identifier}{identifier of individuals.} -\item{L}{time-varying covariates.} - -\item{V}{baseline covariates.} +\item{ntimes_length}{number of measuring times per interval.} } \value{ -\item{df}{all subsets, time-intervals.} +\item{all_df}{all subsets, list of time intervals.} } \description{ function to split the data into multiple subsets of size s each one corresponding to one time-interval. } +\examples{ +obsdata = gendata(n = 1000, format = "long", total_followup = 8, seed = 945) +years <- 2011:2018 +res = split_data(obsdata = obsdata, total_followup = 8, +ntimes_interval = 6,time = "time", time_values = years,identifier = "id") +} \author{ Awa Diop Denis Talbot } diff --git a/man/trajMSM-package.Rd b/man/trajMSM-package.Rd deleted file mode 100644 index 5117fea..0000000 --- a/man/trajMSM-package.Rd +++ /dev/null @@ -1,34 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/trajMSM_pkg.R -\docType{package} -\name{trajMSM-package} -\alias{trajMSM} -\alias{trajMSM-package} -\title{trajMSM: Marginal Structural Models with Latent Class Growth Analysis of Treatment Trajectories} -\description{ -The package trajMSM is based on the paper Marginal Structural Models with Latent Class Growth Analysis of Treatment Trajectories: https://doi.org/10.48550/arXiv.2105.12720. -} -\details{ -The package trajMSM is based on the paper Marginal Structural Models with Latent Class -Growth Analysis of Treatment Trajectories: https://doi.org/10.48550/arXiv.2105.12720. -Latent class growth analysis (LCGA) are increasingly proposed -as a solution to summarize the observed longitudinal treatment in a few distinct groups. -When combined with standard approaches like Cox proportional hazards models, LCGM can fail to -control time-dependent confounding bias because of time-varying covariates that have a double role of confounders and mediators. -We propose to use LCGA to classify individuals into a few latent classes based on their medication adherence pattern, -then choose a working marginal structural model (MSM) that relates the outcome to these groups. -The parameter of interest is nonparametrically defined as the projection of the true MSM onto the chosen working model. -The combination of LCGA with MSM (LCGA-MSM) is a convenient way to describe treatment adherence and -can effectively control time-dependent confounding. Several approaches exist to estimate the parameters of a MSM and one of the most popular is -the inverse probability weighting (IPW). The IPW mimics a random assignment of the treatment by creating a pseudo-population where the treated and the untreated groups are -comparable. In longitudinal settings, IPW can appropriately adjust for time-varying covariates affected by prior exposure and selection bias. -In this first version, we proposed to estimate parameters of the LCGA-MSM using the IPW. Further development will include other estimators such as the g-formula and the pooled LTMLE. -\tabular{ll}{ -Package: \tab trajMSM\cr -Type: \tab Package\cr -Version: \tab 1.0.0\cr -Date: \tab 2022-06-15\cr -License: \tab GPL-3\cr -Author: \tab Awa Diop, Denis Talbot\cr -} -} diff --git a/man/trajMSM_IPW.Rd b/man/trajMSM_IPW.Rd index c5ecb9e..99c4829 100644 --- a/man/trajMSM_IPW.Rd +++ b/man/trajMSM_IPW.Rd @@ -1,75 +1,85 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/trajMSM_IPW.R -\name{trajMSM_IPW} -\alias{trajMSM_IPW} +% Please edit documentation in R/trajmsm_ipw.R +\name{trajmsm_ipw} +\alias{trajmsm_ipw} \title{Marginal Structural Model and Latent Class of Growth Analysis estimated with IPW} \usage{ -trajMSM_IPW( - formula1 = as.formula("Y ~ class"), - formula2 = as.formula("Surv(Y,event) ~ class"), - numerator = c("stabilized", "unstabilized"), - id, - V, - L, - A, - Y, - C = FALSE, - censor = NULL, - s, - time, - family = c("binomial", "gaussian", "survival"), - J, +trajmsm_ipw( + formula1, + formula2, + family, + identifier, + treatment, + covariates, + baseline, + total_followup, + number_traj, obsdata, - weights = NULL + numerator = "stabilized", + include_censor, + censor, + weights = NULL, + treshold = 0.99 ) } \arguments{ -\item{formula1}{specification of the model for the outcome to be fitted for a binomial or gaussian distribution.} +\item{formula1}{Specification of the model for the outcome to be fitted for a binomial or gaussian distribution.} -\item{formula2}{specification of the model for the outcome to be fitted for a survival outcome.} +\item{formula2}{Specification of the model for the outcome to be fitted for a survival outcome.} -\item{id}{name of the column for unique identifiant.} +\item{family}{Specification of the error distribution and link function to be used in the model.} -\item{V}{baseline covariates.} +\item{identifier}{Name of the column for unique identification.} -\item{L}{time-varying covariates.} +\item{treatment}{Time-varying treatment.} -\item{A}{time-varying treatment.} +\item{covariates}{Time-varying covariates.} -\item{censor}{name of the censoring variable.} +\item{baseline}{Baseline covariates.} -\item{s}{number of measuring times.} +\item{total_followup}{Number of measuring times.} -\item{time}{measuring times.} +\item{number_traj}{An integer to fix the number of trajectory groups.} -\item{family}{specification of the error distribution and link function to be used in the model.} +\item{obsdata}{Dataset to be used in the analysis.} -\item{J}{number of trajectory groups.} +\item{numerator}{Type of weighting ("stabilized" or "unstabilized").} -\item{weights}{a vector of estimated weights. If NULL, the weights are computed by the function.} +\item{weights}{A vector of estimated weights. If NULL, the weights are computed by the function \code{IPW}.} + +\item{treshold}{For weight truncation.} } \value{ -\item{IPW}{Stabilized and unstabilized inverse of probabilities} +Stabilized and unstabilized inverse of probabilities } \description{ Combine Marginal Structural Model and Latent Class of Growth Analysis } \examples{ -obsdata_msm <- genobsdata_msm(n=2500) -V <- "V" -L <- "L" -time <- 1:3 -A <- "A" -Y <- "Y" -Adat_long <- widetolong(obsdata = obsdata_msm[, c("A1","A2","A3")], varying = 1:3) -res.traj = buildtraj(Rdat = Adat_long, J=3, -formula = cbind(A,1-A) ~ time, id= "id") -obsdata_msm$class = res.traj$dpost$class -trajMSM_IPW(formula1 = as.formula("Y ~ class"), numerator = "stabilized", - id = id, V = V,L = L,A = A,Y=Y, - C = FALSE,s = s, time = time, family = "binomial", - obsdata = obsdata_msm) -} -\author{ -Awa Diop, Denis Talbot +obsdata_long = gendata(n = 1000, format = "long", total_followup = 6, seed = 945) +years <- 2011:2016 +baseline_var <- c("age","sex") +variables <- c("hyper", "bmi") +covariates <- lapply(years, function(year) { +paste0(variables, year)}) +treatment_var <- paste0("statins", 2011:2016) +formula_treatment = as.formula(cbind(statins, 1 - statins) ~ time) +restraj = build_traj(obsdata = obsdata_long, number_traj = 3, +formula = formula_treatment, identifier = "id") +datapost = restraj$data_post +trajmsm_long <- merge(obsdata_long, datapost, by = "id") + AggFormula <- as.formula(paste("statins", "~", "time", "+", "class")) + AggTrajData <- aggregate(AggFormula, data = trajmsm_long, FUN = mean) + AggTrajData +trajmsm_long$ipw_groups <- relevel(trajmsm_long$class, ref = "2") +trajmsm_wide = reshape(data = trajmsm_long, direction = "wide", idvar = "id", +v.names = c("statins","bmi","hyper"), timevar = "time", sep ="") +formula = paste0("y ~", paste0(treatment_var,collapse = "+"), "+", + paste0(unlist(covariates), collapse = "+"),"+", + paste0(baseline_var, collapse = "+")) +obsdata = trajmsm_wide +trajmsm_ipw(formula1 = as.formula("y ~ class"), + identifier = "id", baseline = baseline_var, covariates = covariates, + treatment = treatment_var, number_traj=3,total_followup = 6, family = "binomial", + obsdata = obsdata,numerator = "stabilized", include_censor = FALSE) } diff --git a/man/trajMSM_gform.Rd b/man/trajMSM_gform.Rd index 0c80095..82494c5 100644 --- a/man/trajMSM_gform.Rd +++ b/man/trajMSM_gform.Rd @@ -1,23 +1,23 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/trajMSM_gform.R -\name{trajMSM_gform} -\alias{trajMSM_gform} +% Please edit documentation in R/trajmsm_gform.R +\name{trajmsm_gform} +\alias{trajmsm_gform} \title{Parametric g-formula} \usage{ -trajMSM_gform( - formula = paste0("Y~", paste0("A", 1:s, collapse = "+"), "+", paste0("L", 1:s, - collapse = "+"), "+", V, collapse = "+"), +trajmsm_gform( + formula = formula, rep = 50, - id, - V, - L, - A, - Y, - s, - time, - time_name, - J = 2, + identifier, + baseline, + covariates, + treatment, + outcome, + total_followup, + time = time, + time_values, + var_cov, trajmodel, + ref, obsdata ) } @@ -26,22 +26,28 @@ trajMSM_gform( \item{rep}{number of repetitions for the bootstrap.} -\item{id}{name of the column for unique identifiant.} +\item{identifier}{name of the column for unique identifiant.} -\item{V}{baseline covariates.} +\item{baseline}{vector of names of the baseline covariates.} -\item{L}{time-varying covariates.} +\item{covariates}{list of names of the time-varying covariates.} -\item{A}{time-varying treatment.} +\item{treatment}{vector of names of the time-varying treatment.} -\item{s}{number of measuring times.} +\item{outcome}{name of the outcome of interest.} -\item{time}{measuring times.} +\item{total_followup}{of measuring times.} -\item{time_name}{name of the variable time.} +\item{time}{name of the time variable.} + +\item{time_values}{measuring times.} + +\item{var_cov}{names of the time-varying covariates in a long format.} \item{trajmodel}{trajectory model built with the observed treatment.} +\item{ref}{the reference trajectory group.} + \item{obsdata}{observed data in wide format.} } \value{ @@ -52,20 +58,32 @@ function to estimate parameters of a MSM-LCGA using g-formula and bootstrap to get standard errors. } \examples{ -obsdata_msm <- genobsdata_msm(n=2500) -V <- "V" -L <- "L" -time <- 1:3 -A <- "A" -Y <- "Y" -Adat_long <- widetolong(obsdata = obsdata_msm[, c("A1","A2","A3")], varying = 1:3) -res.traj = buildtraj(Rdat = Adat_long, J=3,formula = cbind(A,1-A) ~ time, id= "id") -obsdata_msm$class = res.traj$dpost$class -trajMSM_gform(formula = paste0("Y~", paste0("A", 1:s,collapse = "+"), "+", - paste0("L", 1:s,collapse = "+"),"+", - V, collapse = "+"),rep = 50, - id = id, V = V,L = L,A = A,Y=Y,s=s,time = time,time_name = "time",J=3, - family = family,trajmodel = res.traj$model, obsdata = obsdata_msm) +obsdata_long = gendata(n = 1000, format = "long", total_followup = 6, seed = 945) +years <- 2011:2016 +baseline_var <- c("age","sex") +variables <- c("hyper", "bmi") +var_cov <- c("statins","hyper", "bmi") +covariates <- lapply(years, function(year) { +paste0(variables, year)}) +treatment_var <- paste0("statins", 2011:2016) +formula_treatment = as.formula(cbind(statins, 1 - statins) ~ time) +restraj = build_traj(obsdata = obsdata_long, number_traj = 3, +formula = formula_treatment, identifier = "id") +datapost = restraj$data_post +trajmsm_long <- merge(obsdata_long, datapost, by = "id") + AggFormula <- as.formula(paste("statins", "~", "time", "+", "class")) + AggTrajData <- aggregate(AggFormula, data = trajmsm_long, FUN = mean) + AggTrajData +trajmsm_wide = reshape(data = trajmsm_long, direction = "wide", idvar = "id", +v.names = c("statins","bmi","hyper"), timevar = "time", sep ="") +formula = paste0("y ~", paste0(treatment_var,collapse = "+"), "+", + paste0(unlist(covariates), collapse = "+"),"+", + paste0(baseline_var, collapse = "+")) +resmsm_gform <- trajmsm_gform(formula = formula, identifier = "id",rep = 5, +baseline = baseline_var, covariates = covariates, var_cov = var_cov, +treatment = treatment_var, outcome = "y", total_followup = 6,time = "time", +time_values = years, trajmodel = restraj$traj_model,ref = "1", obsdata = trajmsm_wide ) +resmsm_gform } \author{ Awa Diop Denis Talbot diff --git a/man/trajMSM_pooled_ltmle.Rd b/man/trajMSM_pooled_ltmle.Rd deleted file mode 100644 index 48d755f..0000000 --- a/man/trajMSM_pooled_ltmle.Rd +++ /dev/null @@ -1,67 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/trajMSM_pooled_ltmle.R -\name{trajMSM_pooled_ltmle} -\alias{trajMSM_pooled_ltmle} -\title{Pooled LTMLE} -\usage{ -trajMSM_pooled_ltmle( - formula = paste0("Y~", paste0("A", 1:s, collapse = "+"), "+", paste0("L", 1:s, - collapse = "+"), "+", paste0("V", 1:s, collapse = "+"), collapse = "+"), - id, - V, - L, - A, - Y, - s, - time, - time_name, - J = 2, - trajmodel, - obsdata -) -} -\arguments{ -\item{formula}{specification of the model for the outcome to be fitted.} - -\item{id}{name of the column for unique identifiant.} - -\item{L}{covariates.} - -\item{A}{time-varying treatment.} - -\item{s}{number of measuring times per interval.} - -\item{time}{measuring times.} - -\item{J}{an integer to choose the number of trajectory groups.} - -\item{trajmodel}{trajectory model built with the observed treatment.} - -\item{obsdata}{observed data in wide format.} -} -\value{ -\item{results_msm_pooledltmle}{Estimates of a LCGA-MSM with pooled LTMLE.} -} -\description{ -function to estimate parameters of a MSM-LCGA using pooled LTMLE - with influence functions or boostrap to estimate standard errors. -} -\examples{ -obsdata_msm <- genobsdata_msm(n=2500) -V <- "V" -L <- "L" -time <- 1:3 -A <- "A" -Y <- "Y" -Adat_long <- widetolong(obsdata = obsdata_msm[, c("A1","A2","A3")], varying = 1:3) -res.traj = buildtraj(Rdat = Adat_long, J=3,formula = cbind(A,1-A) ~ time, id= "id") -obsdata_msm$class = res.traj$dpost$class -trajMSM_pooled_ltmle(formula = paste0("Y~", paste0("A", 1:s,collapse = "+"), "+", - paste0("L", 1:s,collapse = "+"),"+", - V, collapse = "+"), - id = id, V = V,L = L,A = A,Y=Y,s = s,time = time,time_name = "time",J=3, - family = family,trajmodel = res.traj$model, obsdata = obsdata_msm) -} -\author{ -Awa Diop, Denis Talbot -} diff --git a/man/trajhrmsm_gform.Rd b/man/trajhrmsm_gform.Rd new file mode 100644 index 0000000..bc3fcd4 --- /dev/null +++ b/man/trajhrmsm_gform.Rd @@ -0,0 +1,84 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/trajhrmsm_gform.R +\name{trajhrmsm_gform} +\alias{trajhrmsm_gform} +\title{g-formula without SuperLearner} +\usage{ +trajhrmsm_gform( + degree_traj = c("linear", "quadratic", "cubic"), + rep = 50, + treatment, + covariates, + baseline, + outcome, + ntimes_interval, + total_followup, + time, + time_values, + identifier, + var_cov, + number_traj = 3, + family = "poisson", + obsdata +) +} +\arguments{ +\item{degree_traj}{to specify the polynomial degree for modelling the time-varying treatment.} + +\item{rep}{number of repetition for the bootstrap.} + +\item{treatment}{name of time-varying treatment.} + +\item{covariates}{names of time-varying covariates in a wide format.} + +\item{baseline}{name of baseline covariates.} + +\item{ntimes_interval}{length of a time-interval (s).} + +\item{total_followup}{total length of follow-up.} + +\item{time}{name of the time variable.} + +\item{time_values}{measuring times.} + +\item{identifier}{name of the column for unique identifiant.} + +\item{var_cov}{names of the time-varying covariates in a long format.} + +\item{number_traj}{number of trajectory groups.} + +\item{family}{specification of the error distribution and link function to be used in the model.} + +\item{obsdata}{data in a long format.} + +\item{formula}{specification of the model for the outcome to be fitted for a binomial or gaussian distribution.} + +\item{censor}{name of the censoring variable.} +} +\value{ +\item{trajMSM_gform }{g-formula} +} +\description{ +function to estimate parameters of a HRMSM-LCGA using g-formula + and bootstrap to get standard errors. +} +\examples{ +obsdata_long = gendata(n = 1000, format = "long", total_followup = 8, +timedep_outcome = TRUE, seed = 945) +baseline_var <- c("age","sex") +years <- 2011:2018 +variables <- c("hyper", "bmi") +covariates <- lapply(years, function(year) { +paste0(variables, year)}) +treatment_var <- paste0("statins", 2011:2018) +var_cov <- c("statins","hyper", "bmi") +reshrmsm_gform = trajhrmsm_gform(degree_traj = "linear", rep=2 , +treatment = treatment_var,covariates = covariates, baseline = baseline_var, +outcome = "y",var_cov = var_cov, ntimes_interval = 6, total_followup = 8, + time = "time",time_values = years, identifier = "id", +number_traj = 3, family = "poisson", obsdata = obsdata_long) +reshrmsm_gform$results_hrmsm_gform +} +\author{ +Awa Diop Denis Talbot +} diff --git a/man/trajhrmsm_ipw.Rd b/man/trajhrmsm_ipw.Rd new file mode 100644 index 0000000..af57c14 --- /dev/null +++ b/man/trajhrmsm_ipw.Rd @@ -0,0 +1,80 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/trajhrmsm_ipw.R +\name{trajhrmsm_ipw} +\alias{trajhrmsm_ipw} +\title{Marginal Structural Model and Latent Class of Growth Analysis estimated with IPW} +\usage{ +trajhrmsm_ipw( + degree_traj = c("linear", "quadratic", "cubic"), + numerator = c("stabilized", "unstabilized"), + identifier, + baseline, + covariates, + treatment, + outcome, + var_cov, + include_censor = FALSE, + ntimes_interval, + total_followup, + time, + time_values, + family = "poisson", + censor = censor, + number_traj, + obsdata, + weights = NULL, + treshold = 0.999 +) +} +\arguments{ +\item{degree_traj}{to specify the polynomial degree for modelling the time-varying treatment.} + +\item{identifier}{name of the column for unique identifiant.} + +\item{baseline}{name of baseline covariates.} + +\item{covariates}{names of time-varying covariates in a wide format.} + +\item{treatment}{name of time-varying treatment.} + +\item{var_cov}{names of the time-varying covariates in a long format.} + +\item{ntimes_interval}{length of a time-interval (s).} + +\item{total_followup}{total length of follow-up.} + +\item{time_values}{values of the time variable.} + +\item{family}{specification of the error distribution and link function to be used in the model.} + +\item{censor}{name of the censoring variable.} + +\item{number_traj}{number of trajectory groups.} + +\item{obsdata}{data in a long format.} + +\item{weights}{a vector of estimated weights. If NULL, the weights are computed by the function.} + +\item{formula}{specification of the model for the outcome to be fitted for a binomial or gaussian distribution.} +} +\description{ +Combine Marginal Structural Model and Latent Class of Growth Analysis +} +\examples{ +obsdata_long = gendata(n = 1000, format = "long", total_followup = 8, timedep_outcome = TRUE, seed = 945) +baseline_var <- c("age","sex") +years <- 2011:2018 +variables <- c("hyper", "bmi") +covariates <- lapply(years, function(year) { +paste0(variables, year)}) +treatment_var <- paste0("statins", 2011:2018) +var_cov <- c("statins","hyper", "bmi","y") +reshrmsm_ipw <- trajhrmsm_ipw(degree_traj = "linear", numerator = "stabilized", +identifier = "id", baseline = baseline_var, covariates = covariates, treatment = treatment_var, +outcome = "y", var_cov= var_cov,include_censor = FALSE, ntimes_interval = 6,total_followup = 8, time = "time", time_values = 2011:2018, +family = "poisson", number_traj = 3, obsdata = obsdata_long, treshold = 0.999) +reshrmsm_ipw$res_trajhrmsm_ipw +} +\author{ +Awa Diop, Denis Talbot +} diff --git a/man/trajmsm_pltmle.Rd b/man/trajmsm_pltmle.Rd new file mode 100644 index 0000000..18bf38d --- /dev/null +++ b/man/trajmsm_pltmle.Rd @@ -0,0 +1,80 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/trajmsm_pltmle.R +\name{trajmsm_pltmle} +\alias{trajmsm_pltmle} +\title{Pooled LTMLE} +\usage{ +trajmsm_pltmle( + formula = formula, + identifier, + baseline, + covariates, + treatment, + outcome, + number_traj, + total_followup, + time, + time_values, + trajmodel, + ref, + obsdata, + treshold = 0.999 +) +} +\arguments{ +\item{formula}{specification of the model for the outcome to be fitted.} + +\item{identifier}{name of the column for unique identifiant.} + +\item{covariates}{covariates.} + +\item{treatment}{time-varying treatment.} + +\item{number_traj}{an integer to choose the number of trajectory groups.} + +\item{total_followup}{number of measuring times per interval.} + +\item{time}{name of the time variable.} + +\item{trajmodel}{trajectory model built with the observed treatment.} + +\item{ref}{the reference group.} + +\item{obsdata}{observed data in wide format.} +} +\value{ +\item{results_msm_pooledltmle}{Estimates of a LCGA-MSM with pooled LTMLE.} +} +\description{ +function to estimate parameters of a MSM-LCGA using pooled LTMLE + with influence functions to estimate standard errors. +} +\examples{ +obsdata_long = gendata(n = 1000, format = "long", total_followup = 6, seed = 945) +years <- 2011:2016 +baseline_var <- c("age","sex") +variables <- c("hyper", "bmi") +covariates <- lapply(years, function(year) { +paste0(variables, year)}) +treatment_var <- paste0("statins", 2011:2016) +formula_treatment = as.formula(cbind(statins, 1 - statins) ~ time) +restraj = build_traj(obsdata = obsdata_long, number_traj = 3, +formula = formula_treatment, identifier = "id") +datapost = restraj$data_post +trajmsm_long <- merge(obsdata_long, datapost, by = "id") + AggFormula <- as.formula(paste("statins", "~", "time", "+", "class")) + AggTrajData <- aggregate(AggFormula, data = trajmsm_long, FUN = mean) + AggTrajData +trajmsm_wide = reshape(data = trajmsm_long, direction = "wide", idvar = "id", +v.names = c("statins","bmi","hyper"), timevar = "time", sep ="") +formula = paste0("y ~", paste0(treatment_var,collapse = "+"), "+", + paste0(unlist(covariates), collapse = "+"),"+", + paste0(baseline_var, collapse = "+")) +respltmle <- trajmsm_pltmle(formula = formula, identifier = "id", baseline = baseline_var, + covariates = covariates, treatment = treatment_var, outcome = "y", + time = "time", time_values = years, number_traj = 3, total_followup = 6, + trajmodel = restraj$traj_model, ref = "2", obsdata = trajmsm_wide, treshold = 0.99) +} +\author{ +Awa Diop, Denis Talbot +} diff --git a/man/widetolong.Rd b/man/widetolong.Rd deleted file mode 100644 index 72523d7..0000000 --- a/man/widetolong.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/widetolong.R -\name{widetolong} -\alias{widetolong} -\title{Reshape from wide to long format.} -\usage{ -widetolong(obsdata, varying) -} -\arguments{ -\item{obsdata}{the data to reshape in a long format.} - -\item{varying}{varying columns.} -} -\value{ -\item{widetolong_dat}{Long format data.} -} -\description{ -To convert data generated by the function gen_datatraj into a long format. -} -\examples{ -longdata = widetolong(obsdata = gendatatraj(), varying = 1:5) -head(longdata) -} -\author{ -Awa Diop, Denis Talbot -} diff --git a/vignettes/.DS_Store b/vignettes/.DS_Store index aac402b63e2f048b3ebdb61c589450a997f7057a..bbffc4fc1d1d3ccfde8979bbb7bd02b20c5b3103 100644 GIT binary patch delta 68 zcmZoMXfc=&$?eM!%;3wQ$B@BLvbm6XIU^(6W)CJ+Mqv?#GKNfsbcQ^JRE82DOl63l Wyp2h7vON>e<}&6!md)%OfB6A75D^&w delta 71 zcmZoMXfc=&$sNq#%Mj1t$q>L0zPXWkIin;S0|NseLn=cBP}r9NNqTY+v-)O!CMCwr RmCSuC6B~Fovvd6A2LLv45OM$j diff --git a/vignettes/ex_MSM_IPW.Rmd b/vignettes/ex_MSM_IPW.Rmd deleted file mode 100644 index e6fb299..0000000 --- a/vignettes/ex_MSM_IPW.Rmd +++ /dev/null @@ -1,291 +0,0 @@ ---- -title: "Ex_MSM_IPW" -author: "Awa Diop" -date: "2022-10-24" -output: html_document ---- - -```{r setup, include=FALSE} -library(dagitty) -library(ggraph) -library(ggdag) -library(cobalt) -g1 <- dagitty("dag{ - V -> L1 - V -> A1 - V -> Y - L1 -> A1 - L1 -> L2 - L1 -> A2 - L1 -> L3 - L1 -> A3 - L1 -> Y - L2 -> A2 - L2 -> L3 - L2 -> Y - L3 -> A3 - L3 -> Y - A1 -> L2 - A1 -> L3 - A1 -> A2 - A1 -> A3 - A1 -> Y - A2 -> L3 - A2 -> A3 - A2 -> Y - A3 -> Y - }") - -ggdag(g1, node=TRUE,node_size = 16, - text_col = "white", edge_type = "link", - stylized = TRUE)+theme_dag_blank()+ - scale_adjusted()+geom_dag_edges_fan() - -# Data generation -N = 50000 ; -# baseline -V <- rnorm(N,0,1) - -# Time 1 -L1 <- rbinom(N, 1, plogis(0.5*V)) -A1 <- rbinom(N,1, plogis(-.5*V - 0.75*L1)) - -# Time 2 -L2 <- rbinom(N,1, plogis(0.25*V + 0.5*L1 - 0.2*A1)) -A2 <- rbinom(N,1, plogis(-.5*V - 0.85*L1 - 0.75*L2 + 0.75*A1)) - -# Time 3 -L3 <- rbinom(N,1,plogis(0.25*V + 0.5*L1 + 0.75*L2 - 0.2*A1 - 0.25*A2 )) -A3 <- rbinom(N,1, plogis(-.5*V - 0.45*L1 - 0.5*L2 - 0.75*L3 + 0.5*A1 + 0.75*A2)) - -# End of follow-up - -Y <- -0.5*(A1+A2+A3) +0.25*L1 + 0.25*L2 + 0.1*L3 +0.25*V + rnorm(N,0,1) - -dat_ex <- data.frame(id = 1:N,A1 = A1, A2 = A2, A3 = A3, V = V,L1 = L1, L2 = L2, L3 = L3, Y = Y) - - -# unstabilized IPW - stratified - - -# time 1 - -mod_ps_den1 <- glm(A1 ~ L1 + V, family = binomial, data = dat_ex) -ps_den1 <- predict(mod_ps_den1, type = "response") - -# time 2 - -mod_ps_den2 <- glm(A2 ~ L1 + L2 + A1 + V, family = binomial, data = dat_ex) -ps_den2 <- predict(mod_ps_den2, type = "response") - -# time 3 - -mod_ps_den3 <- glm(A3 ~ L3 + L2 + L1 + A1 + A2 + V, family = binomial, data = dat_ex) -ps_den3 <- predict(mod_ps_den3, type = "response") - - - -# weights - - -# time 1 - -w1 <- with(dat_ex, A1/ps_den1 + (1-A1)/(1-ps_den1)) - - -# time 2 - -w2 <- with(dat_ex, A2/ps_den2 + (1-A2)/(1-ps_den2)) - - -# time 3 - -w3 <- with(dat_ex, A3/ps_den3 + (1-A3)/(1-ps_den3)) - -summary(cbind(w1,w2,w3)) -summary(cbind(w1,w1*w2,w1*w2*w3)) - -#Covariates balance - -# time 1 -base_bal <- data.frame(A1=A1, L1 = L1, V = V, wt1 = w1) -vars <- c("V", "L1") - -b_vars <- dat_ex[,vars] -bal_out <- bal.tab(A1 ~ b_vars,weights = "wt1",estimand = "ATE",un = TRUE,data = base_bal) -bal_out -love.plot(bal_out) - - -# time 2 -base_bal <- data.frame(A1=A1, A2 = A2, L1 = L1, L2 = L2, V = V, wt2 = w1*w2) -vars <- c("V", "L1", "L2") - -b_vars <- dat_ex[,vars] -bal_out <- bal.tab(A2 ~ b_vars,weights = "wt2",estimand = "ATE",un = TRUE,data = base_bal) -bal_out -love.plot(bal_out) - -# time 3 -base_bal <- data.frame(A1=A1, A2 = A2, A3 = A3, L1 = L1, L2 = L2, L3 = L3, V = V, wt3 = w1*w2*w3) -vars <- c("V", "L1", "L2","L3") - -b_vars <- dat_ex[,vars] -bal_out <- bal.tab(A2 ~ b_vars,weights = "wt3",estimand = "ATE",un = TRUE,data = base_bal) -bal_out -love.plot(bal_out) - -# Estimation ATE effect - -dat_ex$Acum <- with(dat_ex, A1+A2+A3) -lm(Y ~ Acum, weights = w1*w2*w3, data = dat_ex) - -# unstabilized IPW - pooled - -dat_ex_long <- reshape(dat_ex, varying = list(2:4,6:8), direction = "long", idvar = "id", v.names = c("A","L")) - - -mod_ps_den <- glm(A ~ L + V + factor(time), family = binomial, data = dat_ex_long) -dat_ex_long$ps_den <- predict(mod_ps_den, type = "response") - -dat_ex_wide <- reshape(dat_ex_long, timevar = "time", direction = "wide", idvar = "id", v.names = c("A","L","ps_den")) - -# weights - - -# time 1 - -w.1 <- with(dat_ex_wide, A.1/ps_den.1 + (1-A.1)/(1-ps_den.1)) - - -# time 2 - -w.2 <- with(dat_ex_wide, A.2/ps_den.2 + (1-A.2)/(1-ps_den.2)) - - -# time 3 - -w.3 <- with(dat_ex_wide, A.3/ps_den.3 + (1-A.3)/(1-ps_den.3)) - -summary(cbind(w.1,w.2,w.3)) -summary(cbind(w.1,w.1*w.2,w.1*w.2*w.3)) - - - -#Covariates balance - -# time 1 -base_bal <- with(dat_ex_wide,data.frame(A.1=A.1, L.1 = L.1, V = V, wt1 = w.1)) -vars <- c("V", "L.1") - -b_vars <- dat_ex_wide[,vars] -bal_out <- bal.tab(A1 ~ b_vars,weights = "wt1",estimand = "ATE",un = TRUE,data = base_bal) -bal_out -love.plot(bal_out) - - -# time 2 -base_bal <- with(dat_ex_wide,data.frame(A.1=A.1, A.2 = A.2, L.1 = L.1, L.2 = L.2, V = V, wt2 = w.1*w.2)) -vars <- c("V", "L.1", "L.2") - -b_vars <- dat_ex_wide[,vars] -bal_out <- bal.tab(A.2 ~ b_vars,weights = "wt2",estimand = "ATE",un = TRUE,data = base_bal) -bal_out -love.plot(bal_out) - -# time 3 -base_bal <- with(dat_ex_wide,data.frame(A.1=A.1, A.2 = A.2, A.3 = A.3, L.1 = L.1, L.2 = L.2, L.3 = L.3, V = V, wt3 = w.1*w.2*w.3)) -vars <- c("V", "L.1", "L.2","L.3") - -b_vars <- dat_ex_wide[,vars] -bal_out <- bal.tab(A2 ~ b_vars,weights = "wt3",estimand = "ATE",un = TRUE,data = base_bal) -bal_out -love.plot(bal_out) - -# Estimation ATE effect - -dat_ex_wide$Acum <- with(dat_ex_wide, A.1+A.2+A.3) -lm(Y ~ Acum, weights = w1*w2*w3, data = dat_ex_wide) - -# stabilized IPW without baseline variables - stratified - - -# time 1 -mod_ps_num1 <- glm(A1 ~ 1, family = binomial, data = dat_ex) -ps_num1 <- predict(mod_ps_num1, type = "response") - -mod_ps_den1 <- glm(A1 ~ L1 + V, family = binomial, data = dat_ex) -ps_den1 <- predict(mod_ps_den1, type = "response") - -# time 2 -mod_ps_num2 <- glm(A2 ~ A1, family = binomial, data = dat_ex) -ps_num2 <- predict(mod_ps_num2, type = "response") - -mod_ps_den2 <- glm(A2 ~ L1 + L2 + A1 + V, family = binomial, data = dat_ex) -ps_den2 <- predict(mod_ps_den2, type = "response") - -# time 3 -mod_ps_num3 <- glm(A3 ~ A2 +A1, family = binomial, data = dat_ex) -ps_num3 <- predict(mod_ps_num3, type = "response") - -mod_ps_den3 <- glm(A3 ~ L3 + L2 + L1 + A1 + A2 + V, family = binomial, data = dat_ex) -ps_den3 <- predict(mod_ps_den3, type = "response") - - -# weights - - -# time 1 - -sw1 <- with(dat_ex, A1*ps_num1/ps_den1 + ((1-A1)*(1-ps_num1))/(1-ps_den1)) - - -# time 2 - -sw2 <- with(dat_ex, A2*ps_num2/ps_den2 + ((1-A2)*(1-ps_num2))/(1-ps_den2)) - - -# time 3 - -sw3 <- with(dat_ex, A3*ps_num3/ps_den3 + ((1-A3)*(1-ps_num3))/(1-ps_den3)) - -summary(cbind(sw1,sw2,sw3)) -summary(cbind(sw1,sw1*sw2,sw1*sw2*sw3)) - -#Covariates balance - -# time 1 -base_bal <- data.frame(A1=A1, L1 = L1, V = V, swt1 = sw1) -vars <- c("V", "L1") - -b_vars <- dat_ex[,vars] -bal_out <- bal.tab(A1 ~ b_vars,weights = "swt1",estimand = "ATE",un = TRUE,data = base_bal) -bal_out -love.plot(bal_out) - - -# time 2 -base_bal <- data.frame(A1=A1, A2 = A2, L1 = L1, L2 = L2, V = V, swt2 = sw1*sw2) -vars <- c("V", "L1", "L2") - -b_vars <- dat_ex[,vars] -bal_out <- bal.tab(A2 ~ b_vars,weights = "swt2",estimand = "ATE",un = TRUE,data = base_bal) -bal_out -love.plot(bal_out) - -# time 3 -base_bal <- data.frame(A1=A1, A2 = A2, A3 = A3, L1 = L1, L2 = L2, L3 = L3, V = V, swt3 = sw1*sw2*sw3) -vars <- c("V", "L1", "L2","L3") - -b_vars <- dat_ex[,vars] -bal_out <- bal.tab(A2 ~ b_vars,weights = "swt3",estimand = "ATE",un = TRUE,data = base_bal) -bal_out -love.plot(bal_out) - -# Estimation ATE effect - -dat_ex$Acum <- with(dat_ex, A1+A2+A3) -lm(Y ~ Acum, weights = sw1*sw2*sw3, data = dat_ex) - - -``` diff --git a/vignettes/trajMSM.Rmd b/vignettes/trajMSM.Rmd deleted file mode 100644 index 168b546..0000000 --- a/vignettes/trajMSM.Rmd +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "trajMSM" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{trajMSM} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>" -) -``` - -```{r setup} -library(trajMSM) -``` - -# Introduction - - -# Latent Class Growth Analysis (LCGA) - -# Marginal Structural Model and LCGA (LCGA-MSM) - - -## LCGA-MSM and IPW - -## LCGA-MSM and g-formula - -## LCGA-MSM and pooled-LTMLE - - -# History restricted MSM and LCGA (LCGA-HRMSM) - - -## LCGA-HRMSM and IPW - -## LCGA-HRMSM and g-formula - -## LCGA-HRMSM and pooled-LTMLE - - - diff --git a/vignettes/trajMSM_0.1.0.pdf b/vignettes/trajMSM_0.1.0.pdf deleted file mode 100644 index 9753386893044fe6aec7706a5861f845c99f6403..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102424 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 Buyp_c diff --git a/vignettes/vignette_trajmsm.Rmd b/vignettes/vignette_trajmsm.Rmd new file mode 100644 index 0000000..5812e47 --- /dev/null +++ b/vignettes/vignette_trajmsm.Rmd @@ -0,0 +1,11 @@ +--- +title: "Vignette trajmsm" +author: "Awa Diop" +date: "2024-01-28" +output: html_document +--- + +```{r setup, include=FALSE} +library(trajmsm) + +```