1 Preparazione e pulizia dei dati

Questa sezione descrive in dettaglio tutti i passaggi di preprocessing applicati al dataset grezzo prima di procedere con le analisi. La standardizzazione è necessaria perché i dati sono stati raccolti in forma testuale libera, con frequenti varianti ortografiche, abbreviazioni e voci non uniformi.

1.1 Import e pulizia di base

dati <- read_excel("JACOPO.xlsx")
dati <- clean_names(dati)
dati <- dati %>%
  mutate(across(where(is.character), str_trim)) %>%
  mutate(across(where(is.character), str_to_lower))

# Import secondo dataset per età e durata ricovero
dati2 <- read_excel("DB DEF 2.xlsx")
# NON applichiamo clean_names: manteniamo i nomi originali del file

# Estrai le colonne di interesse dal secondo dataset
eta_col    <- dati2[["Età"]]
durata_col <- dati2[["DURARA DEL RICOVERO"]]

# Converti durata in numerico (rimuovi "gg" se presente)
durata_num <- as.numeric(str_remove(as.character(durata_col), "gg"))
eta_num    <- suppressWarnings(as.numeric(as.character(eta_col)))

Le operazioni di base garantiscono che varianti come "Maschio", "MASCHIO" o " maschio " vengano trattate come un’unica categoria coerente nei passi successivi.

1.2 Standardizzazione della variabile Sesso

dati$sesso <- case_when(
  dati$sesso %in% c("m", "maschio") ~ "Maschio",
  dati$sesso %in% c("f", "femmina") ~ "Femmina",
  TRUE ~ dati$sesso
)

1.3 Standardizzazione della variabile Diagnosi

dati$diagnosi <- case_when(
  str_detect(dati$diagnosi, "super") ~ "Superficiale",
  dati$diagnosi == "suo"             ~ "Superficiale",
  str_detect(dati$diagnosi, "prof")  ~ "Profonda",
  TRUE ~ dati$diagnosi
)

1.4 Standardizzazione della variabile VAC

dati$vac <- ifelse(
  tolower(as.character(dati$vac)) %in% c("si", "so", "vac"),
  "si", "no"
)
dati$vac <- factor(dati$vac, levels = c("no", "si"))

1.5 Standardizzazione dei germi isolati

dati$germe_isolato <- case_when(
  str_detect(dati$germe_isolato, "non isol|negat") ~ "non isolato",
  str_detect(dati$germe_isolato,
    "s\\.?\\s*aureus|saures|s\\.aureus|s.aures")   ~ "s. aureus",
  str_detect(dati$germe_isolato, "epidermidis")     ~ "s. epidermidis",
  str_detect(dati$germe_isolato, "hominis")         ~ "s. hominis",
  str_detect(dati$germe_isolato, "pseud|psud")      ~ "pseudomonas",
  str_detect(dati$germe_isolato, "kleb")            ~ "klebsiella",
  str_detect(dati$germe_isolato, "coli")            ~ "e. coli",
  str_detect(dati$germe_isolato, "mrse")            ~ "mrse",
  str_detect(dati$germe_isolato, "mssa")            ~ "mssa",
  str_detect(dati$germe_isolato, "cory")            ~ "corynebacterium",
  str_detect(dati$germe_isolato,
    "acnes|propionibacterium|cutibacterium")        ~ "cutibacterium acnes",
  str_detect(dati$germe_isolato, "faecalis")        ~ "e. faecalis",
  str_detect(dati$germe_isolato, "cloacae")         ~ "e. cloacae",
  str_detect(dati$germe_isolato, "m\\. morganii")   ~ "m. morganii",
  str_detect(dati$germe_isolato, "albicans")        ~ "c. albicans",
  TRUE ~ dati$germe_isolato
)

dati_long <- dati %>%
  mutate(id = row_number()) %>%
  separate_rows(germe_isolato, sep = ",") %>%
  mutate(germe_isolato = str_trim(germe_isolato)) %>%
  filter(germe_isolato != "", !is.na(germe_isolato))

dati_long$germe_isolato[
  dati_long$germe_isolato %in% c("mssa+", "mssa +")
] <- "mssa"

1.6 Standardizzazione delle emocolture

dati$emocolture <- tolower(as.character(dati$emocolture))
dati$emocolture <- str_trim(dati$emocolture)

dati$emocolture <- case_when(
  str_detect(dati$emocolture, "negat|negait") ~ "negativo",
  str_detect(dati$emocolture, "non eseg")     ~ "non eseguito",
  TRUE ~ dati$emocolture
)

