Introduzione

Questo documento presenta l’analisi statistica dei fattori prognostici associati alla neurotossicità in una coorte di 220 pazienti.

Obiettivo: Identificare quali variabili cliniche sono significativamente correlate con lo sviluppo di neurotossicità.


Descrizione del Campione

# Dimensioni del campione
n_totale <- 220
n_neurotox <- 41
n_non_neurotox <- 179

cat("Pazienti totali:", n_totale, "\n")
## Pazienti totali: 220
cat("Con neurotossicità:", n_neurotox, "(", round(n_neurotox/n_totale*100, 1), "%)\n")
## Con neurotossicità: 41 ( 18.6 %)
cat("Senza neurotossicità:", n_non_neurotox, "(", round(n_non_neurotox/n_totale*100, 1), "%)\n")
## Senza neurotossicità: 179 ( 81.4 %)

La prevalenza di neurotossicità nel campione è del 18.6%.


Importazione e Preparazione Dati

# Creare manualmente il dataset dai dati forniti
dati_raw <- data.frame(
  Variabile = c("LEUCOCITOSI", "AUMENTO D-DIMERO", "EDEMA ESTESO", 
                "SINTOMI SISTEMICI", "SESSO MASCHILE", "SEDE ARTO SUPERIORE",
                "GSS ≥ 2", "IPOTENSIONE, SHOCK"),
  Neurotox_Si = c(17, 19, 23, 32, 30, 23, 37, 12),
  Neurotox_No = c(27, 23, 83, 46, 128, 116, 101, 3)
)

kable(dati_raw, caption = "Dati grezzi: Frequenze assolute")
Dati grezzi: Frequenze assolute
Variabile Neurotox_Si Neurotox_No
LEUCOCITOSI 17 27
AUMENTO D-DIMERO 19 23
EDEMA ESTESO 23 83
SINTOMI SISTEMICI 32 46
SESSO MASCHILE 30 128
SEDE ARTO SUPERIORE 23 116
GSS ≥ 2 37 101
IPOTENSIONE, SHOCK 12 3

Analisi Statistica

Calcolo delle Proporzioni

# Calcolare proporzioni percentuali
dati_raw$Prop_Neurotox <- round(dati_raw$Neurotox_Si / n_neurotox * 100, 1)
dati_raw$Prop_Non_Neurotox <- round(dati_raw$Neurotox_No / n_non_neurotox * 100, 1)
dati_raw$Differenza <- round(dati_raw$Prop_Neurotox - dati_raw$Prop_Non_Neurotox, 1)

kable(dati_raw[, c("Variabile", "Prop_Neurotox", "Prop_Non_Neurotox", "Differenza")],
      caption = "Prevalenza delle variabili nei due gruppi (%)",
      col.names = c("Variabile", "Con Neurotox (%)", "Senza Neurotox (%)", "Differenza (%)"))
Prevalenza delle variabili nei due gruppi (%)
Variabile Con Neurotox (%) Senza Neurotox (%) Differenza (%)
LEUCOCITOSI 41.5 15.1 26.4
AUMENTO D-DIMERO 46.3 12.8 33.5
EDEMA ESTESO 56.1 46.4 9.7
SINTOMI SISTEMICI 78.0 25.7 52.3
SESSO MASCHILE 73.2 71.5 1.7
SEDE ARTO SUPERIORE 56.1 64.8 -8.7
GSS ≥ 2 90.2 56.4 33.8
IPOTENSIONE, SHOCK 29.3 1.7 27.6

Calcolo Odds Ratio e Test Statistici

# Funzione per calcolare statistiche
calcola_statistiche <- function(a, b, n1, n2) {
  tab <- matrix(c(a, n1-a, b, n2-b), nrow = 2, byrow = TRUE)
  test_fisher <- fisher.test(tab)
  or <- (a * (n2-b)) / ((n1-a) * b)
  log_or <- log(or)
  se_log_or <- sqrt(1/a + 1/(n1-a) + 1/b + 1/(n2-b))
  or_ci_low <- exp(log_or - 1.96 * se_log_or)
  or_ci_high <- exp(log_or + 1.96 * se_log_or)
  
  return(list(
    p_fisher = test_fisher$p.value,
    odds_ratio = or,
    or_ci_low = or_ci_low,
    or_ci_high = or_ci_high
  ))
}

