set title "Entwicklung und Prognose der SARS-CoV-2 Fallzahlen für Deutschland\n{/*0.9 Datenquelle: https://hgis.uw.edu/virus/}\n{/*0.9Parameterschätzung: eigene Rechnung}" # Datum verarbeiten set timefmt "%d.%m.%Y" datafile = "Fallzahlen_DE.txt" # wird später für Skalierung benötigt stats datafile using 3 # fit-Funktion unlimited, exponentiell exponentiell(x) = a_exp * exp( b_exp * x) + c_exp # Schätzwerte für fit a_exp = 150 b_exp = 0.15 c_exp = -1000 fit exponentiell(x) datafile every::::32 using 1:3 via a_exp, b_exp, c_exp # fit-Funktion linear, nur für die letzten 7 Tage # Anstieg entspricht dem Median der letzten 7 Tage linear_letzte_7(x) = a_lin * x + b_lin # Schätzwerte für fit a_lin = 500 b_lin = 100000 fit linear_letzte_7(x) datafile every::STATS_records-7 using 1:3 via a_lin, b_lin # fit-Funktion linear, für die *vor*letzten 7 Tage # Anstieg entspricht dem Median der *vor*letzten 7 Tage linear_vorletzte_7(x) = a_vlin * x + b_vlin # Schätzwerte für fit a_vlin = 500 b_vlin = 100000 fit linear_vorletzte_7(x) datafile every::STATS_records-14::STATS_records-7 using 1:3 via a_vlin, b_vlin # fit-Funktion logistisch # https://de.wikipedia.org/wiki/Logistische_Funktion logistisch(x) = beta_0 / ( 1 + beta_1 * exp( -beta_2 * x)) # Schätzwerte für fit beta_0 = 130000 # Maximum beta_1 = 2000 # X-Offset beta_2 = 0.2 # Anstieg fit logistisch(x) datafile every::::46 using 1:3 via beta_0, beta_1, beta_2 # Grenzwert einzeichnen #set arrow beta_0 from graph 0.33,first beta_0 to graph 1,first beta_0 nohead lc rgb "blue" # fit-Funktion Glockenkurve # https://de.wikipedia.org/wiki/Normalverteilung glocke(x) = scale / sqrt( 2 * pi * sigma ** 2) * exp( - (( x ** k) - mu) ** 2 / ( 2 * sigma ** 2)) # Schätzwerte für fit sigma = 0.1 mu = 1.6 scale = 10000 k = 0.1 fit glocke(x) datafile every::::95 using 1:4 via sigma, mu, scale, k # fit-Funktion linear, nur für die letzten 7 Tage # Abfall entspricht dem Mittelwert der letzten 7 Tage down_letzte_7(x) = a_down * x + b_down # Schätzwerte für fit a_down = -50 b_down = 5000 fit down_letzte_7(x) datafile every::STATS_records-7 using 1:4 via a_down, b_down # Anstiege angeben set label 1 sprintf("Zuwachs\n(Z)=%d\n(Z)_{-7}=%d", a_lin, a_vlin) at STATS_records+6, linear_letzte_7(STATS_records) right offset 0,3 # nur bei sinkenden aktiven Faellen if (a_down < 0) { set label 2 sprintf("Abnahme\n(A)=%d", -a_down) at STATS_records+6, down_letzte_7(STATS_records-1) right offset 0,2 set label 3 sprintf("Z/A=%.2f", a_lin/-a_down) at STATS_records+6, (linear_letzte_7(STATS_records)+down_letzte_7(STATS_records))/2 right } # y-Skalierung anpassen, bei logscale yrange [10:... #set logscale y set yrange [0:STATS_max*1.3] # x-Skalierung anpassen, immer 14 Tage im Vorraus set xrange[:STATS_records+14] set grid # Legende set key inside top left box set xtics rotate ("24.2.2020" 3, "2.3.2020" 10, "9.3.2020" 17, "16.3.2020" 24, \ "23.3.2020" 31, "30.3.2020" 38, "6.4.2020" 45, "13.4.2020" 52, \ "20.4.2020" 59, "27.4.2020" 66, "4.5.2020" 73, "11.5.2020" 80, \ "18.5.2020" 87, "25.5.2020" 94, "1.6.2020" 101, "8.6.2020" 108, \ "15.6.2020" 115, "22.6.2020" 122, "29.6.2020" 129, "6.7.2020" 136, \ "13.7.2020" 143, "20.7.2020" 150, "27.7.2020" 157, "3.8.2020" 164) plot datafile using 1:3 with points title "kumuliert", \ [:40] exponentiell(x) lc rgb "red" title "exponentiell", \ [STATS_records-7:STATS_records+7] linear_letzte_7(x) lc rgb "magenta" title "7-Tage-Median", \ [STATS_records-14:STATS_records-7] linear_vorletzte_7(x) lc rgb "black" title "Median (Vorwoche)",\ [:65] logistisch(x) lc rgb "blue" title "logistisch", \ datafile using 1:4 with points pointtype 2 title "akut", \ [:120] glocke(x) lc rgb "green" title "akut (fit)", \ [STATS_records-7:STATS_records+7] down_letzte_7(x) lc rgb "green" title "akut (7d-Median)" pause -1