COVID-19: Die aktuelle Lage mit Bildern aus Daten

Letzten Freitag habe ich mehrer Schlagzeilen in Zeitungen gelesen, die ungefähr so klangen: „So viele Patienten wie noch nie auf deutschen Intensivstationen.“ Das verwunderte mich etwas und machte mich neugierig.

Für mich ein Grund mal wieder R Studio aufzumachen, ein wenig mit Daten zu spielen, sie aufzubereiten und Grundlage für eigene Gedankengänge zu schaffen. Ich möchte die Ergebnisse meiner Spielerei hier teilen, so dass auch andere die freie zugänglichen Daten interpretieren und ihre Schlüsse daraus ziehen können.

Statt auf Basis der Daten Antworten zu geben, möchte ich eher die Fragen stellen, die sich bei mir beim Betrachten der Daten stellen. Das ist vor allem auch der Versuch sachliche Diskussionen fern von individuellen Ängsten, Ideologie und Extremen zu ermöglichen. Eine klare Einschätzung der Lage braucht fundierte Datenbasis und weiten Horizont, um das Ganze zu sehen.

Alle Bilder, die ich gemalt habe und unten teile, basieren auf Daten des RKI und DIVI, insbesondere:

Es ist erfreulich, dass diese Daten erfasst und allen frei zur Verfügung gestellt werden. Was ich seit Monaten bedaure ist der Umgang mit diesen Daten. Sie werden automatisiert in bunten Dashboards dargestellt und tagesaktuell in Zeitungen berichtet. Sie werden leider selten so aufbereitet, dass sie anschaulich oder sinnvoll interpretierbar sind. Hier möchte ich helfen und werde am Ende dieses Beitrags den R Studio Code teilen, mit dem ich die Grafiken generiert habe.

Auslastung der Intensivstationen (ohne Reserve)

Da es der Aufhänger für diesen Artikel war, möchte ich als erstes eine Grafik zur Auslastung der Intensivstationen teilen, die so ähnlich auch auf der DIVI-Seite zugänglich ist.

Ich hoffe die Bezeichnung der Linien ist selbsterklärend als Interpretationshilfe noch einige Anmerkungen:

  • Das DIVI-Register wurde nach meinem Wissensstand im März / April 2020 aufgebaut, daher der steile Anstieg der grünen (Gesamtzahl Betten) und orangenen (Belegte Betten) Linien
  • Die Differenz zwischen grüner und oranger Linie gibt an, wie viele freie Betten es gibt
  • Die Differenz zwischen oranger und roter Linie gibt an, wie viele Patienten auf einer Intensivstation behandelt werden, die nicht an COVID-19 erkrankt sind (bzw. positiv auf SARS-CoV 2 getestet wurden)

Beim betrachten der Grafik drängen sich mir zwei Fragen auf:

  • Wieso nimmt die Gesamtzahl der verfügbaren Intensivbetten seit Mitte 2020 kontinuierlich ab?
  • Wie steuern die Kliniken die Auslastung ihrer Intensivbetten, dass. die wechselnde Zahl von COVID-19 Patienten (rote Linie) keine sichtbaren Auswirkungen auf die Anzahl der belegten Betten hat (orange Linie)?

Für beide Fragen gibt es sicher plausible und nachvollziehbare Antworten. Ich kenne sie nur nicht und bin dankbar für jeden Hinweis oder Erklärung.

Auslastung der Intensivstationen (mit Reserve)

Ein Teilantwort auf die erste Frage (Rückgang der Intensivbetten) ist, dass eine Notfallreserve geschaffen wurde. addiert man diese, innerhalb einer Woche verfügbaren Betten, zur Gesamtzahl der verfügbaren Betten verändert sich das Bild wie folgt:

Der Rückgang der Gesamtzahl der Intensivbetten ist immer noch sichtbar. Vergleicht man die Zahl der belegten Betten (orange) mit der Zahl der gesamthaft verfügbaren Betten (grün) scheint es, als gäbe es noch ausreichend verfügbare Betten. Fragen, die sich mir stellen:

  • Unter welchen Umständen würde die Notfallreserve abgerufen werden?
  • Welche Konsequenzen und Nebenwirkungen hätte das Aktivieren der Notfallreserve?

Auslastung der Intensivstationen (Regelbetrieb)

Auf Basis der obigen Grafiken liegt die Interpretation nahe, dass „die deutschen Intensivstationen nicht überlastet sind“. Dennoch wird in Zeitschriften und von Politikern häufig darüber gesprochen, dass Kliniken und Intensivstationen überlastet sind. Erfreulicherweise stellt das DIVI auch Daten dazu bereit, wie viele Intensivstationen im Regelbetrieb laufen und wie viele Intensivstationen mit Einschränkungen (z.B. wegen fehlendem Material oder Personalmangel) nur eingeschränkt funktionieren.