# Applicare a tutte le variabili
stats <- lapply(1:nrow(dati_raw), function(i) {
  calcola_statistiche(
    dati_raw$Neurotox_Si[i],
    dati_raw$Neurotox_No[i],
    n_neurotox,
    n_non_neurotox
  )
})

# Creare dataframe risultati
risultati <- data.frame(
  Variabile = dati_raw$Variabile,
  N_Neurotox = dati_raw$Neurotox_Si,
  Prev_Neurotox = dati_raw$Prop_Neurotox,
  N_Non_Neurotox = dati_raw$Neurotox_No,
  Prev_Non_Neurotox = dati_raw$Prop_Non_Neurotox,
  Odds_Ratio = round(sapply(stats, function(x) x$odds_ratio), 2),
  OR_CI_Low = round(sapply(stats, function(x) x$or_ci_low), 2),
  OR_CI_High = round(sapply(stats, function(x) x$or_ci_high), 2),
  p_value = round(sapply(stats, function(x) x$p_fisher), 4)
)

# Aggiungere significatività
risultati$Significatività <- ifelse(risultati$p_value < 0.001, "***",
                                    ifelse(risultati$p_value < 0.01, "**",
                                    ifelse(risultati$p_value < 0.05, "*", "ns")))

# Ordinare per p-value
risultati <- risultati[order(risultati$p_value), ]

kable(risultati, 
      caption = "Risultati dell'analisi univariata",
      col.names = c("Variabile", "N (Neuro)", "% (Neuro)", "N (No Neuro)", 
                    "% (No Neuro)", "OR", "IC 95% inf", "IC 95% sup", "p-value", "Sig."))
Risultati dell’analisi univariata
Variabile N (Neuro) % (Neuro) N (No Neuro) % (No Neuro) OR IC 95% inf IC 95% sup p-value Sig.
2 AUMENTO D-DIMERO 19 46.3 23 12.8 5.86 2.76 12.45 0.0000 ***
4 SINTOMI SISTEMICI 32 78.0 46 25.7 10.28 4.56 23.15 0.0000 ***
7 GSS ≥ 2 37 90.2 101 56.4 7.14 2.44 20.89 0.0000 ***
8 IPOTENSIONE, SHOCK 12 29.3 3 1.7 24.28 6.45 91.31 0.0000 ***
1 LEUCOCITOSI 17 41.5 27 15.1 3.99 1.89 8.39 0.0004 ***
3 EDEMA ESTESO 23 56.1 83 46.4 1.48 0.75 2.93 0.3003 ns
6 SEDE ARTO SUPERIORE 23 56.1 116 64.8 0.69 0.35 1.38 0.3695 ns
5 SESSO MASCHILE 30 73.2 128 71.5 1.09 0.51 2.33 1.0000 ns

Legenda significatività:

  • *** p < 0.001 (altamente significativo)
  • ** p < 0.01 (molto significativo)
  • * p < 0.05 (significativo)
  • ns non significativo

Risultati Principali

Fattori di Rischio Significativi

fattori_sig <- risultati[risultati$p_value < 0.05, ]
kable(fattori_sig[, c("Variabile", "Odds_Ratio", "OR_CI_Low", "OR_CI_High", "p_value")],
      caption = "Fattori di rischio statisticamente significativi (p < 0.05)",
      row.names = FALSE)
Fattori di rischio statisticamente significativi (p < 0.05)
Variabile Odds_Ratio OR_CI_Low OR_CI_High p_value
AUMENTO D-DIMERO 5.86 2.76 12.45 0e+00
SINTOMI SISTEMICI 10.28 4.56 23.15 0e+00
GSS ≥ 2 7.14 2.44 20.89 0e+00
IPOTENSIONE, SHOCK 24.28 6.45 91.31 0e+00
LEUCOCITOSI 3.99 1.89 8.39 4e-04

