##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_overall()%>%
add_p(
pvalue_fun = scales::label_pvalue(accuracy = .001)
)
Characteristic |
Overall, N = 156 |
0, N = 140 |
1, N = 16 |
p-value |
age |
64 [19 - 88] |
62 [19 - 88] |
67 [31 - 77] |
0.524 |
sexe |
|
|
|
0.636 |
F |
77 (49.4%) |
70 (50.0%) |
7 (43.8%) |
|
M |
79 (50.6%) |
70 (50.0%) |
9 (56.2%) |
|
spécialité médicale |
|
|
|
0.135 |
dermato |
9 (5.8%) |
9 (6.4%) |
0 (0.0%) |
|
digestif |
4 (2.6%) |
3 (2.1%) |
1 (6.2%) |
|
gyneco |
19 (12.2%) |
19 (13.6%) |
0 (0.0%) |
|
hemato |
36 (23.1%) |
34 (24.3%) |
2 (12.5%) |
|
hors_onco |
1 (0.6%) |
1 (0.7%) |
0 (0.0%) |
|
neuro |
9 (5.8%) |
9 (6.4%) |
0 (0.0%) |
|
orl |
30 (19.2%) |
27 (19.3%) |
3 (18.8%) |
|
sarcome |
23 (14.7%) |
17 (12.1%) |
6 (37.5%) |
|
senologie |
10 (6.4%) |
8 (5.7%) |
2 (12.5%) |
|
thyroide |
2 (1.3%) |
2 (1.4%) |
0 (0.0%) |
|
urologie |
13 (8.3%) |
11 (7.9%) |
2 (12.5%) |
|
Patient ORL |
30 (19.2%) |
27 (19.3%) |
3 (18.8%) |
>0.999 |
Patient neuro-oncologie |
9 (5.8%) |
9 (6.4%) |
0 (0.0%) |
0.599 |
Patient senologie |
10 (6.4%) |
8 (5.7%) |
2 (12.5%) |
0.273 |
Patient sarcome |
23 (14.7%) |
17 (12.1%) |
6 (37.5%) |
0.016 |
Patient gynecologie |
19 (12.2%) |
19 (13.6%) |
0 (0.0%) |
0.221 |
Patient urologie |
13 (8.3%) |
11 (7.9%) |
2 (12.5%) |
0.625 |
Patient hematologie |
36 (23.1%) |
34 (24.3%) |
2 (12.5%) |
0.365 |
Durée du bloc pour pose de picc-line |
50 [26 - 120] |
51 [26 - 120] |
42 [34 - 69] |
0.098 |
Picc-line posé en chrirugie ambulatoire |
39 (25.0%) |
27 (19.3%) |
12 (75.0%) |
<0.001 |
Patient avec prestataire de soin à domicile |
33 (21.2%) |
21 (15.0%) |
12 (75.0%) |
<0.001 |
Indication du picc-line |
|
|
|
0.016 |
absence donnee |
2 (1.3%) |
1 (0.7%) |
1 (6.2%) |
|
accès veineux |
19 (12.2%) |
19 (13.6%) |
0 (0.0%) |
|
hors anticancereux |
26 (16.7%) |
26 (18.6%) |
0 (0.0%) |
|
soins paliatifs |
20 (12.8%) |
19 (13.6%) |
1 (6.2%) |
|
traitement anticancereux |
89 (57.1%) |
75 (53.6%) |
14 (87.5%) |
|
Picc-line pour administration atk |
89 (57.1%) |
75 (53.6%) |
14 (87.5%) |
0.009 |
Picc-line pour administration medt autre que atk |
26 (16.7%) |
26 (18.6%) |
0 (0.0%) |
0.075 |
Picc-line pour anti infectieux |
12 (7.7%) |
12 (8.6%) |
0 (0.0%) |
0.614 |
Picc-line pour nutrition parentérale |
1 (0.6%) |
1 (0.7%) |
0 (0.0%) |
>0.999 |
Picc-line pour hydratation |
3 (1.9%) |
3 (2.1%) |
0 (0.0%) |
>0.999 |
Picc-line pour transfusion |
10 (6.4%) |
10 (7.1%) |
0 (0.0%) |
0.600 |
Picc-line pour administration soins paliatifs |
20 (12.8%) |
19 (13.6%) |
1 (6.2%) |
0.696 |
Picc-line pour accès veineux |
19 (12.2%) |
19 (13.6%) |
0 (0.0%) |
0.221 |
Patient avec hémopathie maligne |
36 (23.1%) |
34 (24.3%) |
2 (12.5%) |
0.365 |
###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_overall()%>%
add_p(
pvalue_fun = scales::label_pvalue(accuracy = .001)
)
Characteristic |
Overall, N = 156 |
0, N = 140 |
1, N = 16 |
p-value |
retrait |
|
|
|
0.011 |
Non |
76 (48.7%) |
73 (52.1%) |
3 (18.8%) |
|
Oui |
80 (51.3%) |
67 (47.9%) |
13 (81.2%) |
|
infection |
|
|
|
0.181 |
Non |
127 (81.4%) |
116 (82.9%) |
11 (68.8%) |
|
Oui |
29 (18.6%) |
24 (17.1%) |
5 (31.2%) |
|
thrombose |
|
|
|
>0.999 |
Non |
152 (97.4%) |
136 (97.1%) |
16 (100.0%) |
|
Oui |
4 (2.6%) |
4 (2.9%) |
0 (0.0%) |
|
complic_meca |
|
|
|
0.743 |
Non |
124 (79.5%) |
112 (80.0%) |
12 (75.0%) |
|
Oui |
32 (20.5%) |
28 (20.0%) |
4 (25.0%) |
|
echec |
|
|
|
>0.999 |
Non |
155 (99.4%) |
139 (99.3%) |
16 (100.0%) |
|
Oui |
1 (0.6%) |
1 (0.7%) |
0 (0.0%) |
|
deces |
|
|
|
0.075 |
Non |
117 (75.0%) |
102 (72.9%) |
15 (93.8%) |
|
Oui |
39 (25.0%) |
38 (27.1%) |
1 (6.2%) |
|
#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 |
HR |
95% CI |
p-value |
Patient ayant bénéficié d'un entretien picc_line |
1.05 |
0.51, 2.16 |
0.9 |
modsurv<-coxph(Surv(jdc, complic)~age, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
age |
1.01 |
0.99, 1.02 |
0.5 |
modsurv<-coxph(Surv(jdc, complic)~age.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Patients de + de 65 ans |
1.27 |
0.76, 2.13 |
0.4 |
modsurv<-coxph(Surv(jdc, complic)~duree_bloc, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Durée du bloc pour pose de picc-line |
1.00 |
0.98, 1.01 |
0.6 |
modsurv<-coxph(Surv(jdc, complic)~duree_bloc.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Durée de bloc >50 min |
1.12 |
0.67, 1.86 |
0.7 |
modsurv<-coxph(Surv(jdc, complic)~sexe.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Femmes |
1.04 |
0.63, 1.74 |
0.9 |
modsurv<-coxph(Surv(jdc, complic)~circuit_presta, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Patient avec prestataire de soin à domicile |
0.46 |
0.24, 0.89 |
0.022 |
modsurv<-coxph(Surv(jdc, complic)~indic_atk, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Picc-line pour administration atk |
0.71 |
0.41, 1.22 |
0.2 |
modsurv<-coxph(Surv(jdc, complic)~indic_horsatk, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Picc-line pour administration medt autre que atk |
1.35 |
0.68, 2.68 |
0.4 |
modsurv<-coxph(Surv(jdc, complic)~indic_accesveineux, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Picc-line pour accès veineux |
1.43 |
0.65, 3.15 |
0.4 |
modsurv<-coxph(Surv(jdc, complic)~hemato.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Patient hematologie |
1.62 |
0.93, 2.83 |
0.087 |
modsurv<-coxph(Surv(jdc, complic)~orl.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Patient ORL |
0.79 |
0.38, 1.63 |
0.5 |
modsurv<-coxph(Surv(jdc, complic)~sarcome.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Patient sarcome |
1.15 |
0.60, 2.22 |
0.7 |
modsurv<-coxph(Surv(jdc, complic)~gyneco.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Patient gynecologie |
0.90 |
0.39, 2.10 |
0.8 |
modsurv<-coxph(Surv(jdc, complic)~seno.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Patient senologie |
0.27 |
0.07, 1.11 |
0.070 |
modsurv<-coxph(Surv(jdc, complic)~neuro.cat, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Patient neuro-oncologie |
0.79 |
0.28, 2.18 |
0.6 |
modsurv<-coxph(Surv(jdc, complic)~chir_ambu, data=picc)
modsurv%>%tbl_regression(exponentiate = TRUE)
Characteristic |
HR |
95% CI |
p-value |
Picc-line posé en chrirugie ambulatoire |
0.79 |
0.43, 1.46 |
0.5 |
##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 |
HR |
95% CI |
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 |
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 |
HR |
95% CI |
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 |
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 |
HR |
95% CI |
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 |
ggforest(modsurv)
## Warning in .get_data(model, data = data): The `data` argument is not provided.
## Data will be extracted from model fit.