Die nächste Grafik bildet genau diese Daten ab. Um die Grafik etwas leichter verständlich zu machen, habe ich die Daten jedoch normalisiert. Das bedeutet, die Datenpunkte jeder betrachteten Variable wurden auf Werte zwischen 0 und 1 umgerechnet. Dadurch kann die dynamische Entwicklung der Variablen besser veranschaulicht werden:

Vergleicht man diese Grafik mit der vorherigen, so bleiben die. Form der orangen Linie (belegte Betten) und der roten Linie (COVID-19) gleich, jedoch hat sich die Skalierung verändert. Hier kann nur noch der komplette Verlauf der Linien, aber nicht mehr einzelne Datenpunkte miteinander verglichen werden. Zwei Interpretationen scheinen naheliegend.
  • Die Anzahl der belegten Betten wird nicht von der Anzahl von COVID-19 Patienten beeinflusst und beeinflusst auch nicht, wie viele Intensivstationen im Regelbetrieb arbeiten (blaue Linie)
  • Desto mehr COVID-19 Patienten auf Intensivstationen behandelt werden, desto weniger Intensivstationen können im Regelbetrieb arbeiten

Die Fragen, die hier gestellt und beantwortet werden sollten sind aus meiner Sicht folgende:

  • Welche (weiteren) Faktoren (neben COVID-19 Patienten) führen dazu, dass immer weniger Intensivstationen im Regelbetrieb arbeiten können?
  • Welche Maßnahmen (neben harten Lockdowns) könnten ergriffen werden, um wieder auf mehr Intensivstationen Regelbetrieb zu ermöglichen?

Infektionen, Intensivpatienten, Tote

Die Zahlen, die am häufigsten in Zeitungen, auf Website und in Dashboards berichtet und visualisiert werden, sind die Anzahl der täglich berichteten Neuinfektionen, die Zahl der COVID-19 Patienten auf Intensivstationen und die Zahl der Menschen, die mit oder COVID-19 gestorben sind. Leider werden diese Zählen häufig nicht in einer Grafik sondern als verschiedene Zeitreihen dargestellt. Dadurch ist die Dynamik und der Zusammenhang der Variablen schwer zu erkennen. Das lässt sich leicht ändern:

Die Zahl der Infektionen und die Zahl der Toten schwanken abhängig vom Wochentag sehr systematisch. Um diese Schwankungen zu glätten, habe ich wie die meisten Zeitungen auch einen 7-Tage-Mittelwert berechnet und abgebildet. Die Form der lila Kurve dürfte bekannt erscheinen.

Interessant sind in dieser Grafik vor allem die Relationen zwischen den einzelnen Linien. Über die Dynamik des Geschehens lässt sich leider wenig aussagen. Dazu hilft aber wieder die Normalisierung der Daten.

Infektionen & Intensivpatienten (normalisierte Daten)

Um einfacher vergleichen zu können, zeige ich obige Daten auch wieder normalisiert. Zunächst den Zusammenhang zwischen registrierten Neuinfektionen und Intensivpatienten mit COVID-19:

Die Grafik wirft für mich keine drängenden Fragen auf, liefert jedoch zwei Erkenntnisse bzw. Plausibilisierungen:

  • Die rote Linie (COVID-19 Patienten auf Intensivstationen) steigt rund eine Woche später als die Neuinfektionen an -> das ist plausibel, wenn mann annimmt, dass es erst einige Tage nach Feststellen der Infektion eine Behandlung auf der Intensivstation nötig ist
  • Wenn die Zahl der Neuinfektionen (lila Linie) sinkt, sinken etwas später auch die COVID-19 Patienten auf Intensivstationen, der Zeitversatz ist jedoch größer als beim Anstiegen der Infektionen -> das ist plausibel, wenn man annimmt, dass Intensivpatienten länger als 1 Woche auf Intensivstationen behandelt werden.

Infektionen & Tote (normalisierte Daten)

Zu guter Letzt kommt hier auch die normalisierte Darstellung von Infektionszahlen und Todeszahlen. Diese Darstellung halte ich für besonders wertvoll, weil bei einer Fallsterblichkeit von 1-2% die Skalierung von Todeszahlen und Infektionen sehr unterschiedlich und damit kaum vergleichbar ist. Die Normalisierung ändert das:

