##chargement des packages----
library(questionr)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.1     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tableone)
library(labelled)
library(gtsummary)
library(GGally)
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
library(readxl)
library(effects)
## Le chargement a nécessité le package : carData
## lattice theme set by effectsTheme()
## See ?effectsTheme for details.
library(survival)
library(survminer)
## Le chargement a nécessité le package : ggpubr
## 
## Attachement du package : 'survminer'
## 
## L'objet suivant est masqué depuis 'package:survival':
## 
##     myeloma
library(ggplot2)
library(scales)
## 
## Attachement du package : 'scales'
## 
## L'objet suivant est masqué depuis 'package:purrr':
## 
##     discard
## 
## L'objet suivant est masqué depuis 'package:readr':
## 
##     col_factor
library(labelled)
library(ggpattern)
##chargement des données 

data_thomas <- read_excel("Y:/DMs/Internes/Thomas 2023-2024/Picc Line/Mémoire PICC Line/analyses stats/20240628/data_thomas.xlsx")
## New names:
## • `` -> `...50`
##recodage bases de données le cas échéant----


picc<-filter(data_thomas, c(elligible=="oui" ))

##recodage des variables----

picc$age.cat<-ifelse(picc$age>65, 1, 0)
picc$duree_bloc.cat<-ifelse(picc$duree_bloc>50, 1, 0)
picc$sexe.cat<-ifelse(picc$sexe=="F", 1, 0)
picc$indic_atk<-ifelse(picc$indic_picc=="traitement anticancereux", 1, 0)
picc$indic_horsatk<-ifelse(picc$indic_picc=="hors anticancereux", 1, 0)
picc$indic_soinpal<-ifelse(picc$indic_picc=="soins paliatifs", 1, 0)
picc$indic_accesveineux<-ifelse(picc$indic_picc=="accès veineux", 1, 0)
picc$orl.cat<-ifelse(picc$spe_medicale=="orl", 1, 0)
picc$hemato.cat<-ifelse(picc$spe_medicale=="hemato", 1, 0)
picc$neuro.cat<-ifelse(picc$spe_medicale=="neuro", 1, 0)
picc$seno.cat<-ifelse(picc$spe_medicale=="senologie", 1, 0)
picc$sarcome.cat<-ifelse(picc$spe_medicale=="sarcome", 1, 0)
picc$gyneco.cat<-ifelse(picc$spe_medicale=="gyneco", 1, 0)
picc$uroo.cat<-ifelse(picc$spe_medicale=="urologie", 1, 0)
##renommer des variables pour présentation dans les tableaux de résultats



##renommer les variables pour un tableau population tous patients y compris ceux avec blases >5%
var_label(picc$age.cat) <- "Patients de + de 65 ans"
var_label(picc$sexe.cat) <- "Femmes"
var_label(picc$duree_bloc.cat) <- "Durée de bloc >50 min"
var_label(picc$circuit_presta) <- "Patient avec prestataire de soin à domicile"
var_label(picc$entretien_cat) <- "Patient ayant bénéficié d'un entretien picc_line"
var_label(picc$indic_picc) <- "Indication du picc-line"
var_label(picc$cancer_hemato) <- "Patient avec hémopathie maligne"
var_label(picc$duree_bloc) <- "Durée du bloc pour pose de picc-line"
var_label(picc$spe_medicale) <- "spécialité médicale"
var_label(picc$indic_atk) <- "Picc-line pour administration atk"
var_label(picc$indic_horsatk) <- "Picc-line pour administration medt autre que atk"
var_label(picc$indic_soinpal) <- "Picc-line pour administration soins paliatifs"
var_label(picc$indic_accesveineux) <- "Picc-line pour accès veineux"
var_label(picc$orl.cat) <- "Patient ORL"
var_label(picc$neuro.cat) <- "Patient neuro-oncologie"
var_label(picc$seno.cat) <- "Patient senologie"
var_label(picc$sarcome.cat) <- "Patient sarcome"
var_label(picc$gyneco.cat) <- "Patient gynecologie"
var_label(picc$uroo.cat) <- "Patient urologie"
var_label(picc$hemato.cat) <- "Patient hematologie"
var_label(picc$chir_ambu) <- "Picc-line posé en chrirugie ambulatoire"
var_label(picc$transfusion) <- "Picc-line pour transfusion"
var_label(picc$hydratation) <- "Picc-line pour hydratation"
var_label(picc$alimentation) <- "Picc-line pour nutrition parentérale"
var_label(picc$anti_infectieux) <- "Picc-line pour anti infectieux"
##tableau descriptif population globales ----