dati_emocolture <- dati %>%
  mutate(id = row_number()) %>%
  separate_rows(emocolture, sep = ",") %>%
  mutate(emocolture = str_trim(emocolture)) %>%
  filter(emocolture != "", !is.na(emocolture))

dati_emocolture$emocolture <- case_when(
  str_detect(dati_emocolture$emocolture, "negative")    ~ "negativo",
  str_detect(dati_emocolture$emocolture, "non eseg")    ~ "non eseguito",
  str_detect(dati_emocolture$emocolture,
    "s\\.?\\s*aureus|saures|s.aures")                   ~ "s. aureus",
  str_detect(dati_emocolture$emocolture, "epidermidis") ~ "s. epidermidis",
  str_detect(dati_emocolture$emocolture, "hominis")     ~ "s. hominis",
  str_detect(dati_emocolture$emocolture, "haemofilus")  ~ "s. haemophilus",
  str_detect(dati_emocolture$emocolture, "coli")        ~ "e. coli",
  str_detect(dati_emocolture$emocolture, "cloacae")     ~ "e. cloacae",
  str_detect(dati_emocolture$emocolture, "kleb")        ~ "klebsiella",
  str_detect(dati_emocolture$emocolture, "serratia")    ~ "serratia marcescens",
  str_detect(dati_emocolture$emocolture, "mrse")        ~ "mrse",
  str_detect(dati_emocolture$emocolture, "mssa")        ~ "mssa",
  str_detect(dati_emocolture$emocolture, "albicans")    ~ "c. albicans",
  str_detect(dati_emocolture$emocolture, "aspergillus") ~ "aspergillus",
  str_detect(dati_emocolture$emocolture, "bacteroides") ~ "bacteroides fragilis",
  TRUE ~ dati_emocolture$emocolture
)

1.7 Standardizzazione delle biopsie e tamponi

dati$biopsie_tamponi <- tolower(as.character(dati$biopsie_tamponi))
dati$biopsie_tamponi <- str_trim(dati$biopsie_tamponi)

dati$biopsie_tamponi <- case_when(
  str_detect(dati$biopsie_tamponi, "negat")             ~ "negativo",
  str_detect(dati$biopsie_tamponi,
    "s\\.?\\s*aureus|saures")                           ~ "s. aureus",
  str_detect(dati$biopsie_tamponi, "epidermidis")       ~ "s. epidermidis",
  str_detect(dati$biopsie_tamponi, "hominis")           ~ "s. hominis",
  str_detect(dati$biopsie_tamponi, "capitis")           ~ "s. capitis",
  str_detect(dati$biopsie_tamponi, "lugdunensis")       ~ "s. lugdunensis",
  str_detect(dati$biopsie_tamponi, "pseud")             ~ "pseudomonas",
  str_detect(dati$biopsie_tamponi, "kleb")              ~ "klebsiella",
  str_detect(dati$biopsie_tamponi, "coli")              ~ "e. coli",
  str_detect(dati$biopsie_tamponi, "cloacae")           ~ "e. cloacae",
  str_detect(dati$biopsie_tamponi, "faecalis")          ~ "e. faecalis",
  str_detect(dati$biopsie_tamponi, "serratia")          ~ "serratia marcescens",
  str_detect(dati$biopsie_tamponi, "proteus")           ~ "proteus mirabilis",
  str_detect(dati$biopsie_tamponi, "bacteroides")       ~ "bacteroides fragilis",
  str_detect(dati$biopsie_tamponi, "mrse")              ~ "mrse",
  str_detect(dati$biopsie_tamponi, "mssa")              ~ "mssa",
  str_detect(dati$biopsie_tamponi, "albicans")          ~ "c. albicans",
  str_detect(dati$biopsie_tamponi, "aspergillus")       ~ "aspergillus",
  str_detect(dati$biopsie_tamponi, "cory")              ~ "corynebacterium",
  str_detect(dati$biopsie_tamponi,
    "propionibacterium|cutibacterium")                  ~ "cutibacterium acnes",
  TRUE ~ dati$biopsie_tamponi
)

dati_bio_long <- dati %>%
  mutate(id = row_number()) %>%
  separate_rows(biopsie_tamponi, sep = ",") %>%
  mutate(biopsie_tamponi = str_trim(biopsie_tamponi)) %>%
  filter(biopsie_tamponi != "", !is.na(biopsie_tamponi))

1.8 Standardizzazione degli antibiotici

