(Acest articol a fost publicat pentru prima dată pe Blog Hoxo-Mși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
1. Prezentare generală
În analiza datelor, atunci când o metrică diferă între două grupuri, dorim uneori să investigăm dacă un anumit subgrup conduce această diferență. De exemplu, atunci când este detectată o declin cheie cheie în comparație cu anul precedent, poate doriți să efectuați o analiză mai detaliată. În această analiză, vă puteți concentra pe gen printre atribute și puteți examina dacă declinul a avut loc în rândul bărbatului, femeii sau ambele. Cu toate acestea, acest tip de analiză este dificil atunci când metrica este o rată, deoarece amploarea contribuției fiecărui subgrup la rată nu poate fi calculată pur și simplu, spre deosebire de cazul valorilor de volum.
Pentru a aborda această problemă, propunem o abordare inspirată de povestea Nava de Teseu. Această abordare implică înlocuirea treptată a componentelor unui grup cu cele ale altuia, recalculând metrica la fiecare etapă. Modificarea metricii la fiecare etapă poate fi apoi interpretată ca contribuția fiecărui subgrup la diferența generală.
De exemplu, să presupunem că metrica a fost de 6,2% în 2024 și a scăzut la 5,2% în 2025. Din nou, ne concentrăm pe sex. Înlocuim datele masculine din setul de date 2024 cu datele masculine din 2025 și recalculăm metrica. Drept urmare, metrica ar scădea cu 0,8 puncte procentuale, ajungând la 5,4%. În acest caz, contribuția grupului masculin la modificarea metricii este de -0,8 puncte procentuale. În continuare, înlocuim datele feminine din 2024 cu cele din 2025. Setul de date constă în întregime din 2025 de date, iar metrica scade cu 0,2 puncte procentuale, ajungând la 5,2%. Astfel, contribuția grupului feminin este de -0,2 puncte procentuale.
Când sunt vizualizate, rezultatele apar după cum urmează:

Din acest complot, putem vedea că declinul metricului este condus în primul rând de grupul masculin. Numim această vizualizare „complotul Therus”.
TheSUSPLOT Pachetul este conceput pentru a facilita generarea de comploturi.
2. Instalare
Puteți instala TheSUSPLOT Pachet de la Cran.
install.packages("TheseusPlot")
remotes::install_github("hoxo-m/TheseusPlot")
3. Detalii
3.1 Pregătiți date
Pentru a crea comploturi.
Folosim datele de zbor din New York City 2013 de la NYCFLILS13 ca set de date demo. Aici, vom defini metrica ratei ca proporția de zboruri care au ajuns la timp. În decembrie 2013, rata de sosire la timp a scăzut substanțial comparativ cu noiembrie. Cercetăm cauza folosind un complot.
În primul rând, creăm un on_time Coloana din cadrul de date pentru a indica dacă fiecare zbor a sosit la timp. În continuare, extragem zborurile pentru noiembrie și decembrie în cadre de date separate pentru a forma două grupuri de comparație. Rata de sosire la timp a fost de 64% în noiembrie și a scăzut la 47% în decembrie.
library(dplyr) library(nycflights13) data <- flights |> filter(!is.na(arr_delay)) |> mutate(on_time = arr_delay <= 0) |> # Arrived on time left_join(airlines, by = "carrier") |> mutate(carrier = name) |> # Convert carrier abbreviations to full names select(year, month, day, origin, dest, carrier, dep_delay, on_time) data |> head() #> # A tibble: 6 × 8 #> year month day origin dest carrier dep_delay on_time #>#> 1 2013 1 1 EWR IAH United Air Lines Inc. 2 FALSE #> 2 2013 1 1 LGA IAH United Air Lines Inc. 4 FALSE #> 3 2013 1 1 JFK MIA American Airlines Inc. 2 FALSE #> 4 2013 1 1 JFK BQN JetBlue Airways -1 TRUE #> 5 2013 1 1 LGA ATL Delta Air Lines Inc. -6 TRUE #> 6 2013 1 1 EWR ORD United Air Lines Inc. -4 FALSE data_Nov <- data |> filter(month == 11) data_Dec <- data |> filter(month == 12) data_Nov |> summarise(on_time_rate = mean(on_time)) |> pull(on_time_rate) #> (1) 0.6426161 data_Dec |> summarise(on_time_rate = mean(on_time)) |> pull(on_time_rate) #> (1) 0.4672835
3.2 Bazele
Folosind cele două cadre de date pregătite, creăm mai întâi un ship obiect. ship Obiectul este o instanță a clasei R6 ShipOfTheseusconceput pentru a crea comploturi.
library(TheseusPlot)
ship <- create_ship(data_Nov, data_Dec, y = on_time, labels = c("November", "December"))
Puteți crea un complot. plot Metoda a ship obiect. De exemplu, pentru a crea un complot ThESEU pentru aeroportul de origine:
ship$plot(origin)


New York City are trei aeroporturi majore, iar Aeroportul Internațional Newark Liberty (EWR) a reprezentat cea mai mare pondere a scăderii ratei de sosire la timp.
Rețineți că numărul de zboruri la fiecare aeroport contează, deoarece un volum de zbor mai mare este de așteptat să aibă un impact mai mare. Pentru a face acest lucru clar, complotul Theus afișează dimensiunea datelor pentru fiecare grup din fiecare subgrup ca grafic de bare. Din aceasta, vedem că numărul de zboruri este similar pe aeroporturi, permițând compararea directă a contribuțiilor.
În rezumat, un complot ThESEU este format din două componente:
- Un complot de cascadă care arată cât de mult a contribuit fiecare subgrup la modificarea metricii.
- Un grafic de bare reprezentând dimensiunea eșantionului pentru fiecare grup din fiecare subgrup.
O ship Obiectul oferă, de asemenea, The table Metodă pentru a inspecta valorile exacte utilizate în complotul.
ship$table(origin) #> # A tibble: 3 × 8 #> origin contrib n1 n2 x1 x2 rate1 rate2 #>#> 1 EWR -0.0831 9603 9410 6251 3901 0.651 0.415 #> 2 JFK -0.0565 8645 8923 5702 4332 0.660 0.485 #> 3 LGA -0.0358 8723 8687 5379 4393 0.617 0.506
3.3 Răsfoirea complotului
Atunci când există multe subgrupuri, un complot ThESEU poate deveni greu de citit. În astfel de cazuri, puteți schimba axele X și Y pentru o mai bună vizualizare.
ship$plot_flip(carrier)


Când numărul de subgrupuri este mare, cei cu contribuții mici sunt grupate automat împreună. În mod implicit, acest lucru se întâmplă atunci când există mai mult de 10 subgrupuri, dar pragul poate fi ajustat cu n argument.
ship$plot_flip(carrier, n = 5)


Din acest complot, JetBlue Airways și United Air Lines par să aibă cele mai mari contribuții la scăderea ratei de sosire la timp.
3.4 Discretizarea automată a valorilor continue
Ploturile seus nu acceptă în mod direct variabilele continue. Dacă este furnizată o coloană continuă, aceasta este discretizată automat. De exemplu, putem crea un complot ThESEU pentru întârzieri de plecare.
ship$plot_flip(dep_delay)


În mod implicit, variabilele continue sunt discretizate astfel încât fiecare subgrup are dimensiuni de eșantion aproximativ egale, cu numărul de pubele setate la 10. Puteți modifica aceste setări trecând valoarea de retur continuous_config() la continuous argument.
ship$plot_flip(dep_delay, continuous = continuous_config(n = 5))


Acest rezultat arată că atât o scădere a plecărilor la timp, cât și o creștere a plecărilor întârziate au contribuit la scăderea ratei de sosire la timp.
