Forkert charttype giver misvisende konklusioner. En infektionsrate visualiseret som i-chart (individuelle målinger) ignorerer at varians afhænger af antal patienter i nævneren. En andelsmåling (proportion) i en c-chart antager at maximum er uendeligt — hvilket aldrig er sandt for proportioner ≤ 1.
Denne vignette mapper kliniske spørgsmål til charttyper og giver beslutningsregler.
Hvad måler du?
│
├── Tællinger (counts)
│ │
│ ├── Konstant areal/eksponering (fx fald per måned, alle samme afdeling)?
│ │ → c-chart (Poisson, tællinger med konstant forventning)
│ │
│ └── Varierende eksponering (fald per 1000 patientdage)?
│ → u-chart (Poisson, rate per eksponering)
│
├── Proportioner (events / total)
│ │
│ ├── Klassisk binomial (fx genindlæggelser / udskrivninger)?
│ │ → p-chart
│ │
│ ├── Procent på y-akse (præsentation i %)?
│ │ → pp-chart (Laney p', overdispersion-korrigeret)
│ │
│ └── Rate i procent (sygefravær % af planlagt tid)?
│ → up-chart (Laney u')
│
├── Kontinuerte målinger
│ │
│ ├── Subgrouped data (fx 5 målinger per dag)?
│ │ → xbar-chart (mean) + s-chart (variation)
│ │
│ ├── Individuelle målinger (én måling per periode)?
│ │ ├── Fast nævner (eller ingen nævner)?
│ │ │ → i-chart + mr-chart (moving range)
│ │ └── Varierende nævner (y/n ratio, fx tid per patient)?
│ │ → ip-chart (I-prime, individuelle målinger med varierende nævner)
│ │
│ └── For lille n eller ikke-normal fordeling?
│ → run-chart (kun centerlinje, ingen kontrolgrænser)
│
└── Tid eller antal mellem hændelser
│
├── Tid mellem (dage mellem fald)?
│ → t-chart (Nelson-transformation for skæv fordeling)
│
└── Antal mellem (vagter siden sidste fejl)?
→ g-chart (geometrisk fordeling)
p — proportion (binomial)Klassisk: p = events / total. Bruges når data er binær
per observation (fx infektion ja/nej for hver patient) og du vil måle
andelen.
library(BFHcharts)
# 12 måneder, infektioner per 1000 udskrivninger
data <- data.frame(
month = seq(as.Date("2024-01-01"), by = "month", length.out = 12),
infections = c(15, 18, 12, 14, 16, 13, 11, 9, 10, 8, 7, 6),
discharges = c(950, 1020, 980, 1050, 1010, 990, 970, 1030, 1000, 985, 995, 1015)
)
bfh_qic(data,
x = month, y = infections, n = discharges,
chart_type = "p",
y_axis_unit = "percent",
chart_title = "Infektionsrate"
)
#> Warning in doTryCatch(return(expr), name, parentenv, handler): [FONT_FALLBACK]
#> Font 'sans' ikke registreret på systemet - bruger 'sans'Krav: n (denominator) skal være
ikke-NULL og positiv. events <= n for hver række.
u — rate per eksponering (Poisson)Bruges når events tælles per “eksponeringsenhed” (patientdage,
vagter, behandlinger). I modsætning til p har
u ikke et øvre bound (rates kan i princippet overstige
1).
c — konstant-eksponering tællingerBruges når eksponering er praktisk konstant (samme afdeling, samme periodelængde). Simpler end u-chart men kræver konstans-antagelsen.
i — individuelle kontinuerte målingerFor målinger hvor du har én værdi per periode (fx daglig ventetid).
Brug altid sammen med mr-chart for at se
variation mellem konsekutive målinger.
ip — I-prime chart (individuelle målinger med
varierende nævner)Bruges når din y-variabel er et ratio (y/n) og
nævneren varierer fra periode til periode — fx tid per patient,
ressourceforbrug per indlæggelse. I-prime justerer kontrolgrænserne for
den varierende nævner på samme måde som Laney-korrektionen gør for
pp og up.
# Gennemsnitlig liggetid per indlæggelse (dage / indlæggelser)
bfh_qic(data,
x = month, y = stay_days, n = admissions,
chart_type = "ip",
y_axis_unit = "rate",
chart_title = "Gennemsnitlig liggetid"
)Krav: n (nævner) skal angives. Kræver
pbcharts-pakken under Suggests.
xbar + s — subgrouped kontinuerte
dataNår hver periode har flere målinger (fx 5 patienter målt per dag).
xbar viser gennemsnit, s viser within-group
variation. Kraftigt par når subgroup-størrelsen er stabil.
run — for lille n eller ikke-normalitetHvis du har <12 datapunkter, eller fordelingen er kraftigt skæv, er kontrolgrænser upålidelige. Run-chart giver kun centerlinje + Anhøj-regler — fang systematiske ændringer uden fejlagtig falsk-positiv.
t og g — tid/antal mellem hændelserTil sjældne events. t (dage mellem) bruger
Nelson-transformation for at håndtere skæv eksponentiel fordeling.
g (count mellem) for diskret tælling.
| Mønster | Problem |
|---|---|
Bruge i til andele |
Ignorerer denominator → forkerte kontrolgrænser |
Bruge c til varierende eksponering |
Antager konstant baseline → falske signaler |
| Skifte chart-type efter at have set data | Bias (cherry-picking) — bestem på forhånd |
| Genberegne baseline efter intervention | Brug freeze til at låse pre-intervention CL |
| <12 datapunkter med kontrolgrænser | Brug run indtil du har ≥12-15 punkter |
| Chart-type | Minimum n | Anbefalet n |
|---|---|---|
p, u |
8 | 20+ med n_i > 10 |
c |
8 | 20+ med c_bar > 5 |
i, mr |
12 | 20+ |
xbar, s |
8 subgroups | 20+ subgroups, n_i ≥ 4 |
t, g |
8 events | 25+ events |
run |
8 | 12+ |
vignette("phases-and-freeze") — håndtér interventioner
og baselinevignette("targets-and-percent") — target-værdi og
procent-akser?bfh_qic — fuld parameter-dokumentation