• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

Statistische Analyse der Wetterdaten und Anpassung der Vorhersage

Begonnen von falk, 17.03.2018, 21:48:09

⏪ vorheriges - nächstes ⏩

falk

Zwischen der DWD-Station Stuttgart-Echterdingen und meiner Wetterstation liegen nur wenige Kilometer. Durch den Höhenunterschied von 80m und die Tallage meiner Station bedingt, weichen die gemessenen Temperaturen jedoch teils erheblich voneinander ab. Hinzu kommen die technischen Beschränkungen der Davis Vantage Vue und ein nicht WMO-konformer Aufstellungsort.

Ich kann mittlerweile auf eigene Messwerte von über drei Jahren zurückgreifen und unter OpenData stehen ohnehin Wetterdaten der DWD-Stationen zur Verfügung. Gelegenheit also, meine Messwerte einmal numerisch zu analysieren und nicht nur nach Gefühl.

Erfahrungsgemäß sind die Unterschiede in Strahlungsnächten am größten, wenn sich im Tal ein Kaltluftsee ausbildet. Kennzeichnend hierfür sind geringer Wind, klarer Himmel und lange Nächte. Tagsüber unter diesen Bedingungen misst meine Station höhere Temperaturen. Erste Kandidaten für meine Analyse sind deshalb:

date: Zeitpunkt der Messung
tt: Lufttemperatur
td: Taupunkttemperatur
dwd_tt: Lufttemperatur in 2m Höhe (DWD-Station)
dwd_td: Taupunkttemperatur in 2m Höhe (DWD-Station)
dwd_rf: relative Feuchte in 2m Höhe (DWD-Station)
dwd_fx: Windspitze der vergangenen 10min (DWD-Station)
dwd_ff: gemittelte Windgeschwindigkeit der vergangenen 10min (DWD-Station)
dwd_n: Bedeckungsgrad aller Wolken (DWD-Station)

Über eine Datenbankabfrage erzeuge ich eine CSV-Datei. Mit den stündlichen Werten ab März 2015 stehen mir somit ca. 26.000 bereinigte Datensätze zur Verfügung. Für die eigentlich Analyse benutze ich das Statistikprogramm R. R und die Entwicklungsumgebung RStudio können kostenlos aus dem Internet geladen werden. https://cran.r-project.org/bin/windows/base/ und https://www.rstudio.com/products/rstudio/download/

Zu den Ergebnissen (nach etlichen Versuchen):

Die angehängten Correlation-Plots zeigen eine starke Korrelation der Temperaturdifferenzen diff1 = tt - dwd_tt und diff2 = td - dwd_td zu den Parametern sun_pos (Sonnenstand), dwd_n, diff_td (dwd_tt - dwd_td) und dwd_ff.

Mittels linearer Regression lassen sich die Temperaturdifferenzen schätzen:


Call:  glm(formula = diff1 ~ sun_pos + dwd_n + diff_td + dwd_ff, data = dftt)

Coefficients:
(Intercept)      sun_pos        dwd_n      diff_td       dwd_ff 
   -1.37313      0.01370      0.09420      0.01833      0.04454 

Call:  glm(formula = diff2 ~ dwd_n + diff_td + dwd_ff, data = dttd)

Coefficients:
(Intercept)        dwd_n      diff_td       dwd_ff 
   -0.50521      0.08313      0.11188      0.01186 


Durch diese Anpassungen habe ich die MOSMIX-Vorhersage der Station Stuttgart-Echterdingen in eine Vorhersage für meine Station Scharnhausen überführt: https://buwx.de/index.php/forecast


  function adjust(meteogram) {
      meteogram.dwd.station.title = 'Scharnhausen';
      meteogram.dwd.station.titleShort = 'Scharnhausen';

      var lon = meteogram.dwd.station.coordinates[0];
      var lat = meteogram.dwd.station.coordinates[1];
      for (i=0; i < hours_long; i++) {
          var time = new Date(meteogram.temperature[i].x);
          var year = time.getUTCFullYear();
          var month = time.getUTCMonth();
          var day = time.getUTCDate();
          var hour = time.getUTCHours();
          var min = time.getUTCMinutes();
          var offset = hour + min/60;
          var sun_pos = calcZenith(calcJD(year, month + 1, day), offset, lat, -lon);
          var dwd_n = parseFloat(meteogram.wmo_n[i].n);
          var diff_td = parseFloat(meteogram.dwd.station.TTT[i]) - parseFloat(meteogram.dwd.station.Td[i]);
          var dwd_ff = parseFloat(meteogram.dwd.station.FF[i]) * 3.6;

          var diff1 = -1.3731 + 0.0137*sun_pos + 0.0942*dwd_n + 0.0183*diff_td + 0.04454*dwd_ff;
          var diff2 = -0.5052 + 0.1119*diff_td + 0.0831*dwd_n + 0.0119*dwd_ff;

          var tt = Math.round((parseFloat(meteogram.dwd.station.TTT[i])-273.15+diff1) * 10)/10;
          var td = Math.round((parseFloat(meteogram.dwd.station.Td[i])-273.15+diff2) * 10)/10;
          if (td > tt) {
              td = tt;
          }

          meteogram.temperature[i].y = tt;
          meteogram.dewpoint[i].y = td;
      }
  }