12 Ocena jakości estymacji

Odtworzenie obliczeń z tego rozdziału wymaga załączenia poniższych pakietów oraz wczytania poniższych danych:

12.1 Wizualizacja jakości estymacji

12.1.1 Mapa

Do oceny przestrzennej jakości estymacji można zastosować mapę przestawiającą błędy estymacji. Wyliczenie błędów estymacji odbywa się poprzez odjęcie od estymacji wartości obserwowanej.

12.1.2 Histogram

Błąd estymacji można również przedstawić na wykresach, między innymi, na histogramie.

12.1.3 Wykres rozrzutu

Do porównania pomiędzy wartością estymowaną a obserwowaną może również posłużyć wykres rozrzutu.

12.2 Statystyki jakości estymacji

12.2.1 Podstawowe statystyki

W momencie, gdy trzeba określić jakość estymacji lub porównać wyniki pomiędzy estymacjami należy zastosować tzw. statystyki jakości estymacji. Do podstawowych statystyk ocen jakości estymacji należą:

  • Średni błąd estymacji (MPE, ang. mean prediction error)
  • Pierwiastek średniego błędu kwadratowego (RMSE, ang. root mean square error)
  • Współczynnik determinacji (R2, ang. coefficient of determination)

Idealna estymacja dawałaby brak błędu oraz współczynnik determinacji pomiędzy pomiarami (całą populacją) i szacunkiem równy 1. Należy jednak zdawać sobie sprawę, że dane wejściowe są obarczone błędem/niepewnością, dlatego też w praktyce idealna estymacja nie jest osiągana. Wysokie, pojedyncze wartości błędu mogą świadczyć, np. o wystąpieniu wartości odstających.

12.2.2 Średni błąd estymacji

Średni błąd estymacji (MPE) można wyliczyć korzystając z poniższego wzoru:

\[ MPE=\frac{\sum_{i=1}^{n}(v_i - \hat{v}_i)}{n} \]
, gdzie \(v_i\) to wartość obserwowana a \(\hat{v}_i\) to wartość estymowana.

Średni błąd estymacji można też wyliczyć używając funkcji mean() w R.

Optymalnie wartość średniego błędu estymacji powinna być jak najbliżej 0.

12.2.3 Pierwiastek średniego błędu kwadratowego

Pierwiastek średniego błędu kwadratowego (RMSE) jest możliwy do wyliczenia poprzez wzór:

\[ RMSE=\sqrt{\frac{\sum_{i=1}^{n}(v_i-\hat{v}_i)^2}{n}} \]
, gdzie \(v_i\) to wartość obserwowana a \(\hat{v}_i\) to wartość estymowana.

RMSE można też wyliczyć w R.

Optymalnie wartość pierwiastka średniego błędu kwadratowego powinna być jak najmniejsza.

12.2.4 Współczynnik determinacji

Współczynnik determinacji (R2) jest możliwy do wyliczenia poprzez wzór:

\[ R^2 = 1 - \frac{\sum_{i=1}^{n} (\hat v_i - v_i)^2}{\sum_{i=1}^{n} (v_i - \overline{v_i})^2} \]

, gdzie \(v_i\) to wartość obserwowana, \(\hat{v}_i\) to wartość estymowana, a \(\overline{v}\) średnia arytmetyczna wartości obserwowanych.

R2 można też wyliczyć w R.

lub

Współczynnik determinacji przyjmuje wartości od 0 do 1, gdzie model jest lepszy im wartość tego współczynnika jest bliższa jedności.

12.3 Jakość wyników estymacji

12.3.1 Walidacja wyników estymacji

Dokładne dopasowanie modelu do danych może w efekcie nie dawać najlepszych wyników. Szczególnie będzie to widoczne w przypadku modelowania, w którym dane obarczone są znacznym szumem (zawierają wyraźny błąd) lub też posiadają kilka wartości odstających. W efekcie ważne jest stosowanie metod pozwalających na wybranie optymalnego modelu. Do takich metod należy, między innymi, walidacja podzbiorem (ang. jackknifing) oraz kroswalidacja (ang. crossvalidation).