tbl_summary(
  picc, include = c("age", "sexe", "spe_medicale", "orl.cat", "neuro.cat", "seno.cat", "sarcome.cat", "gyneco.cat", "uroo.cat", "hemato.cat", "duree_bloc","chir_ambu","circuit_presta", "indic_picc", "indic_atk", "indic_horsatk","anti_infectieux", "alimentation", "hydratation", "transfusion", "indic_soinpal", "indic_accesveineux", "cancer_hemato", ),
  statistic = all_continuous() ~ "{median} [{min} - {max}]",
  by="entretien_cat",
  digits=all_categorical()~ c(0,1)
)%>%
  add_p
Characteristic 0, N = 1401 1, N = 161 p-value2
age 62 [19 - 88] 67 [31 - 77] 0.5
sexe 0.6
    F 70 (50.0%) 7 (43.8%)
    M 70 (50.0%) 9 (56.2%)
spécialité médicale 0.13
    dermato 9 (6.4%) 0 (0.0%)
    digestif 3 (2.1%) 1 (6.2%)
    gyneco 19 (13.6%) 0 (0.0%)
    hemato 34 (24.3%) 2 (12.5%)
    hors_onco 1 (0.7%) 0 (0.0%)
    neuro 9 (6.4%) 0 (0.0%)
    orl 27 (19.3%) 3 (18.8%)
    sarcome 17 (12.1%) 6 (37.5%)
    senologie 8 (5.7%) 2 (12.5%)
    thyroide 2 (1.4%) 0 (0.0%)
    urologie 11 (7.9%) 2 (12.5%)
Patient ORL 27 (19.3%) 3 (18.8%) >0.9
Patient neuro-oncologie 9 (6.4%) 0 (0.0%) 0.6
Patient senologie 8 (5.7%) 2 (12.5%) 0.3
Patient sarcome 17 (12.1%) 6 (37.5%) 0.016
Patient gynecologie 19 (13.6%) 0 (0.0%) 0.2
Patient urologie 11 (7.9%) 2 (12.5%) 0.6
Patient hematologie 34 (24.3%) 2 (12.5%) 0.4
Durée du bloc pour pose de picc-line 51 [26 - 120] 42 [34 - 69] 0.10
Picc-line posé en chrirugie ambulatoire 27 (19.3%) 12 (75.0%) <0.001
Patient avec prestataire de soin à domicile 21 (15.0%) 12 (75.0%) <0.001
Indication du picc-line 0.016
    absence donnee 1 (0.7%) 1 (6.2%)
    accès veineux 19 (13.6%) 0 (0.0%)
    hors anticancereux 26 (18.6%) 0 (0.0%)
    soins paliatifs 19 (13.6%) 1 (6.2%)
    traitement anticancereux 75 (53.6%) 14 (87.5%)
Picc-line pour administration atk 75 (53.6%) 14 (87.5%) 0.009
Picc-line pour administration medt autre que atk 26 (18.6%) 0 (0.0%) 0.075
Picc-line pour anti infectieux 12 (8.6%) 0 (0.0%) 0.6
Picc-line pour nutrition parentérale 1 (0.7%) 0 (0.0%) >0.9
Picc-line pour hydratation 3 (2.1%) 0 (0.0%) >0.9
Picc-line pour transfusion 10 (7.1%) 0 (0.0%) 0.6
Picc-line pour administration soins paliatifs 19 (13.6%) 1 (6.2%) 0.7
Picc-line pour accès veineux 19 (13.6%) 0 (0.0%) 0.2
Patient avec hémopathie maligne 34 (24.3%) 2 (12.5%) 0.4
1 Median [Range]; n (%)
2 Wilcoxon rank sum test; Pearson’s Chi-squared test; Fisher’s exact test
###tableau descriptif devenir des patients 
tbl_summary(
  picc, include = c("retrait", "infection", "thrombose", "complic_meca","echec", "deces" ),
  statistic = all_continuous() ~ "{median} [{min} - {max}]",
  by="entretien_cat",
  digits=all_categorical()~ c(0,1)
)%>%
  add_p