dati$abt <- tolower(as.character(dati$abt))
dati$abt <- str_replace_all(dati$abt, ";", ",")
dati$abt <- str_trim(dati$abt)

dati$abt <- case_when(
  str_detect(dati$abt, "no$|nessuno|non")     ~ "no terapia",
  str_detect(dati$abt, "augmentin|amoxiclav") ~ "augmentin",
  str_detect(dati$abt, "vancomicina|vanco")   ~ "vancomicina",
  str_detect(dati$abt, "daptomicina")         ~ "daptomicina",
  str_detect(dati$abt, "linezolid")           ~ "linezolid",
  str_detect(dati$abt, "piptazo|pip[t]?azo|tazocin") ~ "piperacillina/tazobactam",
  str_detect(dati$abt, "meropenem|merop")     ~ "meropenem",
  str_detect(dati$abt, "cefepime")            ~ "cefepime",
  str_detect(dati$abt, "ceftazidime")         ~ "ceftazidime",
  str_detect(dati$abt, "ceftriaxone")         ~ "ceftriaxone",
  str_detect(dati$abt, "cefazolina")          ~ "cefazolina",
  str_detect(dati$abt, "cipro")               ~ "ciprofloxacina",
  str_detect(dati$abt, "levoflox")            ~ "levofloxacina",
  str_detect(dati$abt, "rifamp")              ~ "rifampicina",
  str_detect(dati$abt, "cotrim|bactrim")      ~ "cotrimossazolo",
  str_detect(dati$abt,
    "fluconazolo|voriconazolo|caspofungina|anidulafungina|amfotericina") ~ "antifungino",
  TRUE ~ dati$abt
)

dati_abt_long <- dati %>%
  mutate(id = row_number()) %>%
  separate_rows(abt, sep = ",") %>%
  mutate(abt = str_trim(abt)) %>%
  filter(!is.na(abt), abt != "")

1.9 Correzione valori mancanti nelle variabili cliniche

dati$deceduto[is.na(dati$deceduto)] <- "no"
dati$valutazione_da_ch_plastici[
  is.na(dati$valutazione_da_ch_plastici)
] <- "no"

2 Statistiche descrittive

2.1 Summary delle variabili categoriche e continue

Distribuzione delle variabili clinico-demografiche
Variabile Categoria N %
Diagnosi Superficiale 65 70.7%
Profonda 27 29.3%
La VAC si 67 72.8%
no 25 27.2%
Consulenza Ch. Plastico no 77 83.7%
valutazione 9 9.8%
lembo 5 5.4%
vac domicilio 1 1.1%
Durata ricovero media 35.7 gg, mediana 28 gg, range 4–155 gg 86
Sesso Maschio 61 66.3%
Femmina 31 33.7%
Età (anni) media 62 aa, mediana 65 aa, range 1–81 aa 84
Febbre si 50 54.3%
no 42 45.7%
Deceduto no 76 82.6%
si 16 17.4%

Commento: Il campione è composto da 92 pazienti (61 maschi, 66.3%; 31 femmine, 33.7%). La diagnosi prevalente è l’infezione superficiale (65 pazienti, 70.7%), mentre quella profonda riguarda il 29.3% dei casi. La febbre è presente in poco più della metà dei pazienti (54.3%). La VAC è utilizzata nella grande maggioranza dei casi (72.8%), confermando il suo ruolo centrale nella gestione locale. La mortalità in-hospital si attesta al 17.4% (16 pazienti), un valore clinicamente rilevante che giustifica analisi di outcome stratificate. La consulenza del chirurgo plastico è richiesta nel 16.3% dei casi, con modalità diverse (valutazione, lembo, VAC domicilio).

3 Analisi microbiologica

3.1 Top 5 germi isolati (tutti i campioni)

Top 5 germi isolati — tutti i campioni
Germe N %
non isolato 24 38.7%
  1. epidermidis
12 19.4%
klebsiella 10 16.1%
  1. aureus
9 14.5%
pseudomonas 7 11.3%

Commento: Il germe più frequentemente isolato è S. aureus (n = 24, 34.3%), seguito da S. epidermidis (n = 12, 17.1%) e MSSA (n = 9, 12.9%). Il profilo è dominato dai cocchi Gram-positivi (stafilococchi), coerentemente con la natura delle infezioni di ferite chirurgiche e tessuti molli. La presenza di MRSE (n = 10) tra i primi isolati segnala una quota non trascurabile di ceppi resistenti alla meticillina, con implicazioni dirette sulla scelta antibiotica.