12.3.2 Walidacja podzbiorem

Walidacja podzbiorem polega na podziale zbioru danych na dwa podzbiory - treningowy i testowy. Zbiór treningowy służy do stworzenia semiwariogramu empirycznego, zbudowania modelu oraz estymacji wartości. Następnie wynik estymacji porównywany jest z rzeczywistymi wartościami ze zbioru testowego. Zaletą tego podejścia jest stosowanie danych niezależnych od estymacji do oceny jakości modelu. Wadą natomiast jest konieczność posiadania (relatywnie) dużego zbioru danych.

Na poniższym przykładzie zbiór danych dzielony jest używając funkcji createDataPartition() z pakietu caret. Użycie tej funkcji powoduje stworzenie indeksu zawierającego numery wierszy dla zbioru treningowego. Ważną zaletą funkcji createDataPartition() jest to, iż w zbiorze treningowym i testowym zachowane są podobne rozkłady wartości. W przykładzie użyto argumentu p = 0.75, który oznacza, że 75% danych będzie należało do zbioru treningowego, a 25% do zbioru testowego. Następnie korzystając ze stworzonego indeksu, budowane są dwa zbiory danych - treningowy (train) oraz testowy (test).

##   [1]   1   2   4   7   8   9  12  13  14  15  16  17  18  19  22  23  25
##  [18]  26  27  29  30  32  34  35  36  37  38  40  41  42  43  45  49  51
##  [35]  52  53  54  55  56  58  59  60  61  62  64  66  67  69  70  73  75
##  [52]  76  78  79  81  82  83  84  85  86  87  88  89  90  91  94  96  97
##  [69]  98 100 101 102 103 106 107 108 109 110 111 112 113 114 115 117 118
##  [86] 120 122 124 125 127 128 129 130 132 133 134 135 137 138 139 140 141
## [103] 142 143 144 146 148 149 150 153 154 155 156 157 158 159 160 161 162
## [120] 163 167 168 169 171 173 174 175 176 177 180 181 183 184 185 186 187
## [137] 188 189 190 191 193 194 195 196 199 200 201 202 204 205 208 209 210
## [154] 212 213 214 215 216 217 218 219 220 221 223 225 226 227 228 229 230
## [171] 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247
## [188] 248 249 250

Dalszym krokiem jest stworzenie semiwariogramu empirycznego oraz jego modelowanie w oparciu o zbiór treningowy.

Do porównania wyników estymacji w stosunku do zbioru testowego posłuży funkcja krige(). Wcześniej wymagała ona podania wzoru, zbioru punktowego, siatki oraz modelu. W tym przypadku jednak chcemy porównać wynik estymacji i testowy zbiór punktowy. Dlatego też, zamiast obiektu siatki definiujemy obiekt zawierający zbiór testowy (test).

## [using simple kriging]
## Object of class SpatialPointsDataFrame
## Coordinates:
##      min      max
## x 745731 756567.0
## y 712629 721118.7
## Is projected: TRUE 
## proj4string :
## [+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000
## +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs]
## Number of points: 60
## Data attributes:
##    var1.pred        var1.var    
##  Min.   :10.52   Min.   :1.002  
##  1st Qu.:13.62   1st Qu.:1.654  
##  Median :14.98   Median :2.084  
##  Mean   :15.67   Mean   :2.187  
##  3rd Qu.:18.05   3rd Qu.:2.608  
##  Max.   :24.97   Max.   :5.602

Uzyskane w ten sposób wyniki możemy określić używając statystyk jakości estymacji lub też wykresów.

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -3.1631 -0.9363  0.2395  0.1850  1.3863  3.4372
## [1] 0.1850111
## [1] 1.697994
## [1] 0.8163668