Die beiden Linien laufen größtenteils parallel, was auch zu erwarten ist, da natürlich umso mehr Menschen an oder mit COVID-19 sterben, je mehr Menschen sich mit dem Virus infizieren. Zwei Interessante Stellen sind in der Grafik zu erkennen
  • Im Jahr 2020 während der ersten Welle gab es verhältnismäßig mehr Tote als berichtete Neuinfektionen. Das ist einfach nur ein Hinweis auf die relativ hohe Dunkelziffer an Infektionen während der ersten Welle
  • Seite Februar 2021 laufen die beiden Linien auseinander. Die naheliegende Erklärung dafür ist der Beginn der Impfkampagne und die Wirksamkeit des COVID-19 Impfstoffs

In diesem Bild steckt vor allem die gute Nachricht: Die Impfung wirkt und das lässt sich an Zahlen plausibilisieren.

Für mich wirft dieses Grafik aber auch drängende, politische Fragen auf:

  • Wenn die Impfung wirkt, und immer weniger Menschen, die sich mit SARS-CoV 2 infizieren sterben, welchen Mehrwert bietet die Verfolgung von Infektionszahlen und die Steuerung von Maßnahmen mit daraus abgeleiteten Inzidenzwerten?
  • Welche Kennzahlen und Ansätze sind geeignet, um eine vernünftige Lockerung der bestehenden Maßnahmen zu ermöglichen, ohne das Gesundheitssystem zu überlasten?
  • Welchen Sinn hat vor dem Hintergrund dieser Datenlage eine Ausweitung der Befugnisse des Bundes mit den diskutierten Änderungen des Infektionsschutzgesetzes?

Anmerkungen zur Interpretation

Es ist mir wichtig meine Bilder noch ein wenig einzuordnen. Diese Darstellung erfolgt auf sehr hoher Flughöhe. In den Daten sind Details und Abweichungen enthalten, die die Interpretationsmöglichkeiten der Daten beeinfluss, die ich jedoch nicht berücksichtigt habe. Das sind beispielsweise vermittelnde Variablen (z.B. Anzahl der Corona-Tests), Änderungen nan der Erhebungsmethode (Falldefinition, Gesetzesänderungen) oder schlicht Unsauberkeiten in den Daten (Todes- und Infektionsdatum stimmen überein).

Alles, was ich schreibe ist keine streng wissenschaftliche Untersuchung, sondern der Versuch frei verfügbare Daten so aufzubereiten, dass mehr Menschen die aktuelle Lage fundiert, sachlich und ohne Panikmache oder unnötige Übertreibung beurteilen können.

Verwendete Skripts und Software

Um transparent zu machen, wie die Grafiken erstellt wurden, teile ich hier auch Links zu R und den von mir generierten Code. Ich bin alles andere als ein Experte in R, deswegen ist der Code an vielen Stellen vermutlich wenig elegant oder unübersichtlich. Er tut jedoch was er soll. Einzige Unsicherheit ist, ob der Abruf der Daten von den Webseiten des RKI bzw. DIVI auch in einigen Tagen noch funktioniert, falls sich die URL der Dateien ändert.

Quellcode:

install.packages("dplyr")
install.packages("pracma")
install.packages("BBmisc")
library(dplyr)
library(pracma)
library(BBmisc)

###########################################################################################
#Daten aus DIVI laden und nur die Daten für Deutschland auswählen
bundesland.zeitreihe <- read.csv("https://diviexchange.blob.core.windows.net/%24web/bundesland-zeitreihe.csv")
divi <- filter(bundesland.zeitreihe, Bundesland == "DEUTSCHLAND")
divi_s <- divi[,-(2:3)]
names(divi_s) <- c("Datum", "covCount", "bedsUsed", "bedsFree", "reserve", "ivFree", "ivFreeCov", "sitGood", "sitMedium", "sitBad", "sitNA")
divi_s$Datum <- as.Date(divi_s$Datum)

###########################################################################################
#Daten vom RKI laden, aggregieren und moving averages der letzten 7 Tage berechnen
rki <- read.csv("https://opendata.arcgis.com/datasets/dd4580c810204019a7b8eb3e0b329dd6_0.csv")
rki_s <- data.frame(rki$Meldedatum, rki$AnzahlFall, rki$AnzahlTodesfall, rki$AnzahlGenesen)
names(rki_s) <- c("Datum", "Infekt", "Tod", "Gesund")
rki_a <- aggregate(rki_s[,2:4], list(rki_s$Datum), FUN = sum)
names(rki_a) <- c("Datum","Infekt", "Tod", "Gesund")
Infekt_7 <- movavg(rki_a$Infekt,7,"s")
Tod_7 <- movavg(rki_a$Tod,7,"s")
Gesund_7 <- movavg(rki_a$Gesund,7,"s")
rki_c <- data.frame(rki_a, Infekt_7, Tod_7, Gesund_7)
rki_c$Datum <- as.Date(rki_c$Datum)