3.2 Top 5 emocolture più frequenti

Top 5 risultati delle emocolture
Risultato N %
negativo 56 72.7%
mrse 6 7.8%
klebsiella 5 6.5%
mssa 5 6.5%
  1. aureus
5 6.5%

Commento: Le emocolture risultano negative nella grande maggioranza dei casi (n = 56, primo posto in assoluto), mentre una quota importante non è stata eseguita (n = 5). Questo è coerente con un quadro clinico prevalentemente localizzato, senza diffusione sistemica documentata. Tuttavia, la batteriemia da S. aureus (n = 5) e S. epidermidis (n = 3–4) rappresenta un sottoinsieme ad alto rischio, in cui l’emocoltura ha permesso di identificare il patogeno e guidare la terapia. La percentuale di emocolture non eseguite suggerisce spazio di miglioramento nel percorso diagnostico.


3.3 Top 5 germi da biopsie e tamponi

Top 5 germi isolati da biopsie e tamponi
Germe N %
  1. epidermidis
22 32.4%
negativo 21 30.9%
klebsiella 11 16.2%
pseudomonas 7 10.3%
  1. aureus
7 10.3%

Commento: Anche nelle biopsie e nei tamponi la specie più isolata è S. aureus (n = 22), seguita da S. epidermidis (n = 22 a pari merito) e MSSA (n = 21). La concordanza con il profilo degli isolati principali rafforza l’affidabilità microbiologica di entrambe le tipologie di campionamento. La presenza di Klebsiella (n = 11) e Pseudomonas (n = 7) tra i più frequenti segnala un’ecologia polimicrobica in una minoranza di pazienti, con potenziali implicazioni di resistenza (ESBL, MBL) da valutare sul singolo antibiogramma.


3.4 Heatmap microbiologica

Nota metodologica sulla scala colore: I numeri nelle celle sono sempre frequenze assolute reali (es. 56 emocolture negative, 24 isolamenti di S. aureus). Il colore delle celle usa la scala logaritmica log₁(n+1): questo è necessario perché senza trasformazione i valori dominanti (es. 56) saturerebbero il gradiente rendendo indistinguibili tutti gli altri. La legenda mostra i valori originali (1, 5, 10, 25, 50) in corrispondenza dei colori, così la lettura rimane intuitiva.

Commento: La heatmap mostra con chiarezza che le emocolture negative dominano largamente il campione ematologico (56 casi, colore giallo-arancio), confermando che la batteriemia franca è l’eccezione. S. aureus e S. epidermidis sono i soli germi con isolamenti consistenti in tutti e tre i siti di campionamento, suggerendo una vera polimicrobicità solo in sottogruppi limitati. Le biopsie e i tamponi risultano il metodo con il maggior numero di isolamenti positivi differenti, confermando la loro superiore sensibilità diagnostica per le infezioni localizzate.


3.5 Top 5 antibiotici utilizzati

Top 5 antibiotici più utilizzati
Antibiotico N %
vancomicina 44 58.7%
daptomicina 14 18.7%
augmentin 9 12%
linezolid 4 5.3%
meropenem 4 5.3%

Commento: La vancomicina è l’antibiotico più frequentemente impiegato, in linea con la predominanza di cocchi Gram-positivi e la presenza di ceppi resistenti (MRSE). Seguono la piperacillina/tazobactam e il meropenem, che coprono lo spettro per i Gram-negativi (Klebsiella, Pseudomonas, E. cloacae). La combinazione di questi dati con il profilo microbiologico suggerisce un approccio inizialmente empirico ad ampio spettro, con possibile de-escalation alla disponibilità dell’antibiogramma. La presenza di antifungini (C. albicans isolata in alcuni casi) giustifica l’impiego di questa categoria in pazienti selezionati.

4 Analisi clinica per tipo di diagnosi

4.1 La VAC per tipo di diagnosi

Utilizzo della VAC per tipo di diagnosi — N e %
VAC no
VAC sì
Diagnosi VAC no (N) VAC no (%) VAC sì (N) VAC sì (%)
Profonda 11 40.7 16 59.3
Superficiale 14 21.5 51 78.5

Commento: Dai dati emerge che la VAC è utilizzata in proporzione maggiore nelle infezioni superficiali (78.5%, n = 51) rispetto alle profonde (59.3%, n = 16). Questo dato, apparentemente controintuitivo, può riflettere la gestione locale delle ferite deiscenti e delle lesioni superficiali estese, in cui la VAC rappresenta una strategia efficace per promuovere la granulazione e ridurre la carica batterica. Nelle infezioni profonde, invece, la maggiore complessità chirurgica può richiedere interventi di debridement o ricostruzione che precedono o sostituiscono l’applicazione della VAC.


