Model Performance Statistics for meteorogical data (MPSmet)
Model Performance Statistics for meteorogical data (MPSmet)
Title of the article: …
Posted in …
aAGH University of Science and Technology, Faculty of Mining Surveying and Environmental Engineering, Department of Environmental Management and Protection, Av. A. Mickiewicz 30, Krakow, Poland, contact: rzeszut@agh.edu.pl.
1. Pakiety
Zanim zaczniesz, upewnij się, że masz zainstalowane poniższe pakiety.
library(tidyverse)
library(broom)
library(purrr)
library(stringr)
library(lubridate)
library(rlang)
library(ggpubr)
library(ggrepel)
library(cowplot)
library(gridExtra)
library(ggforce)
library(viridis)
library(DT)
library(formatR)2. Przygotowanie danych
Wczytujemy zestawy danych z pliku binarnego .RData.
Podgląd danych. Ponizsze dane zawierają informację o wynikach pomiarów prowadzonych w ramach eksperymentów MC, LV i TR oceny modeli dyspersji. W ramach tych eksperymentów prowadzone były pomiary wybranych parametrów meteorologicznych (Prędkości i kierunku wiatru oraz temperatury) w pobliżu źródła emisji. W ramach nieniejszego opracowania wykorzystamy te dane do oceny modelu WRF. Symulacje modelem WRF były prowadzone w dwóch rozdzielczosciach 1 km WRF1 i 4 km WRF4. Ponadto pozyskano również dane z stacji synoptycznych, które znajdowały się wewnątrz domeny obliczeniowej. Done te pozyskano z bazy danych [ISD] (https://www.ncdc.noaa.gov/isd).
W obiektach typu tibble tj. synop i synop_g znjadują się zestawione dane pomiarowe i wyniki symulacji. Dane zostały przygotowane od razu w postaci dwóch reprezentacj tj. wąskiej i szerokiej. Wiecej na temat reprezentacji danych i sposoób przetwarzania baz danych w R za pomocą pakiety tidy możesz poczytać w książce R for Data Science.
Zmienne:
date- data wykonania pomiaru
MED- oznaczenie eksperymentuMOD- oznaczenie rozdzielczości siatki obliczeniowej dla prognoz z modelu WRFws,wd,tt- odpowiednio prędkość, kierunke wiatru i temperatura. Indeksyo- obserwacje, indeksmprognozy.station- Skrócona nazwa stacji, jeśli dane pozyskane z oksperymentu (onsite-data) to oznaczenieONS.station_typ- przyjmyje wartosciISDdla stacji synoptycznych, aONSdla danych pozyskanych w ramach eksperymentu.id_var- połącznie zmiennych grupującychMED,station,MOD, w wartosci unikalne.
Podgląd danych:
# A tibble: 6 x 12
date MED MOD ws_m wd_m tt_m ws_o wd_o tt_o
<dttm> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1988-01-01 00:00:00 LV WRF1 4.49 242. -0.650 2.6 270 3.3
2 1988-01-01 01:00:00 LV WRF1 5.06 242. -0.25 5.1 240 3.3
3 1988-01-01 02:00:00 LV WRF1 5.21 249 0.95 2.6 250 3.3
4 1988-01-01 03:00:00 LV WRF1 4.8 254 1.35 3.6 240 3.3
5 1988-01-01 04:00:00 LV WRF1 3.94 253. 1.25 NA NA NA
6 1988-01-01 05:00:00 LV WRF1 3.51 248. 1.25 NA NA NA
# ... with 3 more variables: station <chr>, station_typ <chr>,
# id_var <chr>
Wąska reprezentacja zawiera analogiczne inf. Dane różnią się tylko strukturą. Dane są przechowywane w kolumnach obs i mod. Czynniki meteorologiczne można zidentyfikować po zmiennej param, którea przechowuje ich oznaczenia tj. ws, wd i tt.
Podgląd danych
# A tibble: 6 x 9
date MED MOD station station_typ id_var param mod
<dttm> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
1 1984-08-06 00:00:00 TR WRF1 RTIA ISD TR-RT~ tt 17.2
2 1984-08-06 00:00:00 TR WRF1 RTIA ISD TR-RT~ wd 75.8
3 1984-08-06 00:00:00 TR WRF1 RTIA ISD TR-RT~ ws 2.79
4 1984-08-06 00:00:00 TR WRF4 RTIA ISD TR-RT~ tt 16.0
5 1984-08-06 00:00:00 TR WRF4 RTIA ISD TR-RT~ wd 68.2
6 1984-08-06 00:00:00 TR WRF4 RTIA ISD TR-RT~ ws 3.34
# ... with 1 more variable: obs <dbl>
3. Funkcje oceny modeli (stats param)
Funkcję wczytujemy z pliku źródłowego zgodnie z poniższym przykładem. Upewnij się, że ten plik znajduje się w folderze roboczym. np. poleceniami getwd i dir.
Powyższe polecenie spowodowało wykonanie kodu zawartego w pliku. Teraz w oknie Environment oprócz przykłądowych danych znjadują się również
3.1. eval_all - Model Performance Statistics for met. data
Funkcja eval_all oblicza szereg statystycznych parametrów oceny modeli prognostycznych. Niniejsza funkcja była pisanna pod ocenę danych meteorologicznych, ale z można ją stosowac do oceny innych modeli. Funkja ta oblicza następujace parametry:
- n = Count - NA
- mean_o = Mean Observed
- mean_m = Mean Predicted
- SD_o = Standard Deviation Observed value
- SD_m = Standard Deviation Predicted value
- BIAS = Mean Bias (BIAS)
- MAE = Gross Error (MAE - Mean Absolut Error)
- RMSE = Root Mean Square Error
- CRMSE = Centralised root-mean-square error
- MFB = Mean fractional bias
- MNB = Mean normalised bias
- MNE = Mean normalised error
- NMB = Normalised mean bias
- NME = Normalised mean error
- FAC2 = Fraction of predictions within a factor of two
- IOA = The Index of Agreement based on Willmott et al. (2011)
- R = The Pearson correlation coefficient
Opis powyższych parametrów znajdziesz w poniższych publikacjach, raportach, czy instrukcjach:
- Cambridge Environmental Research Consultants Ltd., 2016. Model Evaluation Toolkit User Guide 1–63. link
- Emery, C., Liu, Z., Russell, A.G., Odman, M.T., Yarwood, G., Kumar, N., 2017. Recommendations on statistics and benchmarks to assess photochemical model performance. J. Air Waste Manag. Assoc. 67, 582–598. link
- Emery, C., Tai, E., Yarwood, G., 2001. Enhanced Meteorological Modeling and Performance Evaluation for Two Texas Ozone Episodes. Env. Int. Corp. 235.link
- Lingard, J., Labrador, L., Brookes, D., Fraser, A., 2013. Statistical evaluation of the input meteorological data used for the UK air quality forecast (UK-AQF). link
Uwaga:: Parametry MFB, MNB oraz MNE wymagają ustalenia wartości progowej. np. dla prędkosci wiatru można założyć ws > 0.01. W przeciwnym wypadku funkcja zwróci wartości INF, -INF. Są one wrażliwe na wartości bliskie zeru.
Skłądnia funkcji eval_all jest następująca:
eval_all(data = synop_g, o = obs,m = mod, date = date, ...)
data- zestaw danych w pstaci df lub tbl,o- nazwa kolumny w której przechowywane są obserwacje (pomiary),m- nazwa kolumny w której przechowywane są wyniki prognoz,date- nazwa kolumny przechowującej informacje na temat daty w formaciePOSIXct....- wprowadzamy nazwy kolumn które przechowują zmienne kategoryczne, dzielące nasze obserwacje na podzbiory, np. stacje, bazy danych, źródła danych, czy reprezentujace wyniki z róznych modeli.
Najpier przyjrzymy się naszym danym synop_g.
date MED MOD
Min. :1984-08-06 00:00:00 Length:90880 Length:90880
1st Qu.:1988-05-28 15:45:00 Class :character Class :character
Median :1988-11-02 10:00:00 Mode :character Mode :character
Mean :1990-03-18 22:02:42
3rd Qu.:1992-09-25 07:15:00
Max. :1993-05-19 23:00:00
station station_typ id_var
Length:90880 Length:90880 Length:90880
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
param mod obs
Length:90880 Min. : 0.000 Min. : 0.000
Class :character 1st Qu.: 2.040 1st Qu.: 1.000
Mode :character Median : 3.050 Median : 2.400
Mean : 3.258 Mean : 2.697
3rd Qu.: 4.170 3rd Qu.: 4.000
Max. :21.290 Max. :24.200
NA's :4394
Zestaw danych skłąda się z ncol(synop_g) kolumn, które przechowują informacje o dacie (date), bazie danych (MED), stacji, typie stacji, czy o mierzonych parametrach (param) itd..
Wykonamy pierwszy test z grupowaniem po jednej zmiennej
# prosty przykład
eval_all(data = synop %>% # funkcja eval
na.omit(), # usuwamy braki danych
o = ws_o,
m = ws_m,
date = date,
id_var) -> nowy
# Wydruk
nowy %>%
mutate_if(is.numeric, # zaokrąglamy wynik do 2 miejsc
round, digits = 2) %>%
DT::datatable() # eksport do interkatywnej tabeliWykonamy drugi test z grupowaniem po wielu zmiennych
# prosty złożony przykład
eval_all(data = synop_g %>% # ta funkcja nie ma zastosowania
filter(param == "ws") %>% # dla kierunku wiatru
na.omit(),
o = obs,
m = mod,
date = date,
MED, MOD, station, station_typ) -> nowy1
# Wydruk
nowy1 %>%
mutate_if(is.numeric,
round, digits = 2) %>%
select(-d_start, -d_end, -mean_m, -mean_o,
-MFB, -MNB, -MNE, -Target, -SD_o, -SD_m) %>%
DT::datatable()3.2. eval_wd - Model Performance Statistics for wind direction
Funkcja eval_wd oblicza szereg statystycznych parametrów oceny modeli prognostycznych, ale tylko dla kierunku wiatru. Funkja ta oblicza następujace parametry:
- n - Count -
NA - mean_o - Mean Observed
- mean_m - Mean Predicted
- BIAS - Mean Bias
- MAE - Gross Error (MAE - Mean Absolut Error)
- RMSE - Root Mean Square Error
- SD - Standard Deviation for x = (Predicted value - Observed value)
Funkcje opracowano na podstawie programu metstat-9dec13_1, który jest napisany w fortranie i udostepniany przez RAMBOLL ENVIRON link.
W poniższym raporcie znajdziesz metodologię obliczania wybranych parametrów.
- Emery, C., Tai, E., Yarwood, G., 2001. Enhanced Meteorological Modeling and Performance Evaluation for Two Texas Ozone Episodes. Env. Int. Corp.
Skłądnia funkcji eval_wd jest następująca:
eval_wd(data = synop, wdm = wd_m, wdo = wd_o,
wsm = ws_m, wso = ws_o,
date = date, only_diff = T, ...)
data- zestaw danych w pstaci df lub tbl,wdo- nazwa zmiennej w której przechowywane są obserwacje kierunku wiatru (pomiary),wdm- nazwa zmiennej w której przechowywane są wyniki prognoz kierunku wiatru,wso- nazwa zmiennej w której przechowywane są obserwacje prędkości wiatru (pomiary),wsm- nazwa zmiennej w której przechowywane są wyniki prognoz prędkości wiatru,date- nazwa kolumny przechowującej informacje na temat daty w formaciePOSIXct.only_diff- Przyjmuje argumnetyTlubF, jeśliT- utworzy w zbiorze danych dodatkową zmienną przechowującą informację o różnicywdm - wdo, w przedziale od-180 do 180....- wprowadzamy nazwę zmiennej, która przechowują zmienne kategoryczne, dzielące nasze obserwacje na podzbiory, np. stacje, bazy danych, źródła danych, czy reprezentujace wyniki z róznych modeli.
Najpier przyjrzymy się naszym danym synop.
date MED MOD
Min. :1984-08-06 00:00:00 Length:90880 Length:90880
1st Qu.:1988-05-28 15:45:00 Class :character Class :character
Median :1988-11-02 10:00:00 Mode :character Mode :character
Mean :1990-03-18 22:02:42
3rd Qu.:1992-09-25 07:15:00
Max. :1993-05-19 23:00:00
ws_m wd_m tt_m ws_o
Min. : 0.000 Min. : 0.1 Min. :-27.950 Min. : 0.000
1st Qu.: 2.040 1st Qu.:104.9 1st Qu.: 0.950 1st Qu.: 1.000
Median : 3.050 Median :215.8 Median : 9.450 Median : 2.400
Mean : 3.258 Mean :196.3 Mean : 9.472 Mean : 2.697
3rd Qu.: 4.170 3rd Qu.:285.5 3rd Qu.: 18.350 3rd Qu.: 4.000
Max. :21.290 Max. :360.0 Max. : 38.060 Max. :24.200
wd_o tt_o station station_typ
Min. : 0.5 Min. :-26.60 Length:90880 Length:90880
1st Qu.:137.3 1st Qu.: 2.80 Class :character Class :character
Median :240.0 Median : 10.60 Mode :character Mode :character
Mean :214.9 Mean : 10.61
3rd Qu.:295.0 3rd Qu.: 18.49
Max. :360.0 Max. : 36.10
id_var
Length:90880
Class :character
Mode :character
[ osiągnięto getOption("max.print") -- pominięto 1 wiersz]
Zestaw danych zawiera wymagane zmienne, możeymy wykonać testy. Zauważ, że w tym przypadku potrzebujemy szerkoiej reprezentacji danych. Gdzie zarówno ws i wd są przechowywane w osobnych zmiennych.
Wykonamy pierwszy test z grupowaniem po jednej zmiennej
# prosty przykład
eval_wd(data = synop %>% # funkcja eval
na.omit(), # usuwamy braki danych
wdm = wd_m,
wdo = wd_o,
wsm = ws_m,
wso = ws_o,
date = date,
only_diff = F,
id_var) -> nowy_wd
# Wydruk
nowy_wd %>%
mutate_if(is.numeric, # zaokrąglamy wynik do 2 miejsc
round, digits = 2) %>%
select(-d_start, - d_end) %>%
DT::datatable() # eksport do interkatywnej tabeliWykonamy drugi test z grupowaniem po wielu zmiennych
# prosty złożony przykład
eval_wd(data = synop %>% # funkcja eval
na.omit() %>% # usuwamy braki danych
mutate(godz = lubridate::hour(date)), # nowa zmienna
wdm = wd_m,
wdo = wd_o,
wsm = ws_m,
wso = ws_o,
date = date,
only_diff = F,
MOD, MED, station, station_typ, godz) -> nowy_wd
# Wydruk
nowy_wd %>%
mutate_if(is.numeric, # zaokrąglamy wynik do 2 miejsc
round, digits = 2) %>%
select(-d_start, - d_end) %>%
DT::datatable() # eksport do interkatywnej tabeli4. Funkcje oceny modeli (stats plot)
Druga grupa funkcji tworzy graficzne raporty przedstawiajace dokłdność prognoz meteorologicznych. Ananlogicznie jak w poprzednim przypadku zastosowano rozdział na wrzystkie parmetry z wykluczeniem kierunku wiatru eval_met_plot, jak i przygotowano funkcję dedykowaną dla kierunku wiatru eval_wd_plot.
4.1. eval_met_plot - Plot Model Performance Statistics for met. data
Funkcja eval_met_plot tworzy gtaficzny raport oceny modelu dla jednej grupy danych. W funkcji tej nie można stosować grupowania po zmiennej kategorycznej. Można również stosować ją tylko dla jednego parametru, np. prędkości wiatru lub temperatury i innnych.
Funkcja tworzy raport skłądający się z 4 wykresów.
P1 - Observed vs Predicted Scatter Plot- Wykres pierwszy oznaczony jakoP1przedstawia wykres rozrzutu wartości obserwowanych do wartości prognozowanych. W przypadku modeli prgonoz meteorologicznych z reguły dyspinujemy długimi szeregami czasowymi danych związku z tym zamiast punktów prezentuje on sześcioboki do których przypisana jest kolorowa skala opisująca liczność obserwacji znajdujacych się w danym obszarze wykresu.
P2 - Model Performance statistics- jest to graficzne przedstawienie podstawowych statystyk oceny modelu w postaci tabeli.
- Name = Unikalna nazwa np. stacji meteorologicznej, lub zestawu danych
- n = Count - NA
- d_satrt = Początek okresu pomiarowego
- d_end = Koniec okresu pomiarowego
- mean_o = Mean Observed
- mean_m = Mean Predicted
- SD_o = Standard Deviation Observed value
- SD_m = Standard Deviation Predicted value
- BIAS = Mean Bias (BIAS)
- MAE = Gross Error (MAE - Mean Absolut Error)
- RMSE = Root Mean Square Error
- NMB = Normalised mean bias
- NME = Normalised mean error
- FAC2 = Fraction of predictions within a factor of two
- IOA = The Index of Agreement based on Willmott et al. (2011)
- R = The Pearson correlation coefficient
P3 - statistical metrics vs. observation range- wykres przedstawijący zmienność niepewności modelu (BIAS, MAE, RMSE) w przedziałach wartości obserowwanej, pozwala określić w których przedziałach wystepują istotne odchylenia względem wartości otrzymanej dla całego zbioru.
P4 - Error histogramprzedstawia rozkład reszt diff = (mod - obs) dla każdej wartości.
Składnia funkcji eval_met_plot:
eval_met_plot(data = synop, m = ws_m, o = ws_o, date = date,
scater_bins = 25, scater_pos_legend = c(0.1, 0.8),
p3_probs = seq(0,1,0.1), p3_vjust = -3,
p3_size = 3, p3_pos_legend = c(0.3, 0.9),
p4_bindwidth = 0.25, p4_pos_sd = 0.15,
station_name = "MC-LVIA-WRF1 (ws)")
data- zestaw danych w postaci df lub tbl,o- zmienna w której przechowywane są obserwacje (pomiary),m- mienna w której przechowywane są wyniki prognoz,date- nazwa kolumny przechowującej informacje na temat daty w formaciePOSIXct,scater_bins- numeric vector giving number of bins in both vertical and horizontal directions. Set to 25 by default.scater_pos_legend- dwuelementowy numeryczny wektorc(x,y)w zakresie wartosci od 0 do 1, orientujacy połozenie legendy w obrębie wykresy rozrzutu,p3_probs= sekwencja prawdopodobieństwa dla wyznaczenia kwantyli, działa jak argumentprobsw funkcjiquantile,p3_vjust- liczba rzeczywista, zmiana położenia etykiety względem osi poziomej,p3_size- liczba rzeczywista, rozmiar tekstu etykiet,p3_pos_legend- dwuelementowy numeryczny wektorc(x,y)w zakresie wartosci od 0 do 1, orientujacy połozenie legendy w obrębie wykresy metryk statystycznychp4_bindwidth- liczba całkowiata, szerokość wg której mają zostac wyznaczone przedziały na histogramie,p4_pos_sd- liczba rzeczywista, pozycja względem osi y położenia lini reprezentujacej odchylenie standardowe od średniej,station_name- vektor character przechowujący nazwę stacji, lub inne słowne oznaczenie dla przeprowadzanej analizy
Wykonamy pierwszy test funkcji dla prędkości wiatru mierzonej na wysokości (10 m):
eval_met_plot(data = synop %>% filter(id_var == "MC-LVIA-WRF1") %>% na.omit(),
m = ws_m,
o = ws_o,
date = date,
scater_bins = 25,
scater_pos_legend = c(0.1, 0.8),
p3_probs = seq(0,1,0.1),
p3_vjust = -3,
p3_size = 3,
p3_pos_legend = c(0.3, 0.9),
p4_bindwidth = 0.25,
p4_pos_sd = 0.15,
station_name = "MC-LVIA-WRF1 (ws)") -> P1Zapis grafiki do pliku w odpowiednich proporcjach.
ggsave(filename = "WS_MC-LVIA-WRF1.jpeg", plot = P1,
device = "jpeg", width = 10.6*1.1, height = 11.3*1.1, dpi = 300)Wykonamy drugi test funkcji dla tmperatury przy powierzchni terenu (2m),
eval_met_plot(data = synop %>% filter(id_var == "MC-LVIA-WRF1") %>% na.omit(),
m = tt_m,
o = tt_o,
date = date,
scater_bins = 25,
scater_pos_legend = c(0.1, 0.8),
p3_probs = seq(0,1,0.1),
p3_vjust = -2.5,
p3_size = 3,
p3_pos_legend = c(0.3, 0.05),
p4_bindwidth = 0.25,
p4_pos_sd = 0.15,
station_name = "MC-LVIA-WRF1 (ws)") -> P1Zapis grafiki do pliku w odpowiednich proporcjach.
ggsave(filename = "TT_MC-LVIA-WRF1.jpeg", plot = P1,
device = "jpeg", width = 10.6*1.1, height = 11.3*1.1, dpi = 300)4.2. eval_wd_plot - Plot Model Performance Statistics for wind direction
Funkcja eval_wd_plot tworzy gtaficzny raport oceny modelu dla jednej grupy danych. W funkcji tej nie można stosować grupowania po zmiennej kategorycznej. Można również stosować ją tylko dla jednego parametru, tj.: kierunku wiatru.
Funkcja tworzy raport skłądający się z 4 wykresów.
P1 - Wind direction error- Wykres pierwszy oznaczony jakoP1przedstawia wykres rozrzutu wartości obserwowanych do wartości prognozowanych (w zakresie od -180, do 180) w układzie biegunowym. Odległość od punktu centralnego oznacza bład predkości czyli (mod_ws - obs_ws). Takie podejście pozwala jednocześnie okreslić, czy występują duże ochylenia prędkości wiatru.P2 - Model Performance statistics- jest to graficzne przedstawienie podstawowych statystyk oceny modelu w postaci tabeli.
- Name = Unikalna nazwa np. stacji meteorologicznej, lub zestawu danych
- n = Count - NA
- d_satrt = Początek okresu pomiarowego
- d_end = Koniec okresu pomiarowego
- mean_o = Mean Observed
- mean_m = Mean Predicted
- BIAS = Mean Bias (BIAS)
- MAE = Gross Error (MAE - Mean Absolut Error)
- RMSE = Root Mean Square Error
P3 - statistical metrics vs. observation range- wykres przedstawijący zmienność niepewności modelu (BIAS, MAE, RMSE) w przedziałach wartości obserowwanej, pozwala określić w których przedziałach wystepują istotne odchylenia względem wartości otrzymanej dla całego zbioru.
P4 - Error histogramprzedstawia rozkład reszt diff = (mod - obs) dla każdej wartości.
Składnia funkcji eval_wd_plot:
eval_wd_plot(data = synop, wdm = wd_m, wdo = wd_o,
wsm = ws_m, wso = ws_o, date = date,
station_name = "LVIA",
p1_max_wind = 7, p1_size_point = 0.15, p1_degree_pos = 90,
p3_pos_legend = c(0.1, 0.8), p3_vjust = -3, p3_size = 3,
p4_bindwidth = 10, p4_pos_sd = 0.0035)
data- zestaw danych w postaci df lub tbl,wdo- zmienna w której przechowywane są obserwacje (pomiary) kierunku wiatru,wdm- mienna w której przechowywane są wyniki prognoz kierunku wiatru,wso- zmienna w której przechowywane są obserwacje (pomiary) prędkości wiatru,wsm- mienna w której przechowywane są wyniki prognoz prędkości wiatru,date- nazwa kolumny przechowującej informacje na temat daty w formaciePOSIXct,p1_max_wind- maksymalna wartosć etykiety na osi x (różnicy prędkości wiatru),
p1_size_point- rozmiar punktów na wykresie p1,p1_degree_pos- położenie etykiet predkości wiatru na osi kierunku wiatru w stopniach w zakresie (-180, 180),p3_vjust- liczba rzeczywista, zmiana położenia etykiety względem osi poziomej,p3_size- liczba rzeczywista, rozmiar tekstu etykiet,p3_pos_legend- dwuelementowy numeryczny wektorc(x,y)w zakresie wartosci od 0 do 1, orientujacy połozenie legendy w obrębie wykresy metryk statystycznychp4_bindwidth- liczba całkowiata, szerokość wg której mają zostac wyznaczone przedziały na histogramie,p4_pos_sd- liczba rzeczywista, pozycja względem osi y położenia lini reprezentujacej odchylenie standardowe od średniej,station_name- vektor character przechowujący nazwę stacji, lub inne słowne oznaczenie dla przeprowadzanej analizy
Wykonamy pierwszy test funkcji:
P1 <- eval_wd_plot(data = synop %>% filter(id_var == "LV-WCA-WRF1") %>% na.omit(),
wdm = wd_m, wdo = wd_o, wsm = ws_m, wso = ws_o, date = date, station_name = "LV-WCA-WRF1",
p1_max_wind = 7, p1_size_point = 0.1, p1_degree_pos = 135, p3_pos_legend = c(0.4,
0.05), p3_vjust = -2.5, p3_size = 3, p4_pos_sd = 0.004, p4_bindwidth = 10)Zapis grafiki do pliku w odpowiednich proporcjach.
ggsave(filename = "WD_LV-WCA-WRF1.jpeg", plot = P1, device = "jpeg", width = 10.6 *
1.1, height = 11.3 * 1.1, dpi = 300)Wykonamy drugi test funkcji:
P1 <- eval_wd_plot(data = synop %>% filter(id_var == "LV-ONS-WRF1") %>% na.omit(),
wdm = wd_m, wdo = wd_o, wsm = ws_m, wso = ws_o, date = date, station_name = "LV-ONS-WRF1",
p1_max_wind = 7, p1_size_point = 0.1, p1_degree_pos = 135, p3_pos_legend = c(0.3,
0.05), p3_vjust = -2.5, p3_size = 3, p4_pos_sd = 0.0022, p4_bindwidth = 10)Zapis grafiki do pliku w odpowiednich proporcjach.
ggsave(filename = "WD_LV-ONS-WRF1.jpeg", plot = P1, device = "jpeg", width = 10.6 *
1.1, height = 11.3 * 1.1, dpi = 300)4.3. eval_target_plot - Target Plot
Funkcja eval_target_plot tworzy target plot (wykres celu).
Składnia funkcji eval_wd_plot:
eval_target_plot(data = synop_g, o = obs, m = mod, date = date,
title = "Target", color = MED, shape = station, label = station_typ,
size = 4, ...)
data- zestaw danych w postaci df lub tbl,o- zmienna w której przechowywane są obserwacje (pomiary),m- mienna w której przechowywane są wyniki prognoz,date- nazwa kolumny przechowującej informacje na temat daty w formaciePOSIXct,title- “Target”,
color- jak w geom_point(),shape- jak w geom_point(),label- Nazwy zawarte w etykietach,size- jak w geom_point,...- zmienne kategoryczne dzielace zestaw danych na podzbiory
Wykonamy pierwszy test funkcji:
p <- eval_target_plot(data = synop_g %>% na.omit() %>% filter(param == "ws"),
o = obs, m = mod, date = date, title = "Target Plot", color = MED, shape = station,
label = station_typ, size = 4, MOD, MED, station, station_typ, id_var)
p <- p + facet_grid(MOD ~ MED) + labs(shape = "station", color = "MED")
pZapis grafiki do pliku w odpowiednich proporcjach.
ggsave(filename = "Target_WS.jpeg", plot = p, device = "jpeg", width = 9 * 1.3,
height = 7.15 * 1.3, dpi = 300)Wykonamy drugi test funkcji:
p <- eval_target_plot(data = synop_g %>% na.omit() %>% filter(param != "wd"),
o = obs, m = mod, date = date, title = "Target Plot", color = MED, shape = MOD,
label = station_typ, size = 4, MOD, MED, station, station_typ, id_var, param)
p <- p + facet_grid(param ~ MED) + labs(shape = "MOD", color = "MED")
pZapis grafiki do pliku w odpowiednich proporcjach.
ggsave(filename = "Target_WS_TT.jpeg", plot = p, device = "jpeg", width = 10.5 *
1.3, height = 7.45 * 1.3, dpi = 300)Wykonamy trzeci test funkcji:
p <- eval_target_plot(data = synop_g %>% na.omit() %>% filter(param == "ws",
MED == "MC") %>% mutate(hour = as.character(lubridate::hour(date))), o = obs,
m = mod, date = date, title = "Target Plot", color = MOD, shape = station_typ,
label = hour, size = 4, MOD, MED, station, station_typ, id_var, param, hour)
p <- p + facet_grid(station_typ ~ MOD) + labs(shape = "MED", color = "Hour")
pZapis grafiki do pliku w odpowiednich proporcjach.
ggsave(filename = "Target_WS_MC_hour.jpeg", plot = p, device = "jpeg", width = 10 *
1.3, height = 10 * 1.3, dpi = 300)