Interpretazione dei Risultati

for(i in 1:nrow(fattori_sig)) {
  var <- fattori_sig$Variabile[i]
  or <- fattori_sig$Odds_Ratio[i]
  ic_low <- fattori_sig$OR_CI_Low[i]
  ic_high <- fattori_sig$OR_CI_High[i]
  p <- fattori_sig$p_value[i]
  prev_neuro <- fattori_sig$Prev_Neurotox[i]
  prev_no <- fattori_sig$Prev_Non_Neurotox[i]
  
  cat("\n#### ", var, "\n\n")
  cat("- **Prevalenza**: ", prev_neuro, "% (con neurotox) vs ", prev_no, "% (senza neurotox)\n")
  cat("- **Odds Ratio**: ", or, " (IC 95%: ", ic_low, "-", ic_high, ")\n")
  cat("- **p-value**: ", p, "\n")
  cat("- **Interpretazione**: I pazienti con ", tolower(var), " hanno **", 
      round(or, 1), " volte** maggiori probabilità di sviluppare neurotossicità rispetto a chi non presenta questa caratteristica.\n\n")
}

AUMENTO D-DIMERO

  • Prevalenza: 46.3 % (con neurotox) vs 12.8 % (senza neurotox)
  • Odds Ratio: 5.86 (IC 95%: 2.76 - 12.45 )
  • p-value: 0
  • Interpretazione: I pazienti con aumento d-dimero hanno ** 5.9 volte** maggiori probabilità di sviluppare neurotossicità rispetto a chi non presenta questa caratteristica.

SINTOMI SISTEMICI

  • Prevalenza: 78 % (con neurotox) vs 25.7 % (senza neurotox)
  • Odds Ratio: 10.28 (IC 95%: 4.56 - 23.15 )
  • p-value: 0
  • Interpretazione: I pazienti con sintomi sistemici hanno ** 10.3 volte** maggiori probabilità di sviluppare neurotossicità rispetto a chi non presenta questa caratteristica.

GSS ≥ 2

  • Prevalenza: 90.2 % (con neurotox) vs 56.4 % (senza neurotox)
  • Odds Ratio: 7.14 (IC 95%: 2.44 - 20.89 )
  • p-value: 0
  • Interpretazione: I pazienti con gss ≥ 2 hanno ** 7.1 volte** maggiori probabilità di sviluppare neurotossicità rispetto a chi non presenta questa caratteristica.

IPOTENSIONE, SHOCK

  • Prevalenza: 29.3 % (con neurotox) vs 1.7 % (senza neurotox)
  • Odds Ratio: 24.28 (IC 95%: 6.45 - 91.31 )
  • p-value: 0
  • Interpretazione: I pazienti con ipotensione, shock hanno ** 24.3 volte** maggiori probabilità di sviluppare neurotossicità rispetto a chi non presenta questa caratteristica.

LEUCOCITOSI

  • Prevalenza: 41.5 % (con neurotox) vs 15.1 % (senza neurotox)
  • Odds Ratio: 3.99 (IC 95%: 1.89 - 8.39 )
  • p-value: 4e-04
  • Interpretazione: I pazienti con leucocitosi hanno ** 4 volte** maggiori probabilità di sviluppare neurotossicità rispetto a chi non presenta questa caratteristica.

Visualizzazione Grafica: Forest Plot

# Preparare dati per il grafico
risultati$Variabile_ord <- factor(risultati$Variabile, 
                                  levels = rev(risultati$Variabile))