4.2 Valutazione chirurgica per tipo di diagnosi

Consulenza del chirurgo plastico per tipo di diagnosi
Diagnosi lembo.x No (N) vac domicilio.x valutazione.x lembo.y No (%) vac domicilio.y valutazione.y
Profonda 4 18 1 4 14.8 66.7 3.7 14.8
Superficiale 1 59 0 5 1.5 90.8 0.0 7.7

Commento: La consulenza del chirurgo plastico (16.3% del totale) è richiesta principalmente nelle infezioni profonde, dove la complessità della perdita di sostanza rende necessaria la pianificazione di lembi o di una gestione domiciliare con la VAC. La modalità prevalente è la semplice valutazione (n = 9), seguita dall’utilizzo di lembi (n = 5) e VAC domicilio (n = 1). La bassa frequenza complessiva suggerisce che la maggior parte dei casi viene gestita senza necessità di intervento plastico ricostruttivo.


4.3 Febbre per tipo di diagnosi

Presenza di febbre per tipo di diagnosi — N e %
Afebbrile
Febbre
Diagnosi No (N) No (%) Sì (N) Sì (%)
Profonda 9 33.3 18 66.7
Superficiale 33 50.8 32 49.2

Commento: La febbre è presente nel 54.3% dei pazienti complessivamente. Nelle infezioni profonde la proporzione di pazienti febbricitanti è più alta (66.7%, n = 18) rispetto alle superficiali (49.2%, n = 32), coerentemente con il maggiore coinvolgimento tissutale e il rischio di risposta infiammatoria sistemica. Questo dato supporta l’utilizzo della febbre come indicatore clinico di severità nell’orientamento diagnostico iniziale, in attesa del completamento microbiologico.


4.4 Mortalità per tipo di diagnosi

Mortalità in-hospital per tipo di diagnosi — N e %
Sopravvissuto
Deceduto
Diagnosi Vivo (N) Vivo (%) Deceduto (N) Deceduto (%)
Profonda 23 85.2 4 14.8
Superficiale 53 81.5 12 18.5

Commento: La mortalità complessiva è del 17.4% (n = 16). Dalla stratificazione per diagnosi emerge che le infezioni superficiali mostrano un numero assoluto di decessi maggiore (n = 12, 18.5%) rispetto alle profonde (n = 4, 14.8%), verosimilmente per il peso numerico maggiore di questo gruppo nel campione. Il tasso proporzionale di mortalità nelle forme profonde rimane comunque clinicamente rilevante. È importante sottolineare che la mortalità osservata potrebbe essere legata non solo all’infezione in sé, ma anche alle comorbidità di base (es. diabete, immunosoppressione, vasculopatia) che predispongono alle forme più gravi. Un’analisi multivariata potrebbe chiarire il peso relativo dei singoli fattori prognostici.

5 Note metodologiche

La raccolta dati è avvenuta in forma testuale libera, con frequenti varianti ortografiche e abbreviazioni. Tutti i passaggi di standardizzazione (descritti nella Sezione 1) sono stati eseguiti con funzioni tidyverse (case_when, str_detect, separate_rows) applicando regole gerarchiche deterministiche. I punti chiave del preprocessing sono:

  • Germi con isolamenti multipli: gestiti con separate_rows() per garantire il conteggio corretto a livello di singolo patogeno.
  • La VAC: binarizzata e convertita in fattore ordinato (no < si).
  • Età e durata del ricovero: estratte dal dataset secondario (DB DEF 2.xlsx), con conversione numerica della colonna durata (rimozione del suffisso “gg”) e calcolo di media, mediana e range.
  • Valori NA nelle variabili binarie (deceduto, consulenza): imputati come “no” per convenzione, interpretando l’assenza di registrazione come assenza dell’evento.
  • Scala logaritmica nella heatmap: applicata solo al colore (log₁(n+1)), non ai valori numerici nelle celle, che rimangono frequenze assolute reali.

I commenti interpretativi presentati in questo report sono da intendersi come traccia clinica: i valori specifici dovranno essere verificati sul dataset definitivo e, ove appropriato, corredati di test statistici (chi-quadro, Fisher, regressione logistica).


Report generato con R Markdown — 24/05/2026 15:15