Characteristic 0, N = 1401 1, N = 161 p-value2
retrait 0.011
    Non 73 (52.1%) 3 (18.8%)
    Oui 67 (47.9%) 13 (81.2%)
infection 0.2
    Non 116 (82.9%) 11 (68.8%)
    Oui 24 (17.1%) 5 (31.2%)
thrombose >0.9
    Non 136 (97.1%) 16 (100.0%)
    Oui 4 (2.9%) 0 (0.0%)
complic_meca 0.7
    Non 112 (80.0%) 12 (75.0%)
    Oui 28 (20.0%) 4 (25.0%)
echec >0.9
    Non 139 (99.3%) 16 (100.0%)
    Oui 1 (0.7%) 0 (0.0%)
deces 0.075
    Non 102 (72.9%) 15 (93.8%)
    Oui 38 (27.1%) 1 (6.2%)
1 n (%)
2 Pearson’s Chi-squared test; Fisher’s exact test
#Courbe de Kaplan Meier population globale durée sans complication----

km_complic<-survfit(Surv(picc$jdc, picc$complic)~1)

km_complic
## Call: survfit(formula = Surv(picc$jdc, picc$complic) ~ 1)
## 
##        n events median 0.95LCL 0.95UCL
## [1,] 156     60     78      61     122
ggsurvplot(km_complic, data = picc,
           risk.table=TRUE,
           surv.scale="percent",
           break.time.by=30,
           surv.median.line = "hv"
)

#Courbe de Kaplan Meier selon entretien pharma----

km_complic_entretien<-survfit(Surv(jdc, complic)~entretien_cat, data=picc)

km_complic_entretien
## Call: survfit(formula = Surv(jdc, complic) ~ entretien_cat, data = picc)
## 
##                   n events median 0.95LCL 0.95UCL
## entretien_cat=0 140     51     78      61     124
## entretien_cat=1  16      9     97      28      NA
survdiff(Surv(jdc, complic)~entretien_cat, data=picc)
## Call:
## survdiff(formula = Surv(jdc, complic) ~ entretien_cat, data = picc)
## 
##                   N Observed Expected (O-E)^2/E (O-E)^2/V
## entretien_cat=0 140       51    51.33   0.00209     0.015
## entretien_cat=1  16        9     8.67   0.01236     0.015
## 
##  Chisq= 0  on 1 degrees of freedom, p= 0.9
ggsurvplot(km_complic_entretien, data = picc,
           risk.table=TRUE,
           surv.scale="percent",
           break.time.by=30,
           surv.median.line = "hv"
)

##modeles de cox univariés--