# Creare forest plot
ggplot(risultati, aes(x = Odds_Ratio, y = Variabile_ord)) +
  geom_vline(xintercept = 1, linetype = "dashed", color = "red", size = 0.8) +
  geom_errorbarh(aes(xmin = OR_CI_Low, xmax = OR_CI_High, 
                     color = Significatività), height = 0.3, size = 1) +
  geom_point(aes(color = Significatività), size = 4) +
  scale_color_manual(values = c("***" = "#d62728", "**" = "#ff7f0e", 
                                "*" = "#2ca02c", "ns" = "gray60")) +
  scale_x_log10(breaks = c(0.1, 0.5, 1, 2, 5, 10, 20, 30)) +
  labs(title = "Forest Plot: Odds Ratio per Neurotossicità",
       subtitle = "Con Intervalli di Confidenza al 95%",
       x = "Odds Ratio (scala logaritmica)",
       y = "",
       color = "Significatività statistica") +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(size = 12, color = "gray40"),
    legend.position = "bottom",
    panel.grid.major.y = element_line(color = "gray90"),
    panel.grid.minor = element_blank()
  ) +
  annotate("text", x = 0.15, y = 0.5, label = "Protettivo", 
           color = "blue", size = 3.5, fontface = "italic") +
  annotate("text", x = 20, y = 0.5, label = "Rischio", 
           color = "red", size = 3.5, fontface = "italic")

La linea rossa verticale rappresenta OR = 1 (nessun effetto). I valori a destra indicano fattori di rischio, quelli a sinistra fattori protettivi.


Confronto tra le Prevalenze

# Preparare dati per grafico a barre
dati_long <- data.frame(
  Variabile = rep(risultati$Variabile, 2),
  Gruppo = rep(c("Con Neurotossicità", "Senza Neurotossicità"), each = nrow(risultati)),
  Prevalenza = c(risultati$Prev_Neurotox, risultati$Prev_Non_Neurotox)
)

# Riordinare per differenza
ordine <- risultati$Variabile[order(risultati$Prev_Neurotox - risultati$Prev_Non_Neurotox, 
                                     decreasing = TRUE)]
dati_long$Variabile <- factor(dati_long$Variabile, levels = ordine)

ggplot(dati_long, aes(x = Variabile, y = Prevalenza, fill = Gruppo)) +
  geom_bar(stat = "identity", position = "dodge") +
  scale_fill_manual(values = c("Con Neurotossicità" = "#d62728", 
                               "Senza Neurotossicità" = "#1f77b4")) +
  coord_flip() +
  labs(title = "Confronto delle Prevalenze tra i Due Gruppi",
       x = "",
       y = "Prevalenza (%)",
       fill = "") +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 16),
    legend.position = "bottom",
    panel.grid.major.y = element_blank()
  ) +
  geom_text(aes(label = paste0(Prevalenza, "%")), 
            position = position_dodge(width = 0.9), 
            hjust = -0.1, size = 3)


Sintesi dei Risultati

Top 3 Fattori di Rischio

top3 <- head(risultati[risultati$Odds_Ratio > 1, ], 3)
kable(top3[, c("Variabile", "Odds_Ratio", "p_value")],
      caption = "I 3 fattori di rischio più forti per neurotossicità",
      row.names = FALSE,
      col.names = c("Variabile", "Odds Ratio", "p-value"))
I 3 fattori di rischio più forti per neurotossicità
Variabile Odds Ratio p-value
AUMENTO D-DIMERO 5.86 0
SINTOMI SISTEMICI 10.28 0
GSS ≥ 2 7.14 0

Conclusioni Cliniche

cat("\n### Fattori Fortemente Associati a Neurotossicità:\n\n")

Fattori Fortemente Associati a Neurotossicità:

fattori_forti <- risultati[risultati$p_value < 0.01 & risultati$Odds_Ratio > 1, ]

for(i in 1:nrow(fattori_forti)) {
  cat(i, ". **", fattori_forti$Variabile[i], "** (OR = ", 
      fattori_forti$Odds_Ratio[i], ", p ", 
      ifelse(fattori_forti$p_value[i] < 0.001, "< 0.001", 
             paste("=", fattori_forti$p_value[i])), ")\n")
}

1 . ** AUMENTO D-DIMERO ** (OR = 5.86 , p < 0.001 ) 2 . ** SINTOMI SISTEMICI ** (OR = 10.28 , p < 0.001 ) 3 . ** GSS ≥ 2 ** (OR = 7.14 , p < 0.001 ) 4 . ** IPOTENSIONE, SHOCK ** (OR = 24.28 , p < 0.001 ) 5 . ** LEUCOCITOSI ** (OR = 3.99 , p < 0.001 )