W sytuacji, gdy uzyskany model jest wystarczająco dobry, możemy również uzyskać estymację dla całego obszaru z użyciem funkcji krige(), tym razem jednak podając obiekt siatki.

## [using simple kriging]

12.3.3 Kroswalidacja

W przypadku kroswalidacji te same dane wykorzystywane są do budowy modelu, estymacji, a następnie do oceny prognozy. Procedura kroswalidacji LOO (ang. leave-one-out cross-validation) składa się z poniższych kroków:

  1. Zbudowanie matematycznego modelu z dostępnych obserwacji
  2. Dla każdej znanej obserwacji następuje:
    • Usunięcie jej ze zbioru danych
    • Użycie modelu do wykonania estymacji w miejscu tej obserwacji
    • Wyliczenie reszty (ang. residual), czyli różnicy pomiędzy znaną wartością a estymacją
  3. Podsumowanie otrzymanych wyników

W pakiecie gstat, kroswalidacja LOO jest dostępna w funkcjach krige.cv() oraz gstat.cv(). Działają one bardzo podobnie jak funkcje krige() oraz gstat(), jednak w przeciwieństwie do nich nie wymagają podania obiektu siatki.

## Object of class SpatialPointsDataFrame
## Coordinates:
##        min      max
## x 745546.9 756937.4
## y 712618.8 721192.6
## Is projected: NA 
## proj4string : [NA]
## Number of points: 250
## Data attributes:
##    var1.pred         var1.var        observed         residual        
##  Min.   : 9.786   Min.   :1.219   Min.   : 8.706   Min.   :-9.007302  
##  1st Qu.:13.332   1st Qu.:1.806   1st Qu.:13.284   1st Qu.:-0.953079  
##  Median :15.300   Median :2.093   Median :15.309   Median : 0.044585  
##  Mean   :15.941   Mean   :2.220   Mean   :15.950   Mean   : 0.008899  
##  3rd Qu.:18.062   3rd Qu.:2.477   3rd Qu.:18.273   3rd Qu.: 0.856024  
##  Max.   :25.017   Max.   :5.320   Max.   :26.139   Max.   : 6.403263  
##      zscore               fold       
##  Min.   :-4.951142   Min.   :  1.00  
##  1st Qu.:-0.653052   1st Qu.: 63.25  
##  Median : 0.031921   Median :125.50  
##  Mean   : 0.005048   Mean   :125.50  
##  3rd Qu.: 0.586624   3rd Qu.:187.75  
##  Max.   : 3.309199   Max.   :250.00

Uzyskane w ten sposób wyniki możemy określić używając statystyk jakości estymacji lub też wykresów.

##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -9.007302 -0.953079  0.044585  0.008899  0.856024  6.403263
## [1] 0.008898675
## [1] 1.635875
## [1] 0.8177634

Podobnie jak w walidacji podzbiorem, gdy uzyskany model jest wystarczająco dobry, estymację dla całego obszaru uzyskuje się z użyciem funkcji krige().

## [using simple kriging]

12.4 Zadania

  1. Wydziel obiekt punkty w taki sposób aby 70% danych należało zbióru treningowy, a 30 % danych do zbioru testowego. Zwizualizuj oba nowe zbiory danych.
  2. Stwórz optymalne modele zmiennej temp ze zbioru treningowego używając krigingu zwykłego, kokrigingu oraz krigingu uniwersalnego.
  3. Wykonaj estymacje korzystając z powyższych modeli. Porównaj uzyskane estymacje korzystając ze statystyk jakości estymacji oraz wizualizacji jakości estymacji i używając zbioru testowego. Który ze stworzonych modeli można uznać za najlepszy? Dlaczego?
  4. Porównaj uzyskane modele używając krosswalidacji. Jak wygląda rozkład reszt z uzyskanych estymacji? Który model można uznać za najlepszy oglądając rozkłady reszt?