modsurv<-coxph(Surv(jdc, complic)~entretien_cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Patient ayant bénéficié d'un entretien picc_line 1.05 0.51, 2.16 0.9
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~age, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
age 1.01 0.99, 1.02 0.5
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~age.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Patients de + de 65 ans 1.27 0.76, 2.13 0.4
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~duree_bloc, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Durée du bloc pour pose de picc-line 1.00 0.98, 1.01 0.6
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~duree_bloc.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Durée de bloc >50 min 1.12 0.67, 1.86 0.7
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~sexe.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Femmes 1.04 0.63, 1.74 0.9
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~circuit_presta, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Patient avec prestataire de soin à domicile 0.46 0.24, 0.89 0.022
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~indic_atk, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Picc-line pour administration atk 0.71 0.41, 1.22 0.2
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~indic_horsatk, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Picc-line pour administration medt autre que atk 1.35 0.68, 2.68 0.4
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~indic_accesveineux, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Picc-line pour accès veineux 1.43 0.65, 3.15 0.4
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~hemato.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Patient hematologie 1.62 0.93, 2.83 0.087
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~orl.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Patient ORL 0.79 0.38, 1.63 0.5
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~sarcome.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Patient sarcome 1.15 0.60, 2.22 0.7
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~gyneco.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Patient gynecologie 0.90 0.39, 2.10 0.8
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~seno.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Patient senologie 0.27 0.07, 1.11 0.070
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~neuro.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Patient neuro-oncologie 0.79 0.28, 2.18 0.6
1 HR = Hazard Ratio, CI = Confidence Interval
modsurv<-coxph(Surv(jdc, complic)~chir_ambu, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Picc-line posé en chrirugie ambulatoire 0.79 0.43, 1.46 0.5
1 HR = Hazard Ratio, CI = Confidence Interval
##modele intermédiaire multivarié de cox--

modsurv<-coxph(Surv(jdc, complic)~circuit_presta+indic_atk+hemato.cat+seno.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Patient avec prestataire de soin à domicile 0.54 0.27, 1.07 0.079
Picc-line pour administration atk 0.91 0.51, 1.63 0.8
Patient hematologie 1.29 0.72, 2.32 0.4
Patient senologie 0.33 0.08, 1.39 0.13
1 HR = Hazard Ratio, CI = Confidence Interval
ggforest(modsurv)
## Warning in .get_data(model, data = data): The `data` argument is not provided.
## Data will be extracted from model fit.

step(modsurv)
## Start:  AIC=490.33
## Surv(jdc, complic) ~ circuit_presta + indic_atk + hemato.cat + 
##     seno.cat
## 
##                  Df    AIC
## - indic_atk       1 488.43
## - hemato.cat      1 489.05
## <none>              490.33
## - seno.cat        1 491.51
## - circuit_presta  1 491.72
## 
## Step:  AIC=488.43
## Surv(jdc, complic) ~ circuit_presta + hemato.cat + seno.cat
## 
##                  Df    AIC
## - hemato.cat      1 487.33
## <none>              488.43
## - seno.cat        1 489.56
## - circuit_presta  1 490.40
## 
## Step:  AIC=487.33
## Surv(jdc, complic) ~ circuit_presta + seno.cat
## 
##                  Df    AIC
## <none>              487.33
## - seno.cat        1 489.03
## - circuit_presta  1 490.12
## Call:
## coxph(formula = Surv(jdc, complic) ~ circuit_presta + seno.cat, 
##     data = picc)
## 
##                   coef exp(coef) se(coef)      z      p
## circuit_presta -0.6910    0.5011   0.3374 -2.048 0.0406
## seno.cat       -1.1574    0.3143   0.7237 -1.599 0.1097
## 
## Likelihood ratio test=9.82  on 2 df, p=0.007389
## n= 156, number of events= 60
##Modèle final de covariable 
modsurv<-coxph(Surv(jdc, complic)~circuit_presta+seno.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Patient avec prestataire de soin à domicile 0.50 0.26, 0.97 0.041
Patient senologie 0.31 0.08, 1.30 0.11
1 HR = Hazard Ratio, CI = Confidence Interval
ggforest(modsurv)
## Warning in .get_data(model, data = data): The `data` argument is not provided.
## Data will be extracted from model fit.

##Modèle multivarié avec variable entretien forcée dans le modèle 

modsurv<-coxph(Surv(jdc, complic)~circuit_presta+entretien_cat+seno.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic HR1 95% CI1 p-value
Patient avec prestataire de soin à domicile 0.31 0.13, 0.73 0.008
Patient ayant bénéficié d'un entretien picc_line 2.73 1.07, 7.00 0.036
Patient senologie 0.30 0.07, 1.24 0.10
1 HR = Hazard Ratio, CI = Confidence Interval
ggforest(modsurv)
## Warning in .get_data(model, data = data): The `data` argument is not provided.
## Data will be extracted from model fit.