# ============================================
# ANALYSE DES DONNÉES DIABÉTOLOGIQUES - [Link]
# R version 4.5.2 / RStudio 2025
# ============================================
# --------------------------
# 1. INSTALLATION DES PACKAGES
# --------------------------
packages <- c(
"readxl", # Lecture Excel
"dplyr", # Manipulation de données
"tidyr", # Nettoyage de données
"summarytools", # Statistiques descriptives
"gtsummary", # Tables descriptives et régression
"ggplot2", # Graphiques
"epiDisplay", # OR, IC, Khi2
"broom", # Nettoyage sorties modèles
"flextable", # Tables formatées
"officer", # Export Word
"reporttools", # Formatage statistiques
"stringr", # Manipulation texte
"forcats" # Manipulation facteurs
)
# Installation si nécessaire
installed_packages <- packages %in% rownames([Link]())
if (any(!installed_packages)) {
[Link](packages[!installed_packages])
}
# Chargement des packages
invisible(lapply(packages, library, [Link] = TRUE))
# --------------------------
# 2. IMPORTATION DES DONNÉES
# --------------------------
# Chemin du fichier (à adapter)
file_path <- "[Link]"
# Lecture du fichier
df <- read_excel(file_path, sheet = "Base de données")
# Aperçu structure
cat("Dimensions des données :", dim(df), "\n")
cat("\nStructure des données :\n")
str(df, [Link] = 1)
# --------------------------
# 3. NETTOYAGE ET PRÉPARATION
# --------------------------
# Conversion des colonnes "non"/"Oui" en logique
binary_columns <- c(
"40-64 ans", ">65 ans", "Enseignant", "Comptable", "Menagere",
"Commercant", "Avocat", "Aucune", "Couturière", "Secretaire de bureau",
"Infirmier", "Sentinelle", "Agent Etat", "Policier", "Ouvrier",
"Pasteur", "Cultivateur", "Menuisier", "Plombier", "Medecin",
"Militaire", "Marié", "Veuf", "Divorcé", "Universitaire",
"Sécondaire", "Primaire", "ATCDFamilaiunondeDS", "HTA", "Tabagisme",
"Alcoolisme", "Sédendatarité", "SPP", "Nycturie", "Palpitations",
"Asthéniephysique", "Paresthésie", "Baisseacuitévisuelle",
"Amaigrissement", "Précordialgie", "Anorexie", "Dyspnée",
"Veriges", "Trouble erectil", "Douleur épigastrique", "Dyspnée.1",
"Normal", "Surpoids", "Obésité", "TA Normal", "Normale Haute",
"HTA I", "HTA II", "HTA III", "Neuropathie", "AVC",
"Insuffisancecardiaque", "Aucune.1", "Pied diabétique",
"Amputation", "Trouble éréctil", "Paresthésie.1", "Rétinopathie",
"Coagulopathie", "Hypercoagulabilité", "Hypocagulabilité"
)
for (col in binary_columns) {
if (col %in% names(df)) {
df[[col]] <- ifelse(toupper(df[[col]]) == "OUI", 1,
ifelse(toupper(df[[col]]) == "NON", 0, NA))
df[[col]] <- [Link](df[[col]])
}
}
# Variables dépendantes
df$Hypercoagulabilité <- [Link](df$Hypercoagulabilité)
df$Coagulopathie <- [Link](df$Coagulopathie)
df$Hypocagulabilité <- [Link](df$Hypocagulabilité)
# Conversion des variables numériques
numeric_cols <- c("Age", "AnciennetéduDS", "Anciennetédel'HTA",
"IMC", "Tourdetaille", "Tourdehanche", "RapportTH",
"HbA1", "Cholestérol (mg/dl)", "HDL-C", "LDL - C",
"Triglycérides", "Acide urique", "APTT", "TP", "TT",
"Fibrinogene", "INR", "Plaquettes")
for (col in numeric_cols) {
if (col %in% names(df)) {
df[[col]] <- [Link](df[[col]])
}
}
# Variables catégorielles supplémentaires
categorical_cols <- c(
"Tranche d'âge", "Sexe", "Profession", "statut matrimonial",
"niveaud'instruction", "TA x", "Grade TA", "Complications",
"Traitement", "Traitement classification", "ADO", "Insuline",
"Insuline + ADO", "Aucun.2", "HbA1_nom", "Cholestérol (mg/dl)_nom",
"HDL-C_nom", "LDL - C_nom", "Triglycérides_nom", "Acide urique_nom",
"APTT_nom", "TP_nom", "TT_nom", "Fibrinogene_nom", "INR_nom",
"Plaquettes_nom"
)
for (col in categorical_cols) {
if (col %in% names(df)) {
df[[col]] <- [Link](df[[col]])
}
}
# Vérification des valeurs manquantes
cat("\nValeurs manquantes par colonne :\n")
missing_summary <- sapply(df, function(x) sum([Link](x)))
print(missing_summary[missing_summary > 0])
# --------------------------
# 4. ANALYSE DESCRIPTIVE
# --------------------------
cat("\n\n=====================\nANALYSE DESCRIPTIVE\n=====================\n")
# Table descriptive générale
descr_table <- dfSummary(df, style = "grid",
[Link] = FALSE,
headings = FALSE)
print(descr_table)
# Statistiques descriptives par variable dépendante
desc_by_hypercoag <- df %>%
select_if([Link]) %>%
tbl_summary(by = Hypercoagulabilité,
statistic = list(all_continuous() ~ "{mean} ({sd})"),
missing = "no") %>%
add_p() %>%
bold_labels()
desc_by_coagulopathie <- df %>%
select_if([Link]) %>%
tbl_summary(by = Coagulopathie,
statistic = list(all_continuous() ~ "{mean} ({sd})"),
missing = "no") %>%
add_p() %>%
bold_labels()
desc_by_hypocoag <- df %>%
select_if([Link]) %>%
tbl_summary(by = Hypocagulabilité,
statistic = list(all_continuous() ~ "{mean} ({sd})"),
missing = "no") %>%
add_p() %>%
bold_labels()
# --------------------------
# 5. ANALYSE BIVARIÉE
# --------------------------
cat("\n\n===================\nANALYSE BIVARIÉE\n===================\n")
# Fonction pour analyse bivariée
bivariate_analysis <- function(data, outcome_var, var_list) {
results <- list()
for (var in var_list) {
if (var %in% names(data)) {
# Test statistique selon le type de variable
if ([Link](data[[var]]) | [Link](data[[var]])) {
# Test du Khi2
tbl <- table(data[[outcome_var]], data[[var]])
if (all(dim(tbl) > 1)) {
chi_test <- [Link](tbl)
results[[var]] <- list(
table = tbl,
chi_squared = chi_test$statistic,
p_value = chi_test$[Link],
method = "Chi-square"
)
}
} else if ([Link](data[[var]])) {
# Test t ou ANOVA
if (length(unique([Link](data[[outcome_var]]))) == 2) {
# Test t
group1 <- data[[var]][data[[outcome_var]] == levels(data[[outcome_var]])
[1]]
group2 <- data[[var]][data[[outcome_var]] == levels(data[[outcome_var]])
[2]]
t_test <- [Link](group1, group2)
results[[var]] <- list(
mean_group1 = mean(group1, [Link] = TRUE),
mean_group2 = mean(group2, [Link] = TRUE),
t_statistic = t_test$statistic,
p_value = t_test$[Link],
method = "t-test"
)
}
}
}
}
return(results)
}
# Variables indépendantes à tester (exemples)
independent_vars <- c("Age", "Sexe", "HTA", "Tabagisme", "Alcoolisme",
"IMC", "TA x", "Grade TA", "Complications")
# Analyse bivariée pour chaque variable dépendante
bivar_hypercoag <- bivariate_analysis(df, "Hypercoagulabilité", independent_vars)
bivar_coagulopathie <- bivariate_analysis(df, "Coagulopathie", independent_vars)
bivar_hypocoag <- bivariate_analysis(df, "Hypocagulabilité", independent_vars)
# Affichage des résultats
print("Analyse bivariée - Hypercoagulabilité :")
print(bivar_hypercoag)
print("Analyse bivariée - Coagulopathie :")
print(bivar_coagulopathie)
print("Analyse bivariée - Hypocoagulabilité :")
print(bivar_hypocoag)
# --------------------------
# 6. RÉGRESSION LOGISTIQUE
# --------------------------
cat("\n\n=======================\nRÉGRESSION LOGISTIQUE\n=======================\
n")
# Fonction pour régression logistique
run_logistic_regression <- function(data, outcome, predictors) {
# Formule du modèle
formula_str <- paste(outcome, "~", paste(predictors, collapse = " + "))
formula_obj <- [Link](formula_str)
# Modèle complet
model <- glm(formula_obj, data = data, family = binomial(link = "logit"))
# Résumé détaillé
summary_model <- summary(model)
# OR et IC
or_ci <- exp(cbind(OR = coef(model), confint(model)))
# Khi2 du modèle
model_chi2 <- model$[Link] - model$deviance
model_df <- model$[Link] - model$[Link]
model_p <- 1 - pchisq(model_chi2, model_df)
# Tableau de résultats
results_table <- cbind(
OR = exp(coef(model)),
CI_lower = exp(confint(model)[,1]),
CI_upper = exp(confint(model)[,2]),
p_value = coef(summary_model)[,4]
)
return(list(
model = model,
summary = summary_model,
or_ci = or_ci,
results_table = results_table,
model_chi2 = model_chi2,
model_df = model_df,
model_p = model_p
))
}
# Prédicteurs pour la régression (exemples)
predictors <- c("Age", "Sexe", "HTA", "Tabagisme", "IMC")
# Régression pour Hypercoagulabilité
logit_hypercoag <- run_logistic_regression(df, "Hypercoagulabilité", predictors)
cat("\nRégression logistique - Hypercoagulabilité :\n")
print(logit_hypercoag$summary)
cat("\nOR et IC 95% :\n")
print(logit_hypercoag$or_ci)
cat(sprintf("\nKhi2 du modèle = %.2f, df = %d, p = %.4f\n",
logit_hypercoag$model_chi2, logit_hypercoag$model_df,
logit_hypercoag$model_p))
# Régression pour Coagulopathie
logit_coagulopathie <- run_logistic_regression(df, "Coagulopathie", predictors)
cat("\nRégression logistique - Coagulopathie :\n")
print(logit_coagulopathie$summary)
cat("\nOR et IC 95% :\n")
print(logit_coagulopathie$or_ci)
cat(sprintf("\nKhi2 du modèle = %.2f, df = %d, p = %.4f\n",
logit_coagulopathie$model_chi2, logit_coagulopathie$model_df,
logit_coagulopathie$model_p))
# Régression pour Hypocoagulabilité
logit_hypocoag <- run_logistic_regression(df, "Hypocagulabilité", predictors)
cat("\nRégression logistique - Hypocoagulabilité :\n")
print(logit_hypocoag$summary)
cat("\nOR et IC 95% :\n")
print(logit_hypocoag$or_ci)
cat(sprintf("\nKhi2 du modèle = %.2f, df = %d, p = %.4f\n",
logit_hypocoag$model_chi2, logit_hypocoag$model_df,
logit_hypocoag$model_p))
# --------------------------
# 7. EXPORTATION VERS WORD
# --------------------------
cat("\n\n===================\nEXPORTATION WORD\n===================\n")
# Création du document Word
doc <- read_docx()
# Titre principal
doc <- doc %>%
body_add_par("ANALYSE DES DONNÉES DIABÉTOLOGIQUES", style = "heading 1") %>%
body_add_par(paste("Date :", [Link]()), style = "Normal") %>%
body_add_par(" ", style = "Normal")
# 1. Description des données
doc <- doc %>%
body_add_par("1. DESCRIPTION DES DONNÉES", style = "heading 2") %>%
body_add_par(paste("Nombre d'observations :", nrow(df)), style = "Normal") %>%
body_add_par(paste("Nombre de variables :", ncol(df)), style = "Normal")
# Table descriptive
doc <- doc %>%
body_add_par("Table descriptive des variables numériques", style = "heading 3")
# Conversion des tables gtsummary en flextable
desc_hypercoag_ft <- as_flex_table(desc_by_hypercoag)
desc_coagulopathie_ft <- as_flex_table(desc_by_coagulopathie)
desc_hypocoag_ft <- as_flex_table(desc_by_hypocoag)
doc <- doc %>%
body_add_par("Par statut d'hypercoagulabilité", style = "heading 4") %>%
body_add_flextable(desc_hypercoag_ft) %>%
body_add_par(" ", style = "Normal") %>%
body_add_par("Par statut de coagulopathie", style = "heading 4") %>%
body_add_flextable(desc_coagulopathie_ft) %>%
body_add_par(" ", style = "Normal") %>%
body_add_par("Par statut d'hypocoagulabilité", style = "heading 4") %>%
body_add_flextable(desc_hypocoag_ft)
# 2. Analyse bivariée
doc <- doc %>%
body_add_par("2. ANALYSE BIVARIÉE", style = "heading 2")
# Fonction pour ajouter les résultats bivariés
add_bivariate_results <- function(doc, results, title) {
doc <- doc %>%
body_add_par(title, style = "heading 3")
for (var_name in names(results)) {
res <- results[[var_name]]
doc <- doc %>%
body_add_par(paste("Variable :", var_name), style = "Normal") %>%
body_add_par(paste("Méthode :", res$method), style = "Normal") %>%
body_add_par(paste("Statistique :", round(res[[3]], 3)), style = "Normal") %>
%
body_add_par(paste("p-value :", [Link](res$p_value, digits = 3)), style
= "Normal") %>%
body_add_par(" ", style = "Normal")
}
return(doc)
}
doc <- add_bivariate_results(doc, bivar_hypercoag, "Hypercoagulabilité")
doc <- body_add_par(doc, " ", style = "Normal")
doc <- add_bivariate_results(doc, bivar_coagulopathie, "Coagulopathie")
doc <- body_add_par(doc, " ", style = "Normal")
doc <- add_bivariate_results(doc, bivar_hypocoag, "Hypocoagulabilité")
# 3. Régression logistique
doc <- doc %>%
body_add_par("3. RÉGRESSION LOGISTIQUE", style = "heading 2")
# Fonction pour ajouter les résultats de régression
add_regression_results <- function(doc, results, title) {
doc <- doc %>%
body_add_par(title, style = "heading 3") %>%
body_add_par(paste("Khi2 du modèle :", round(results$model_chi2, 2)), style =
"Normal") %>%
body_add_par(paste("Degrés de liberté :", results$model_df), style = "Normal")
%>%
body_add_par(paste("p-value du modèle :", [Link](results$model_p, digits =
3)), style = "Normal") %>%
body_add_par(" ", style = "Normal")
# Tableau des OR et IC
tbl <- results$results_table
ft <- flextable([Link](
Variable = rownames(tbl),
OR = sprintf("%.2f", tbl[,1]),
IC_95 = sprintf("%.2f - %.2f", tbl[,2], tbl[,3]),
p_value = [Link](tbl[,4], digits = 3)
))
ft <- ft %>%
set_header_labels(Variable = "Variable",
OR = "OR",
IC_95 = "IC 95%",
p_value = "p-value") %>%
theme_box() %>%
autofit()
doc <- doc %>%
body_add_flextable(ft) %>%
body_add_par(" ", style = "Normal")
return(doc)
}
doc <- add_regression_results(doc, logit_hypercoag, "Hypercoagulabilité")
doc <- add_regression_results(doc, logit_coagulopathie, "Coagulopathie")
doc <- add_regression_results(doc, logit_hypocoag, "Hypocoagulabilité")
# Sauvegarde du document
output_file <- paste0("Analyse_Diabeto_", [Link](), ".docx")
print(doc, target = output_file)
cat("\nDocument Word sauvegardé :", output_file, "\n")
# --------------------------
# 8. SORTIES COMPLÉMENTAIRES
# --------------------------
# Sauvegarde des données nettoyées
[Link](df, paste0("Donnees_nettoyees_", [Link](), ".csv"), [Link] = FALSE)
# Sauvegarde des résultats en RData
[Link](paste0("Analyse_complete_", [Link](), ".RData"))
cat("\n\n=====================\nANALYSE TERMINÉE\n=====================\n")
cat("Fichiers générés :\n")
cat("1.", output_file, "(rapport Word)\n")
cat("2. Donnees_nettoyées_", [Link](), ".csv\n", sep = "")
cat("3. Analyse_complete_", [Link](), ".RData\n", sep = "")