###########################################################################################
#Tables mergen in gesamten Datensatz 
d <- merge(rki_c, divi_s, by=c("Datum"), all.x = TRUE)
d$beds <- d$bedsFree + d$bedsUsed
d$bedsT <- d$bedsFree + d$bedsUsed + d$reserve

#Ausslastung der Intensivstationen 
plot(d$Datum,d$beds,type="l",col="green", main = "Auslastung Intesivstationen 1", xlab = "Datum", ylab = "Betten")
  lines(d$Datum,d$covCount, col ="red")
  lines(d$Datum,d$bedsUsed,col="orange")
  legend("topleft",
       c("Gesamtzahl Betten","Belegte Betten", "COV-19 Patienten"),
       fill=c("green","orange", "red"))


#Ausslastung der Intensivstationen mit der Reserve als Vergleichslinie
plot(d$Datum,d$bedsT,type="l",col="green", main = "Auslastung Intesivstationen 2", xlab = "Datum", ylab = "Betten")
  lines(d$Datum,d$covCount, col ="red")
  lines(d$Datum,d$bedsUsed,col="orange")
  legend("topleft",
         c("Gesamtzahl Betten + Reserve","Belegte Betten", "COV-19 Patienten"),
         fill=c("green","orange", "red"))
  
  
###########################################################################################
#standardisierung von aussgewählte Variablen zum Vergleich der Zahlen
z <- data.frame(d$Datum, d$Infekt_7, d$Tod_7, d$covCount, d$ivFree, d$bedsUsed, d$beds, d$bedsT, d$sitGood)
names(z) <- c("Datum", "Infekt_7", "Tod_7", "covCount", "ivFree", "bedsUsed", "beds", "bedsT", "sitGood")
z$Infekt_7 <- normalize(z$Infekt_7, method = "range", range = c(0,1))
z$Tod_7 <- normalize(z$Tod_7, method = "range", range = c(0,1))
z$covCount <- normalize(z$covCount, method = "range", range = c(0,1))
z$ivFree <- normalize(z$ivFree, method = "range", range = c(0,1))
z$bedsUsed <- normalize(z$bedsUsed, method = "range", range = c(0,1))
z$beds <- normalize(z$beds, method = "range", range = c(0,1))
z$bedsT <- normalize(z$bedsT, method = "range", range = c(0,1))
z$sitGood <- normalize(z$sitGood, method = "range", range = c(0,1))

###########################################################################################
#Auslastung Intensivstationen + Zahl der Intensivstationen mit regulärem Betrieb
plot(z$Datum,z$sitGood,type="l",col="blue", main = "Intensivstationen im Regelbetrieb", xlab = "Datum", ylab = "Normalisierte Werte - Wertebereich 0 bis 1")
lines(z$Datum,z$covCount, col ="red")
lines(z$Datum,z$bedsUsed,col="orange")
legend("topleft",
       c("Intensiv Regelbetrieb","Belegte Betten", "COVID-19 Patienten"),
       fill=c("blue","orange", "red"))


#Fälle, Intensivpatienten, Tote
plot(d$Datum,d$Infekt_7,type="l",col="purple", main = "SARS-CoV 2 Infektionen & COVID-19 Fälle", xlab = "Datum", ylab = "Menschen")
lines(d$Datum,d$covCount, col ="red")
lines(d$Datum,d$Tod_7, col="black")
legend("topleft",
       c("Infektionen mit SARS-CoV 2","COVID-19 Intensivpatienten", "Tote mit COV-19"),
       fill=c("purple","red", "black"))

#Fälle, Intensivpatienten normalisiert
plot(z$Datum,z$Infekt_7,type="l",col="purple", main = "SARS-CoV 2 Infektionen & COVID-19 Fälle", xlab = "Datum", ylab = "Normalisierte Werte - Wertebereich 0 bis 1")
lines(z$Datum,z$covCount, col ="red")
legend("topleft",
       c("Infektionen mit SARS-CoV 2","COVID-19 Intensivpatienten"),
       fill=c("purple","red"))

#Fälle, Tote normalisiert
plot(z$Datum,z$Infekt_7,type="l",col="purple", main = "SARS-CoV 2 Infektionen & COVID-19 Tote", xlab = "Datum", ylab = "Normalisierte Werte - Wertebereich 0 bis 1")
lines(z$Datum,z$Tod_7, col="black")
legend("topleft",
       c("Infektionen mit SARS-CoV 2", "Tote mit COVID-19"),
       fill=c("purple", "black"))

Ein Gedanke zu “COVID-19: Die aktuelle Lage mit Bildern aus Daten

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s