cat("\n### Interpretazione Complessiva:\n\n")

Interpretazione Complessiva:

cat("L'analisi univariata ha identificato ", nrow(fattori_sig), 
    " variabili significativamente associate alla neurotossicità.\n\n")

L’analisi univariata ha identificato 5 variabili significativamente associate alla neurotossicità.

if(nrow(fattori_forti) > 0) {
  cat("I fattori più fortemente predittivi sono:\n\n")
  for(i in 1:min(3, nrow(fattori_forti))) {
    cat("- **", fattori_forti$Variabile[i], "**: aumenta il rischio di ", 
        round((fattori_forti$Odds_Ratio[i] - 1) * 100, 0), "%\n")
  }
}

I fattori più fortemente predittivi sono:

  • ** AUMENTO D-DIMERO **: aumenta il rischio di 486 %
  • ** SINTOMI SISTEMICI **: aumenta il rischio di 928 %
  • ** GSS ≥ 2 **: aumenta il rischio di 614 %
cat("\n### Raccomandazioni:\n\n")

Raccomandazioni:

cat("1. Monitorare attentamente i pazienti con i fattori di rischio identificati\n")
  1. Monitorare attentamente i pazienti con i fattori di rischio identificati
cat("2. Considerare strategie preventive per i pazienti ad alto rischio\n")
  1. Considerare strategie preventive per i pazienti ad alto rischio
cat("3. Valutare analisi multivariata per identificare predittori indipendenti\n")
  1. Valutare analisi multivariata per identificare predittori indipendenti

Note Metodologiche

Test Statistici Utilizzati

  • Test esatto di Fisher: utilizzato per valutare l’associazione tra ciascuna variabile e la neurotossicità
  • Odds Ratio (OR): misura la forza dell’associazione
  • Intervalli di Confidenza al 95%: indicano la precisione della stima dell’OR

Limiti dell’Analisi

  1. Analisi univariata: ogni variabile è analizzata indipendentemente, senza controllo per confondenti
  2. Dimensione campionaria: il gruppo con neurotossicità è relativamente piccolo (n=41)
  3. Mancanza di dati longitudinali: non è possibile stabilire relazioni causa-effetto

Sviluppi Futuri

Per un’analisi più robusta, si raccomanda:

  • Regressione logistica multivariata per identificare predittori indipendenti
  • Analisi di sensibilità per valutare la robustezza dei risultati
  • Validazione esterna su una coorte indipendente

Informazioni di Sessione

sessionInfo()
## R version 4.4.1 (2024-06-14)
## Platform: x86_64-apple-darwin20
## Running under: macOS 15.7.1
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.4-x86_64/Resources/lib/libRblas.0.dylib 
## LAPACK: /Library/Frameworks/R.framework/Versions/4.4-x86_64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.0
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## time zone: Europe/Rome
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] knitr_1.50    ggplot2_4.0.0 dplyr_1.1.4  
## 
## loaded via a namespace (and not attached):
##  [1] vctrs_0.6.5        cli_3.6.5          rlang_1.1.6        xfun_0.53         
##  [5] generics_0.1.4     S7_0.2.0           jsonlite_2.0.0     labeling_0.4.3    
##  [9] glue_1.8.0         htmltools_0.5.8.1  sass_0.4.10        scales_1.4.0      
## [13] rmarkdown_2.29     grid_4.4.1         evaluate_1.0.5     jquerylib_0.1.4   
## [17] tibble_3.3.0       fastmap_1.2.0      yaml_2.3.10        lifecycle_1.0.4   
## [21] compiler_4.4.1     RColorBrewer_1.1-3 pkgconfig_2.0.3    rstudioapi_0.17.1 
## [25] farver_2.1.2       digest_0.6.37      R6_2.6.1           tidyselect_1.2.1  
## [29] pillar_1.11.1      magrittr_2.0.4     bslib_0.9.0        withr_3.0.2       
## [33] gtable_0.3.6       tools_4.4.1        cachem_1.1.0

Data analisi: 2025-11-11
Versione R: R version 4.4.1 (2024-06-14)