POLITECHNIKA GDAŃSKA Wydział Fizyki Technicznej i Matematyki Stosowanej Szymon Flohr Wprowadzenie do statystyki funkcjonalnej Praca magisterska Praca wykonana pod opieką Pana dr hab. Karola Dziedziula Streszczenie Celem pracy jest wprowadzenie do działu statystyki jakim jest statystyka funkcjonalna, którą równoważnie określa się także jako funkcjonalną analizę danych. Jest to statystyka, która zajmuje się analizą informacji zawartych w obiektach ciągłych. W pracy zostanie zaprezentowana podstawowa terminologia oraz liczne przykłady związane z funkcjonalną analizą danych. Z uwagi na fakt, że analiza danych funkcjonalnych odbywa się na przestrzeniach nieskończenie wymiarowych, kluczowym założeniem jest rozważanie danych jako elementów losowych z ośrodkowej przestrzeni Hilberta H = L2 [0, 1]. Podstawowym wsparciem informatycznym jest platforma R, która została rozbudowana o pakiet o nazwie fda umożliwiający pracę z danymi funkcjonalnymi. Drugi dział opisuje podstawowe definicję wraz z przykładami, zawierać będzie także opis analizy głównych składowych. Trzeci dział opisuje techniki zamiany danych dyskretnych do danych funkcjonalnych. Ta sekcja także będzie zawierać liczne przykłady. Czwarty dział ma charakter typowo analityczny - zawiera zestawienie podstawowych statystyk opisowych dla funkcjonalnej analizy danych. Piąty dział, który stanowi zwieńczenie tej pracy definiuje funkcjonalną analizę głównych składowych wraz dokładnym opisem przykładu. Słowa kluczowe: funkcjonalna analiza danych, dane funkcjonalne, funkcjonalna analiza głównych składowych, baza B-spline, baza Fouriera, środowisko R, operator HilbertaSchmidta. Dziedzina nauki i techniki, zgodnie z wymogami OECD: 1.1 Matematyka. Abstract The aim of this thesis is an introduction to department of statistic that is functional statistic, equivalently called functional data analysis. It is a statistic that deals with the analysis of the information contained in continuous objects. The work will presented the basic terminology and numerous examples related to functional data analysis. Due to the fact that the analysis of functional data takes place on the infinitely dimensional space, the key idea is to consider the data as random elements of the separable Hilbert space H = L2 [0, 1]. Primary IT support is a platform R, which was extended by a package called fda which allows work to the functional data. The second section describes the basic definitions and examples, will also feature a description of the principal component analysis. The third section describes the technique of changing discrete data the functional data. This section will also contain numerous examples. The fourth section is a purely analytical - provides an overview of basic descriptive statistics for functional data analysis. The fifth division, which is the culmination of this thesis defines the functional principal component analysis and a detailed description of example. Keywords: functional data analysis, functional data, functional principal component analysis, B-spline basis, Fourier basis, R program, Hilbert-Schmidt operator. Spis treści 1 Wstęp i cel pracy 6 2 Preliminaria 2.1 Podstawowa terminologia . . . . . . . . . 2.1.1 Dane funkcjonalne . . . . . . . . 2.2 Przykład wprowadzający . . . . . . . . . 2.3 Analiza głównych składowych . . . . . . 2.3.1 Przykład . . . . . . . . . . . . . . 2.4 Kody programów R - przykłady wstępne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Od danych dyskretnych do danych funkcjonalnych 3.1 Reprezentacja danych za pomocą funkcji bazowych . . . . . . . . . . . . 3.1.1 Baza Fouriera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 Baza B-spline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.3 Kod programu R - przykłady wygładzania . . . . . . . . . . . . . 3.1.4 Inne systemy bazowe . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Dopasowanie współczynników oraz parametru K dla reprezentacji danych w systemie funkcji bazowych . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Metoda najmniejszych kwadratów . . . . . . . . . . . . . . . . . . 3.2.2 Wybór parametru K - ilości funkcji bazowych . . . . . . . . . . . 4 Podstawowa analiza danych funkcjonalnych 4.1 Średnia funkcjonalna . . . . . . . . . . . . . . . . . 4.2 Wariancja funkcjonalna . . . . . . . . . . . . . . . . 4.3 Odchylenie standardowe dla danych funkcjonalnych 4.4 Kowariancja oraz korelacja funkcjonalna . . . . . . 4.5 Cross-kowariancja oraz cross-korelacja . . . . . . . . 4.6 Pochodne funkcjonalne . . . . . . . . . . . . . . . . 4.7 Kod programu R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 9 11 12 14 15 . . . . . 16 16 17 20 23 24 . 25 . 25 . 26 . . . . . . . 29 30 31 31 32 34 36 37 5 Funkcjonalna analiza głównych składowych 39 5.1 Wstęp teoretyczny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.2 Podejście analityczne - przykłady oraz analiza . . . . . . . . . . . . . . . . 42 5.2.1 Kod programu R - FPCA . . . . . . . . . . . . . . . . . . . . . . . 45 Bibliography 46 5 Rozdział 1 Wstęp i cel pracy Statystyka matematyczna jako dział szeroko pojętej matematyki z racji swoich licznych zastosowań praktycznych jest dziedziną wciąż rozwijającą się. Wymagania stawiane przez dzisiejsze społeczeństwo oraz nowoczesne systemy gospodarcze oparte na przepływie informacji powodują, iż wspomniana statystyka matematyczna staje się nauką, która ma niebagatelne znaczenie między innymi w nowoczesnej ekonomii, inżynierii finansowej, naukach technicznych oraz informatycznych. Dodatkowym bodźcem stymulującym rozwój tej dziedziny matematyki jest także rozwój nauk informatycznym dokonany na przestrzeni kilku ostatnich dekad - w szczególności specjalistycznego oprogramowania, które umożliwia przeprowadzenie skomplikowanych obliczeń statystyczno-numerycznych. Jednym z działów statystyki matematycznej, którego rozwój dokonał się na przestrzeni kilkunastu ostatnich lat jest funkcjonalna analiza danych (ang. functional data analysis FDA), która stanowi gałąź statystyki zajmującą się obiektami ciągłymi, określonymi jako dane funkcjonalne (ang. functional data). Jest ona stosunkowo nową oraz unikalną próbą opisu rzeczywistości za pomocą aparatu matematycznego. Funkcjonalna analiza danych jest nauką, która rozwinęła się na gruncie wielu działów statystyki - w szczególności analizy wielowymiarowej. Stanowi logiczną konsekwencję badań na statystyką wielowymiarową i nakreśla nowe możliwości dla rozwoju nowoczesnej matematyki. W niniejszej pracy zostanie poruszona tematyka związana ze wstępem do działu statystyki jakim jest funkcjonalna analiza danych. W sposób spójny i logiczny zostanie przedstawiona terminologia związana z tą dziedziną. Duży nacisk zostanie położony na liczne przykłady oraz wizualizacje uzyskane za pomocą oprogramowania R. Kwestie teoretyczne zostaną zaprezentowane w sposób przystępny oraz przejrzysty. Użycie oprogramowania informatycznego ma na celu lepsze przedstawienie wspomnianej problematyki oraz zwrócenie uwagi na praktyczne aspekty funkcjonalnej analizy danych. Z uwagi na fakt, że funkcjonalna analiza danych jest niewątpliwie innowacyjna oraz przyszłościowa, praca ma na celu zwrócenie uwagi na tę interesującą i wciąż rozwijającą się gałąź statystyki. Celem pracy jest także ukazanie przydatności oprogramowania R, które z racji licznych możliwości rozbudowy jest idealną platformą dla nowych działów statystyki. Dodatkową motywacją dla autora jest także fakt, iż w polskiej literaturze fachowej praktycznie nie istnieją żadne opracowania dotyczące FDA, mimo wielu bardzo interesujących aspektów tej dziedziny. Statystyka funkcjonalna wymaga rozbudowy platformy R o następujące pakiety dostępne na oficjalnej stronie internetowej producenta - fda oraz fda.usc. Pakiety te zostały opracowane przy współudziale najważniejszych autorów literatury fachowej dotyczącej 6 FDA i stanowią podstawowe narzędzie informatyczne dla omawianej tematyki, które wykorzystywane jest w rozważaniach teoretycznych oraz praktycznych. Zawierają kilkadziesiąt przydatnych funkcji, które umożliwiają obliczenia w ramach statystyki funkcjonalnej. Praca podzielona jest na cztery części - w drugim dziale przedstawione zostaną podstawowe zagadnienia FDA. Dział ten zawiera istotne definicje oraz informacje na temat przestrzeni L2 [0, 1], w której rozważane są dane funkcjonalne. Trzeci dział opisuje techniki zamiany danych dyskretnych do danych funkcjonalnych. Czwarta część pracy przedstawia podstawowe statystyki dla danych funkcjonalnych - ten dział ma na celu wizualizację oraz prezentację praktycznych możliwości wykorzystania FDA. Piąty dział opisuje teoretyczne oraz praktyczne aspekty funkcjonalnej analizy głównych składowych (ang. functional principal component analysis - FPCA), stanowi on rozwinięcie działu pierwszego dotyczącego w dużej części przestrzeni L2 [0, 1]. 7 Rozdział 2 Preliminaria Ta część pracy ma celu przedstawienie podstawowych terminów oraz problematyki badawczej związanej z funkcjonalną analizą danych. Rozdział ten przybliży zasadność użycia technik funkcjonalnej analizy danych w rozważaniach praktycznych oraz teoretycznych. Poruszona także zostanie tematyka związana z oprogramowaniem R, stanowiącego podstawowe wsparcie informatyczne dla obliczeń statystyczno-numerycznych. Rozdział stanowi wstęp do dalszych rozważań dotyczących tematyki FDA. Dodatkowo, ta część pracy zawiera krótkie wprowadzenie do tematyki analizy głównych składowych - PCA, dla przypadku danych dyskretnych. Ma to na celu porównanie względem funkcjonalnej analizy głównych składowych - FPCA, o której mowa będzie w rozdziale 5. 2.1 Podstawowa terminologia Funkcjonalną analizą danych (ang. functional data analysis - FDA) nazywamy dział statystyki matematycznej, który zajmuję się analizą informacji zawartych w obiektach ciągłych, takich jak funkcje, powierzchnie, krzywe etc.. Ciągłość wspomnianych obiektów z reguły oznacza ciągłość względem czasu, jednak może także oznaczać ciągłość innych parametrów. Wspomniane obiekty będące przedmiotem analizy określa się jako dane funkcjonalne (ang. functional data). Równoważna definicja funkcjonalnej analizy danych brzmi następująco - jest to dział statystyki, który stanowi zbiór technik służący do modelowania danych pochodzących z układów dynamicznych. Zasadniczo cele funkcjonalnej analizy danych nie różnią się od celów jaki stawiane są przed innymi działami statystyki matematycznej. Należą do nich : • konwersja danych dyskretnych do danych funkcjonalnych, • prezentacja danych w sposób umożliwiający łatwiejszą analizę, • przedstawienie danych tak, by podkreślić najistotniejsze cechy badanego zbioru, • analiza źródeł zmienności wśród danych. 8 2.1.1 Dane funkcjonalne Dane funkcjonalne to dane charakteryzujące się ciągłością pewnych parametrów zazwyczaj jest to ciągłość względem czasu, jednak może to być ciągłość takich cech jak : częstotliwość, prawdopodobieństwo, lokalizacja, współrzędne itp.. Tak więc pojedyncza dana funkcjonalna może być przykładowo funkcją, krzywą, powierzchnią. Wynika stąd, że funkcjonalna analiza danych odbywa się w przestrzeniach nieskończenie wymiarowych, zostaną one scharakteryzowane w dalszej części pracy. Ważną cechą danych funkcjonalnych jest gładkość (ang. smoothness) - oznacza to, iż dane posiadają jedną lub więcej pochodnych. Zbiór danych funkcjonalnych można przedstawić następująco {xi (t), i = 1, . . . , n, t ∈ T } , (2.1) gdzie i - indeks danej funkcjonalnej, T - zbiór, na którym zdefiniowane są dane funkcjonalne. W naturze dane o charakterze ciągłym występują relatywnie rzadko, zazwyczaj obserwowane są one w dyskretnych momentach czasowych. Jednym z głównych celów funkcjonalnej analizy danych jest konwersja danych notowanych w dyskretnych momentach czasu do danych funkcjonalnych, czyli danych o charakterze ciągłym. Oznacza to tworzenie danych funkcjonalnych o następującej postaci, którą określa się jako standardowy model dla błędu (ang. standard model for errors) yj = x (tj ) + j , (2.2) gdzie x(tj ) - ciągła dana funkcjonalna w momencie tj , yj - to obserwacja dyskretna pochodząca ze zbioru y = (y1 , ..., yn ), tj - to parametr danej funkcjonalnej odpowiadający obserwacji yj - zazwyczaj jest to jednostka czasowa, j - błąd (szum), j - indeks dotyczący danej obserwacji dyskretnej yj . Notacja macierzowa wygląda następująco y = x (t) + e, (2.3) gdzie y - wektor obserwacji długości n, x(t) - wektor wartości danej funkcjonalnej n, e - wektor błędów długości n. Dana funkcjonalna x(t) tworzona jest na podstawie obserwacji n par o następującej strukturze (tj , yj ) , (2.4) gdzie yj - wartość danej funkcjonalnej dla parametru tj zakłóconego przez pewien błąd j . Oczywistą kwestią jest, że dane funkcjonalne rozważa się we większej ilości - zbiory danych funkcjonalnych xi (t) posiadają następującą postać yij = xi (tij ) + ij , 9 (2.5) gdzie ij - indeks dotyczący danej obserwacji dyskretnej yj z uwzględnieniem i-tej danej funkcjonalnej, i - indeks dotyczący danej funkcjonalnej xi , yij - to obserwacja dyskretna pochodząca ze zbioru y = (y1 , ..., yni ), tij - to parametr danej funkcjonalnej odpowiadający obserwacji yij - zazwyczaj jest to jednostka czasowa, xi (tij ) - i-ta, ciągła dana funkcjonalny w momencie tij , ij - błąd (szum). Analogicznie - dane funkcjonalne xi (t) tworzone są w oparciu o obserwację ni par o następującej formie (tij , yij ) , (2.6) gdzie yij - wartość danej funkcjonalnej dla parametru tij zakłóconego przez pewien błąd ij , i - indeks odnoszący się do danej funkcjonalnej. Wspomniane tworzenie danych funkcjonalnych oznacza konwersję danych dyskretnych do danych ciągłych. Główna metodą umożliwiającą ten proces jest wygładzanie przy użyciu systemu funkcji bazowych - ta tematyka zostanie zostanie omówiona w rozdziale 3. Podstawową przestrzenią, w której rozważa się dane funkcjonalne jako elementy losowe jest następująca ośrodkowa przestrzeń Hilberta H = L2 [0, 1], (2.7) która określa przestrzeń klas funkcji względem relacji równoważności, tj. f ∼g⇔f =g (2.8) prawie wszędzie względem miary Lebesque’a na odcinku [0, 1], takich, że Z 1 f 2 (t)dr < +∞. (2.9) 0 Produkt skalarny określony jest następująco hf, gi = Z 1 f (t)g(t)dt, (2.10) 0 gdzie f, g ∈ L2 [0, 1]. Norma dla elementów tej przestrzeni zdefiniowana jest następująco 1 2 kf k = (hf, f i) = Z 1 2 1/2 f (t)dt (2.11) 0 Dalsze rozwinięcie tematyki elementów losowych w przestrzeni L2 [0, 1] znajduje się w rozdziale 5 i stanowi podstawę teoretycznego wprowadzenia do funkcjonalnej analizy głównych składowych. 10 2.2 Przykład wprowadzający Jak wspomniano wcześniej, podstawowym wsparciem dla funkcjonalnej analizy danych od strony informatycznej jest platforma R wraz z wymaganymi pakietami o nazwach odpowiednio - fda oraz fda.usc. Poniżej zamieszczony zostanie przykład prezentujący zbiór danych funkcjonalnych - są to dane określające wzrost 54 dziewczyn z jednej z amerykańskich szkół w mieście Berkley. Dane te powstały w wyniku wygładzania za pomocą 12 kubicznych funkcji B-spline 31 punktów pomiarowych dla każdej z osób. Wiek, w jakim dziewczyny poddane były pomiarom wzrostu to zakres od jednego roku do 18 roku życia. Obserwacje dyskretne przed wygładzeniem nie były równomiernie rozmieszone w przedziale czasowym. Numeryczny wektor prezentujący wiek odczytu wzrostu wygląda następująco Utworzone dane funkcjonalne - 54 krzywe o postaci {xi (t), i = 1, . . . , 54, t ∈ [1, 18] = T } , (2.12) gdzie i - indeks danej dziewczyny, T - czas - wiek. 140 120 80 100 Wzrost (cm) 160 180 Wzrost dziewczyn 5 10 15 Wiek Rysunek 2.1: Zbiór krzywych prezentujący zmiany wzrostu dziewczyn z jeden z amerykańskich szkół (miasto Berkeley) Powyższe dane wbudowane są w pakiet fda pod nazwą Growth. Sposoby konwersji oraz systemy bazowe zostaną szczegółowo omówione w rozdziale 3. 11 2.3 Analiza głównych składowych Głównym założeniem analizy głównych składowych (ang. principal component analysis - PCA ) jest wyjaśnienie struktur wariancji-kowariancji poprzez tworzenie pewnej liczby k nowych zmiennych losowych stanowiących kombinację liniową zbioru obserwowanych zmiennych losowych X1 , X2 , ..., Xp . Wynika stąd, iż z praktycznego punktu widzenia technika PCA używana jest, by zredukować liczbę danych oraz maksymalnie efektywnie wyjaśnić oraz zinterpretować wariancję zbioru wejściowego. 0 Niech wektor X = [X1 , X2 , ..., Xp ] posiada macierz kowariancji σ11 σ12 . . . σ1p σ21 σ22 . . . σ2p Σ = Cov(X) = .. .. . . . , . .. . . σp1 σp2 . . . σpp gdzie σii = V ar(Xi ), i = i oraz i = 1, . . . , p, σij = Cov(Xi , Xj ), i 6= j oraz i = 1, . . . , p oraz j = 1, . . . , p, wartości własne spełniają nierówność : λ1 ≥ λ2 ≥ . . . ≥ λp ≥ 0. Dodatkowo rozważmy liniowy układ 0 Y1 = a1 X = a11 X1 + a12 X2 + · · · + a1p Xp 0 Y2 = a2 X = a21 X1 + a22 X2 + · · · + a2p Xp .. . (2.13) 0 Yp = ap X = ap1 X1 + ap2 X2 + · · · + app Xp . Używając macierzy Σ uzyskuje się 0 V ar(Yi ) = ai Σai 0 Cov(Yi , Yk ) = ai Σak . (2.14) gdzie i, k = 1, 2, . . . , p. Składowymi głównymi są te liniowe, nieskorelowane kombinacje spośród Y1 , Y2 , . . . , Yp , 0 które maksymalizują V ar(Yi ) = ai Σai . By zapewnić jednoznaczność wyboru odpowied0 niej kombinacji liniowej, stosuje się następującą restrykcje dla współczynników : ai ai = 1. Algorytm PCA, wygląda zatem następująco 0 0 Pierwsza główna składowa = liniowa kombinacja a1 X, która maksymalizuje V ar(a1 X), 0 z zastrzeżeniem a1 a1 = 1 , 0 0 Druga główna składowa = liniowa kombinacja a2 X, która maksymalizuje V ar(a2 X), z 0 0 0 zastrzeżeniem a2 a2 = 1 oraz Cov(a1 X, a2 X) = 0, 0 0 i - ta główna składowa = liniowa kombinacja ai X która maksymalizuje V ar(ai X), z 0 0 0 zastrzeżeniem ai ai = 1 oraz Cov(ai X, ak X) = 0 dla k < i. Następujące twierdzenia odnoszą się to związku między problemem maksymalizacji wariancji a strukturą macierzy kowariancji : 12 Twierdzenie 2.1. Niech Σ będzie macierzą kowariancji określoną dla wektora losowego 0 X = [X1 , X2 , ..., Xp ], z określonymi parami (λ1 , e1 ), (λ2 , e2 ), . . . , (λp , ep ), gdzie λi oraz ei , to odpowiednio wartość własna oraz wektor własny macierzy Σ. Wtedy i-ta składowa główna przedstawia się następująco : 0 Yi = ei X = ei1 X1 + ei2 X2 + · · · + eip Xp , i = 1, 2, . . . , p oraz 0 V ar(Yi ) = ei Σei = λi, i = 1, 2, . . . , p 0 Cov(Yi , Yk ) = ei Σek = 0, i 6= k. Dowód. Dowód tego twierdzenia opiera się na następującym lemacie, który stanowi iż dla pozytywnie określonej macierzy B z wartościami własnymi spełniającymi λ1 ≥ . . . ≥ λp z odpowiadającymi wektorami własnymi e1 , . . . , ep zachodzi 0 1. maxe1 6=0 e1 Be1 0 e1 e1 = λ1 0 2. maxek+1 ⊥e1 ,...,ek ek+1 Bek+1 0 ek+1 ek+1 = λk+1 , k = 1, 2, . . . , p − 1. Zatem wykorzystując powyższy lemat dla macierzy Σ oraz korzystając z założeń PCA, mówiących o tym że wektory własne są znormalizowane otrzymuje się Dla e1 0 e1 Σe1 0 = λ1 = e1 Σe1 = V ar(Y1 ) maxe1 6=0 0 e1 e1 Dla ek+1 takich, że ek+1 ei = 0, i = 1, 2, . . . , k. 0 0 maxek+1 ⊥e1 ,...,ek e Σek+1 ek+1 Σek+1 0 = λk+1 = k+1 = ek+1 Σek+1 = V ar(Yk+1 ) 0 0 ek+1 ek+1 ek+1 ek+1 Zerowa kowariancja między zmiennymi wynika z równości ; 0 0 0 Cov(Yi , Yk ) = ei Σek = ei λk ek = λk ei ek 0 Twierdzenie 2.2. Niech wektor losowy X = [X1 , X2 , ..., Xp ] posiada macierz kowariancji Σ z określonymi parami (λ1 , e1 ), (λ2 , e2 ), . . . , (λp , ep ), gdzie λi oraz ei , to odpowiednio 0 0 wartość własna oraz wektor własny macierzy Σ. Niech Y1 = e1 X, Y1 = e2 X, . . . , Yp = 0 ep X będą składowymi głównymi. Wtedy zachodzi σ11 + σ22 + · · · + σpp = p X V ar(Xi ) = λi + · · · + λp = p X V ar(Yi ). i=1 i=1 Dowód. Z definicji macierzy wariancji-kowariancji wynika wprost że, σ11 + σ22 + · · · + 0 σpp = tr(Σ). Z uwagi na fakt, iż macierz Σ spełnia dekompozycje Σ = PΛP , gdzie Λ jest diagonalną macierzą wartości własnych i P = [e1 , . . . , ep ] zawiera znormalizowane wektory własne oraz z własności śladu macierzy wynika 0 0 tr(Σ) = tr(PΛP ) = tr(ΛP P) = tr(Λ) = λi + · · · + λp Zatem p X V ar(Xi ) = tr(Σ) = tr(Λ) = i=1 p X i=1 13 V ar(Yi ). Powyższe twierdzenie określa całkowitą wariancję populacji. Biorąc pod uwagę powyższe fakty udział k-tej składowej głównej w wyjaśnianiu całkowitej wariancji zbioru określa poniższy ułamek λk . λi + · · · + λp W rozważaniach praktycznych analizie podlegają te składowe główne, dla których suma powyższych wskaźników wynosi więcej niż 85 procent. 2.3.1 Przykład Na potrzeby przykładu posłużą dane pochodzące z pakietu fda, będą to dane o nazwie CanadianWeather przedstawiające dzienne średnie odczyty temperatur dla 35 stacji kanadyjskich uśrednione na przestrzeni lat 1960-1994. Dane te nie podlegają procesowi wygładzania - są to dane dyskretne określone w formie macierzy. Wynik otrzymane za pomocą oprogramowania R prezentują się następująco - jest to 5 pierwszych składowych głównych Wyjaśnianie wariacji prezentuje się następująco 14 Jak widać poprawne zinterpretowanie oraz przeanalizowanie składowych głównych byłoby bardzo żmudne oraz skomplikowane. Rozważania na temat funkcjonalnej analizy głównych składowych umieszczone w dalszej części pracy pokażą zasadność stosowania tej techniki w miejsce klasycznego PCA. 2.4 Kody programów R - przykłady wstępne Kody programów R wraz z opisem działania umożliwiające analizę przedstawioną w tej sekcji prezentują się następująco. Kod umożliwiający analizę głównych składowych - przykład 2.3.1 # instalacja pakietu zawierającego dane CanadianWeather # install.packages("fda", dependencies =TRUE) library(fda) # wczytanie danych CanadianWeather jako macierz - dzienne średnie opady dane <- as.matrix(CanadianWeather$dailyAv[,,"Temperature.C"]) # przeprowadzenie obliczeń PCA PCA <- prcomp(dane) PCA summary(PCA) Kod dotyczący przykładu 2.2 # instalacja pakietu zawierającego dane Growth # install.packages("fda", dependencies =TRUE) library(fda) # utworzenie bazy B-spline o liczbie funkcji nbasis=15, rzędzie 4 na # odcinku (1,18) bazasplajn <-create.bspline.basis(c(1,18), norder=4,nbasis=15) # utworzenie obiektu funkcjonalnego na podstawie danych Growth # na przedziale równym age(wiek) przy użyciu obserwacji # y=hgtf, dziewczyny <- with(growth, smooth.basis(argvals=age, y=hgtf, bazasplajn)) # wykres plot(dziewczyny$fd, xlab="wiek", ylab="wzrost (cm)", main="Wzrost dziewczyn" ) # wektor wieku w jakim odbyły się pomiary growth$age 15 Rozdział 3 Od danych dyskretnych do danych funkcjonalnych 3.1 Reprezentacja danych za pomocą funkcji bazowych Do najważniejszych sposobów konwersji danych dyskretnych do danych funkcjonalnych należy wygładzanie przy użyciu funkcji bazowych. Polega ona na przedstawieniu każdej danej funkcjonalnej za pomocą kombinacji liniowej K funkcji bazowych. Funkcjami bazowymi nazywamy zbiór znanych funkcji φk (t), które z matematycznego punktu widzenia są od siebie niezależne i które posiadają tę własność, że w sposób dokładny przybliżają (aproksymują) dowolną określoną funkcję za pomocą skończonej kombinacji liniowej długości K. Związek ten określa liniowe wyrażenie x(t) ≈ K X ck φk (t), (3.1) k=1 gdzie ck - współczynniki, t ∈ T - zbiór, na którym określone są funkcje bazowe, φk (t) ∈ L2 [0, 1]. W notacji macierzowej powyższe wyrażenie przyjmuje postać 0 0 x = c φ = φ c, (3.2) gdzie c - wektor długości K zawierający współczynniki ck , φ - wektor zawierający elementy systemu bazowego - φk . Stopień wygładzenia danych zależy od wyboru K funkcji bazowych, zatem K rozpatruje się jako swoisty parametr, który determinuje stopień wygładzenia danych. Idealną sytuacją, do której dąży się podczas wygładzania jest wybór funkcji bazowych, które posiadają cechy zgodne ze zjawiskiem, które podlega estymacji. Ma to następujące konsekwencje 16 • relatywnie mała wartość argumentu K w sposób odpowiedni jest w stanie aproksymować dany obiekt funkcjonalny • obliczenia stają się szybsze oraz łatwiejsze • istotne informacje zawarte w danych nie zostaną utracone podczas wygładzania Zgodnie z przytoczoną teorią, oczywistym jest, że nie istnieje baza uniwersalna oraz jej wybór jest istotny podczas badania określonych danych oraz w ich dalszej obróbce. 3.1.1 Baza Fouriera Jednym z najważniejszych systemów bazowych w kontekście analizy danych funkcjonalnych jest system bazowy Fouriera, związany z szeregiem Fouriera f (x) ∼ = a0 + ∞ X (an cos(nx) + bn sin(nx)) , (3.3) n=1 gdzie a0 = 1 2π an = 1 π bn = 1 π Rπ f (x)dx, −π Rπ f (x)cos(nx)dx, n = (1, 2, 3, ...), −π Rπ f (x)sin(nx)dx, n = (1, 2, 3, ...). −π Baza Fouriera zdefiniowana jest następująco φ0 (t) = 1, φ2r−1 (t) = sin(rωt), φ2r = cos(rωt), (3.4) parametr ω = 2Π definiuje okres P . T oznacza horyzont czasowy, na którym rozwaP żamy daną bazę Fouriera. Jeśli wartości tj - obserwacje, są równomiernie rozmieszone na przedziale czasowym T oraz okres jest równy długości przedziału T , wtedy baza jest ortogonalna. Baza Fouriera jest niewątpliwie jedną z najbardziej rozpowszechnionych i używanych w statystyce, naukach technicznych oraz w matematyce stosowanej. Jest szczególnie użyteczna przy modelowaniu danych periodycznych takich jak cykle pogodowe, danych technicznych pochodzących z odczytów urządzeń. Idealnie nadaję się do obróbki danych, które są równomiernie rozmieszone w czasie. Jest niewskazana dla estymacji funkcji posiadających nieciągłości. Wskazane jest by funkcja, która podlega estymacji była gładka oraz nie posiadała lokalnych silnych cech zmienności. W zdecydowanej większości przypadków stosuje się bazę ortogonalną. Przykładowe bazy Fouriera dla wybranych parametrów prezentuje grafika złączona poniżej wraz z kodem środowiska R: 17 # instalacja pakietu fda install.packages("fda", dependencies =TRUE) library(fda) # wygenerowanie baz Fouriera bazafouriera <-create.fourier.basis(c(0,30), nbasis=5) bazafouriera2 <-create.fourier.basis(c(0,360), nbasis=7) plot(bazafouriera) plot(bazafouriera2) 0.0 -0.2 -0.1 Wartość 0.1 0.2 Baza Fouriera 0 5 10 15 20 25 30 T Rysunek 3.1: baza Fouriera o okresie T=30, złożona z 5 funkcji, okres podstawowy równy jest długości przedziału T 0.00 -0.05 Wartość 0.05 Baza Fouriera 0 50 100 150 200 250 300 350 T Rysunek 3.2: baza Fouriera o okresie T=360, złożona z 7 funkcji, okres podstawowy równy jest długości przedziału T 18 Poniżej znajdują się przykłady prezentujące wygładzanie danych w przykładowych bazach Fouriera. Sposób doboru współczynników reprezentacji znajduję się w podrozdziale 3.2.1. Przykład utworzony przy użyciu danych z podrozdziału 2.3.1 - danych CanadianWeather za pomocą 51 baz Fouriera prezentuje się następująco {xi (t), i = 1, . . . , 35, t ∈ [0, 365]} (3.5) 0 -10 -30 -20 Wartość - stopnie celsjusza 10 20 CanadianWeather 0 100 200 300 Dni Rysunek 3.3: Przykład wygładzania - dane CanadianWeather Kolejny przykład prezentuje wygładzenie danych o nazwie gait wbudowanych w pakiet fda za pomocą 19 funkcji bazowych. Dane te określają kąt odchylenia stawu kolanowego podczas szybkiego ruchu mierzonego dla 39 osób 20 - krotnie na odcinku 0.025 - 0.975 sekundy. Pomiary odbywały się w równomiernie rozmieszczonych punktach. {xi (t), i = 1, . . . , 39, t ∈ [0.025, 0.975]} (3.6) 40 20 0 Wartość 60 80 Knee Angle 0 5 10 15 Czas Rysunek 3.4: Przykład wygładzania - dane gait 19 20 3.1.2 Baza B-spline Kolejnym ważnym systemem bazowym mającym liczne zastosowania w modelowaniu danych funkcjonalnych jest system bazowy B-spline, czyli baza złożona funkcji spline funkcji sklejanych. Litera ”B” w nazwie B-spline oznacza basis spline. Funkcja spline to funkcja S : [a, b] → R spełniająca następujące własności • przedział [a, b] składa się z K + 1 podprzedziałów [ξi , ξi+1 ] takich, że a = ξ1 < ξ2 < , ..., < b = ξK+1 , • w każdym i-tym podprzedziale S jest pewnym wielomianem Pi : [ξi+1 , ξi ] → R. Zatem : S(t) = Pi (t), gdzie t ∈ [ξi , ξi+1 ] dla i = 1, ..., K + 1, • najwyższy rząd wielomianu Pi (t) to rząd funkcji spline (ang.order). Oznaczenie m • w punktach, w których łączą się wielomiany stanowiące składowe funkcji spline musi zachodzić różniczkowalność m − 2 - segmenty wielomianowe łączą się ze sobą w sposób gładki. Punkty te określa się jak węzły (ang.knots) lub punkty dzielące (ang.brakepoints). Na podstawie funkcji sklejanych definiuje się system bazowy określony następująco przez rekurencyjną formułę zwaną algorytmem de Boora B (x) i,1 Bi,k (x) = = 1, ti ≤ x < ti+1 0, w przeciwnym wypadku x−ti B (x) ti+k−1 −ti i,k−1 + ti+k −x B (x) ti+k −ti+1 i+1,k−1 gdzie i = 1, 2 . . . K,- indeks funkcji bazowej, k - rząd funkcji bazowej - równocześnie rząd całej bazy, x - zbiór, na którym określa się bazę B-spline, ti - węzły. Konstrukcja systemu B-spline opiera się na następującej zależności : ilość brakepoints = ilość funkcji bazowych - rząd bazy + 2 Bazę B-spline można zastosować praktycznie do każdego typu danych, jest bardzo efektywnych podejściem - już niewielka liczba funkcji bazowych pozwala na osiągnięcie dobrej aproksymacji danych funkcjonalnych. W praktyce z reguły stosuję się bazę B-spline rzędu 4, czyli B-spline kubiczny o równomiernie rozmieszczonych węzłach w przedziale. Przykłady systemów bazowych B-spline wraz kodem środowiska R : 20 # instalacja pakietu fda install.packages("fda", dependencies =TRUE) library(fda) # wygenerowanie baz B-spline, norder=rząd, nbasis=liczba funkcji bazasplajn2 <-create.bspline.basis(c(0,10),norder=2,nbasis=5) plot(bazasplajn2,,main="Baza B-spline", xlab="czas",ylab="wartości") bazasplajn3 <-create.bspline.basis(c(0,10),norder=4,nbasis=12) plot(bazasplajn3,,main="Baza B-spline", xlab="czas",ylab="wartości") 0.0 0.2 0.4 Wartości 0.6 0.8 1.0 Baza B-spline 0 2 4 6 8 10 Czas Rysunek 3.5: baza B-spline złożona z 5 funkcji - rząd 2 0.0 0.2 0.4 Wartości 0.6 0.8 1.0 Baza B-spline 0 2 4 6 8 Czas Rysunek 3.6: baza B-spline złożona z 12 funkcji - rząd 4 21 10 Pierwszy przykład wygładzania przy użyciu funkcji B-spline to konwersja 20 pomiarów siły uszczypnięcia dokonanych na odcinku 0-0.3 sekundy co 2 milisekundy, czyli każda z 20 wygładzonych krzywych przed konwersją stanowiła 151 dyskretnych punktów. Do wygładzania użyto 65 funkcji B-spline rzędu 4. Dane te są wbudowane w pakiet fda pod nazwą pinch. Po wygładzeniu otrzymano {xi (t), i = 1, . . . , 20, t ∈ [0, 0.3] = T } , (3.7) Wartość 0 2 4 6 8 10 Siła uszczypnięcia 0.00 0.05 0.10 0.15 0.20 0.25 Czas Rysunek 3.7: Przykład wygładzania - dane pinch Kolejny przykład to 20 wykresów obserwacji położenia dolnej wargi podczas wymawiania słowa "bob". Dane użyte do wygładzenia to dane lip wbudowane w pakiet fda - 20 obserwacji przeprowadzonych na odcinku czasowym 0-0.34 sekundy co 7 milieskund, czyli każda krzywa powstała na podstawie 51 punktów pomiarowych. Do wygładzenia użyto 20 kubicznych funkcji B-spline. Po konwersji otrzymano {xi (t), i = 1, . . . , 20, t ∈ [0, 0.35] = T } , 0 -5 -10 Wartość 5 10 15 Odchylenie dolnej wargi 0.00 0.05 0.10 0.15 0.20 0.25 0.30 Czas Rysunek 3.8: Przykład wygładzania - dane lip 22 0.35 (3.8) 3.1.3 Kod programu R - przykłady wygładzania # instalacja pakietu install.packages("fda", dependencies =TRUE) library(fda) # Wygładzanie danych w bazach Fouriera # # Utworzenie bazy Fouriera na odcinku c(0,20), o liczbie # funkcji bazowych nbasis=19 gaitbasis <- create.fourier.basis(c(0,20), nbasis=19) # Wygładzenie danych gait w systemie bazowych gaitbasis # w punktach określonych przez wektor gaittime gaitfd <- smooth.basis(gaittime, gait, gaitbasis)$fd # Wykres plot(gaitfd, ylab="Wartość", xlab="Czas") # Utworzenie bazy Fouriera na odcinku c(0,365), o liczbie # funkcji bazowych nbasis=50 canadianbasis <- create.fourier.basis(c(0,365), nbasis=51) # Wygładzenie danych CanadianWether$dailyAv[,, "Temperature.C"] # w systemie bazowych canadianbasis # w punktach określonych przez wektor day.5 canadianfd <- smooth.basis(day.5, CanadianWeather$dailyAv[,, "Temperature.C"], canadianbasis)$fd # Wykres plot(canadianfd, ylab="Wartość", xlab="Czas") # Wygładzanie danych w bazach B-spline # # Wygładzanie analogiczne jak w przypadku baz Fouriera, # # z tą różnica, iż należy zadeklarować rząd bazy norder # pinchbasis <- create.bspline.basis(c(0,0.25), nbasis=65, norder=4) pinchfd <- smooth.basis(pinchtime, pinch, pinchbasis)$fd plot(pinchfd, ylab="wartość", xlab="Czas") lipbasis <- create.bspline.basis(c(0,0.35), nbasis=20, norder=4) lipfd <- smooth.basis(liptime, lip, lipbasis)$fd plot(lipfd, ylab="Wartość", xlab="Czas", main="Odchylenie dolnej wargi") 23 3.1.4 Inne systemy bazowe Wspomniane wcześniej systemy bazowe stanowią najpopularniejsze podejście do tematyki funkcjonalnej analizy danych w kontekście wygładzania danych. W zasadzie przy ich użyciu możliwe odpowiednie wygładzenie większości danych. Warto wspomnieć także o innych, użytecznych bazach, które mogą stanowić alternatywne podejście do tematyki wygładzania. Pierwszym interesującym systemem jest baza skonstruowana przy użyciu falek (ang. wavelets). Oznacza to tworzenie bazy za pomocą rodziny funkcji rzeczywistych o następującej formie ψjk = 2j/2 ψ(2j t − k) (3.9) gdzie ψ - funkcja matka (ang. mother wavelets), na podstawie której konstruujemy falkę a zarazem cały system bazowy. j, k - liczby całkowite określające różne zmiany cech funkcji matki. Wybór funkcji matki odbywa się w taki sposób, by zapewnić ortogonalność bazy. Kolejnym użytecznym systemem bazowym jest system skonstruowany w oparciu o funkcje wykładnicze eλ1 t , eλ2 t , ..., eλk t , ... (3.10) gdzie λk t - określone parametry ( często zakłada się, że λ1 t = 0) Następnie - system skonstruowany z funkcji potęgowych, przy użyciu tych samych parametrów co powyżej tλ1 , tλ2 , ..., tλk , ... (3.11) Istnieje jeszcze wiele systemów bazowych, między innymi systemy złożone z funkcji schodkowych, funkcji stałych lub jednomianów. Głównym celem konwersji oprócz wygładzania jest także efektywność oraz uzyskanie pożądanych informacji na temat danych, tak więc dopuszczalne jest tworzenie własnych systemów bazowych. Przykład bazy złożonej z funkcji eksponencjalnych wraz z kodem programu R bazaexp <-create.exponential.basis(c(0,1),ratevec=c(0,1,2,3,4)) plot(bazaexp, main="Baza złożona z funkcji eksponencjalnych") 0 10 20 30 40 50 Baza złożona z funkcji eksponencjalnych 0.0 0.2 0.4 0.6 0.8 1.0 Rysunek 3.9: baza funkcji eksponencjalnych okresie T=1, złożona z 5 funkcji, o współczynnikach λ1 , λ2 , λ3 , λ4 , λ5 o wartościach odpowiednio 0, 1, 2, 3, 4 24 3.2 Dopasowanie współczynników oraz parametru K dla reprezentacji danych w systemie funkcji bazowych W tym podrozdziale zostanie poruszona kwestia doboru współczynników ck oraz parametru K dla modelu x(t) ≈ K X ck φk (t), (3.12) k=1 który jak wcześniej zostało to określone stanowi reprezentację danych dyskretnych jako ciągłych obiektów. 3.2.1 Metoda najmniejszych kwadratów Najczęściej stosowaną w praktyce oraz domyślną metodą dopasowania modelu do danych jest metoda najmniejszych kwadratów (prosta). Wspomniana metoda jest także domyślnych algorytmem wykorzystywanym przez oprogramowanie R. W celu zapoznania się z tą metodą należy przytoczyć następującą teorię. Prosta metoda najmniejszych kwadratów dla modelu określonego powyżej polega na doborze współczynników ck poprzez minimalizację następującego kryterium SMSSE(y|c) = n X " j=1 yj − K X #2 ck φk (tj ) , (3.13) k co w sposób bardziej przejrzysty w notacji macierzowej wygląda następująco 0 SMSSE(y|c) = (y − Φc) (y − Φc) . (3.14) Obliczając pochodną powyższego kryterium względem c oraz przyrównując do zera zachodzi 2ΦΦ0 c − 2Φ0 y = 0. (3.15) Zatem wartość wektora ĉ, który minimalizuje wartość kryterium najmniejszych kwadratów określa wyrażenie 0 −1 0 ĉ = Φ Φ Φ y (3.16) Taki sposób dedukcji jest odpowiedni w sytuacji, gdy rozważamy standardowy model yj = x(tj ) + j , którego reszty (błędy) j mają ten sam rozkład oraz są niezależne ze średnią zero oraz stałą wariancją σ 2 . Zatem posiadają następującą macierz wariancjikowariancji 2 σ 0 . . . 0 0 ... 0 σ2 . . . 0 .. . . .. . . . 0 . . . σ2 25 3.2.2 Wybór parametru K - ilości funkcji bazowych Kwestia doboru ilości funkcja bazowych podczas dopasowania wspomnianą metodą najmniejszych kwadratów jest dość problematyczna i w zasadzie, jej wybór zależy od aktualnych preferencji osoby analizującej dane. Zbyt mała lub zbyt duża wartość argumentu K może spowodować utratę wielu informacji i wygładzenie danych może okazać się nieefektywne. Ogólnie zasada przyjęta przez większość autorów stanowi, że dane po wygładzeniu nie mogą być ani zbyt ”chropowate” ani zbyt ”płaskie”. W celu pomocy przy weryfikacji tego subiektywnego kryterium można się posłużyć kilko pomocnymi technikami, takimi jak • Minimalizacja obciążoności danego estymatora Bias [x̂(t)] = x(t) − E [x̂(t)] . • Redukcja wariancji : Var [x̂(t)] = E hn x̂(t) − E [x̂(t)]2 oi . • Minimalizacja błędu średniokwadratowego (lub jego pierwiastka - RMSE(root mean square error): h i MSE [x̂(t)] = E {x̂(t) − x(t)}2 = Bias2 [x̂(t)] + Var [x̂(t)] . Przykład - będą to symulacje zależności liczby funkcji bazowym od pierwiastka błędu bezwzględnego dla grupy krzywych. Zatem kryterium przyjmuje postać średni błąd bezwzględny = x11 x12 mean . .. x1n x21 . . . xp1 y11 y21 . . . yp1 x22 . . . xp2 y12 y22 . . . yp2 − .. .. .. .. . . . ... . .. . . . . x2n . . . xpn y1n y2n . . . ypn gdzie xpn - p-ta dana funkcjonalna w n-tym momencie czasowym, ypn - p-ta dana dyskretna (obserwacja) w n-tym momencie czasowym. Dane funkcjonalne, które posłużyły do symulacji to dane z rozdziału 2.3.1. 0.42 0.36 Błąd Średni błąd bezwzględny 40 50 60 70 liczba funkcji bazowych 26 80 Przy założeniu że pożądanym jest osiągniecie średniego błędu na poziomie maksymalnie 0.4 dokonuje się wyboru 65 funkcji bazowych, co powoduje powstanie następujących danych funkcjonalnych 0 -10 -30 -20 Średnia temperatura 10 20 Efekty wygładzania w bazie Fouriera 65 funkcji bazowych Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec czas Rysunek 3.10 Oczywiście jak nadmieniono wcześniej, wybór zależy od aktualnych potrzeb. Przykładowo - by dostrzec podstawową charakterystykę danych można użyć niewielkiej ilości funkcji bazowych. Za wizualizację mogą posłużyć powyższe dane wygładzone przy użyciu jedynie 5 funkcji 0 -10 -20 -30 Średnia temperatura 10 20 Efekty wygładzania w bazie Fouriera 5 funkcji bazowych Jan Feb Mar Apr May Jun Jul czas Rysunek 3.11 27 Aug Sep Oct Nov Dec Kod programu R umożliwiający wcześniejszą analizę # instalacja pakietu install.packages("fda", dependencies =TRUE) library(fda) # wygładzanie dla liczny funkcji bazowych od 41 do 81 ######### # na odcinku c(0,356) oraz tworzenie dla każdego obiektu ###### # macierzy dane2 - wartości krzywych w punktach dyskretnych,### # macierzy dane3 - wartości obserwacji dyskretnych, ########### # macierzy wartości błędów n=41 w=81 for(i in seq(n, w, by=2)) { bazafouriera <- create.fourier.basis(rangeval=c(0,365), nbasis=i, period=365) dane1 <- smooth.basis(day.5, CanadianWeather$dailyAv[,,"Temperature.C"], bazafouriera)$fd dane2 <- as.matrix(eval.fd(day.5,dane1,returnMatrix=TRUE)) dane3 <- as.matrix(CanadianWeather$dailyAv[,,"Temperature.C"]) reszty.kwadrat <- sqrt((dane3 - dane2)^2) reszty.kwadrat.macierz <- as.matrix(reszty.kwadrat) sredni.blad.bezwzgledny <- mean(reszty.kwadrat.macierz) print (sredni.blad.bezwzgledny) } # Ręczne tworzenie listy błędów dla kazdej # # liczby funkcji bazowych, skopiowanej z pętli # blad <-c( 0.4555543, 0.4445077, 0.4354264,0.4302332,0.4264745,0.4216185, 0.417653,0.4127621,0.4098463,0.4052221,0.4009147,0.393524,0.3896969, 0.3863201,0.3845948,0.3786287,0.3730165,0.3653133,0.3618832,0.3581696, 0.3542155) # Wartość błędu dla liczby # # funkcji bazowych # as.vector(blad) n=41 w=81 matplot( seq(n, w, by=2), as.vector(blad),type="l", xlab="Liczba funkcji bazowych", ylab="Wartość",lwd="2", main="Średni błąd bezwzględny", col="lightblue4",font=3) 28 Rozdział 4 Podstawowa analiza danych funkcjonalnych W tym rozdziale zostaną przedstawione podstawowe statystyki opisowe oraz wygląd pochodnych dla danych funkcjonalnych wraz z analizą oraz interpretacją przykładów. Jako dane, które zostaną zaprezentowane w formie przykładów posłużą te zaprezentowane w podrozdziale 3.2.2 - dane funkcjonalne uzyskane w wyniku wygładzania danych pogodowych CanadianWeather za pomocą 65 funkcji bazowych Fouriera, pochodzące z pakietu fda. Z uwagi na fakt, że w dalszej części tej sekcji pojawi się pojęcie cross-korelacji, wymagany jest także drugi zbiór danych funkcjonanych. Będą to dane także pochodzące z pakietu CanadianWeather określające dzienne średnie opady dla 35 stacji kanadyjskich, uśrednione dla lat 1960-1994, wygładzone także w bazie Fouriera o liczbie funkcji 65. Dane, które będą używane w tym rozdziale Średnie dzienne temperatury: {xi (t), i = 1, . . . , 35, t ∈ [0, 365] = T } , 0 -10 -20 -30 Wartość średniej temperatury 10 20 Średnia temperatura 0 100 200 300 Czas Rysunek 4.1: Dane pogodowe - średnia dzienna temperatura 29 (4.1) Średnie dzienne opady: {yi (t), i = 1, . . . , 35, t ∈ [0, 365] = T } , (4.2) 10 8 6 4 0 2 Wartość średnich opadów 12 14 Średnie opady [mm] 0 100 200 300 Czas Rysunek 4.2: Dane pogodowe - średnie dzienne opady 4.1 Średnia funkcjonalna Średnia funkcjonalna x(t) = N −1 N X xi (t), (4.3) i=1 gdzie N - liczebność próbki, i - indeks odnoszący się do danej funkcjonalnej. Przykład 5 0 -5 -15 -10 Wartość średniej temperatury 10 15 Średnia funkcjonalna 0 100 200 300 Czas Rysunek 4.3: Średnia funkcjonalna dla danych pogodowych - temperatura 30 4.2 Wariancja funkcjonalna Wariancja funkcjonalna varX (t) = (N − 1)−1 N X [xi (t) − x(t)]2 . (4.4) i=1 Przykład 60 40 20 Wariancja - temperatura 80 100 Wariancja funkcjonalna 0 100 200 300 Czas Rysunek 4.4: Wariancja funkcjonalna dla danych pogodowych - temperatura 4.3 Odchylenie standardowe dla danych funkcjonalnych Odchylenie standardowe σX (t) = q varX (t) = v u u t(N − 1)−1 N X [xi (t) − x(t)]2 . i=1 Przykład 9 8 7 6 5 4 Odchylenie standardowe - temperatura 10 Odchylenie standardowe dla danych funkcjonalnych 0 100 200 300 Czas Rysunek 4.5: Odchylenie standardowe dla danych pogodowych - temperatura 31 (4.5) 4.4 Kowariancja oraz korelacja funkcjonalna Kowariancja funkcjonalna N X −1 covX (t1 , t2 ) = (N − 1) [xi (t1 ) − x(t1 )] [xi (t2 ) − x(t2 )] , (4.6) i=1 gdzie t1 , t2 ∈ T × T. Korelacja funkcjonalna corrX (t1 , t2 ) = q covX (t1 , t2 ) , (4.7) varX (t1 )varX (t2 ) gdzie t1 , t2 ∈ T × T. Przykład - wykres perspektywiczny korelacji 0.9 la Kore 0.8 ra cja 0.7 rat u ra 0.6 0.5 Te m pe pe rat u Te m Rysunek 4.6: Korelacja dla danych pogodowych - temperatury Analizując wykres można dojść do następujących wniosków - dla argumentów t1 , t2 o zbliżonych wartościach korelacja jest wysoka, natomiast dla argumentów t1 , t2 bardziej oddalonych od siebie korelacja maleje wraz ze wzrostem odległości między argumentami. Intuicyjnie można stwierdzić, że temperatura między miesiącami letnimi a zimowymi nie ma ze sobą większego związku, natomiast między poszczególnymi dniami wykazuje znaczną korelacje. Korelacje także można przedstawić za pomocą wykresów konturowych, dwuwymiarowych. 32 Przykład - wykres konturowy korelacji Korelacja 0 100 200 Temperatura 300 1.00 0.95 0.90 0.85 0.80 0.75 0.70 0.65 0.60 0.55 0.50 0.45 0.40 0.35 0 100 200 300 Temperatura Rysunek 4.7: Korelacja dla danych pogodowych - temperatury Przykład - wykres konturowy korelacji ( wypełniony ) Korelacja - tempertura 1.0 Tempertura 350 300 0.9 250 0.8 200 0.7 150 0.6 100 0.5 50 0.4 0 0 50 100 150 200 250 300 350 Temperatura Rysunek 4.8: Korelacja dla danych pogodowych - temperatury 33 4.5 Cross-kowariancja oraz cross-korelacja Cross-kowariancja covX,Y (t1 , t2 ) = (N − 1)−1 N X [xi (t1 ) − x(t1 )] [yi (t2 ) − y(t2 )] , (4.8) i=1 gdzie t1 , t2 ∈ T × T. Cross-korelacja covX,Y (t1 , t2 ) corrX,Y (t1 , t2 ) = q varX (t1 )varY (t2 ) (4.9) gdzie t1 , t2 ∈ T × T. Przykład - wykres perspektywiczny 0.8 cja Korela 0.6 0.4 Te m 0.2 pe dy ra t ur a O pa 0.0 Rysunek 4.9: Korelacja dla danych pogodowych - opadów oraz temperatury W tym przypadku analiza prowadzi do następujących wniosków - dla argumentów t1 odnoszących się do zmian temperatury w czasie oraz dla argumentów t2 określających zmianę opadów, korelacja jest wysoka dla okresu jesień-zima i niska dla okresu letniowiosennego. Intuicyjnie można : wysoka temperatura zimą, a w szczególności na początku roku sprzyja występowaniu opadów, natomiast zmiany temperatury latem raczej nie mają większego wpływu na ilość opadów. 34 Cross-korelacje często prezentuje się na wykresach konturowych, dwuwymiarowych. Przykład - wykres konturowy Korelacja miedzy opadami a temperaturą 0.9 300 0.8 0.7 200 0.5 0.4 0.3 0.2 100 Opady 0.6 0.1 0.0 0 -0.1 0 100 200 300 Temperatura Rysunek 4.10: Korelacja dla danych pogodowych - opadów oraz temperatury Przykład - wykres konturowy (wypełniony) Korelacja między opadami a temperaturą 350 0.8 300 0.6 Opady 250 200 0.4 150 0.2 100 50 0.0 0 0 50 100 150 200 250 300 350 Temperatura Rysunek 4.11: Korelacja dla danych pogodowych - opadów oraz temperatury 35 4.6 Pochodne funkcjonalne Pochodne funkcjonalne oblicza się w ten sam sposób, co co zwykłe pochodne dla funkcji. Nazwa odnosi jedynie do faktu, że zostały obliczone dla danych funkcjonalnych. Mimo swojej prostoty warto wspomnieć o nich z uwagi na to, że poprzez konwersję danych dyskretnych do danych funkcjonalnych zyskuje się możliwość ich kalkulacji, co dostarcza wielu informacji na temat danego zjawiska. Pochodna n-tego rzędu Dn xi (t) , dt gdzie xi (t) - i-ta dana funkcjonalna Przykład pochodnej pierwszego rzędu dla danych CanadianWeather - temperatura Wartość -1.0 -0.5 0.0 0.5 1.0 Funkcja pochodnej 0 100 200 300 Dni Rysunek 4.12 Przykład pochodnej drugiego rzędu dla danych CanadianWeather - temperatura 0.0 -0.2 -0.4 Wartość 0.2 0.4 Funkcja pochodnej rzędu 2 0 100 200 Dni Rysunek 4.13 36 300 4.7 Kod programu R Kod programu R umożliwiający analizę zaprezentowaną w tym rozdziale wygląda następująco. # instalacja pakietów # install.packages(c("fda","fda.usc","ColorPalette","plot3D")) library(fda) library(fda.usc) library(ColorPalette) library(plot3D) # utworzenie bazy do wygładzenia # bazafouriera <- create.fourier.basis(rangeval=c(0,365), nbasis=65, period=365) # wygładzenie danych opadów oraz temp # dane1 <- smooth.basis(day.5, CanadianWeather$dailyAv[,,"Temperature.C"], bazafouriera)$fd dane2 <- smooth.basis(day.5, CanadianWeather$dailyAv[,,"Precipitation.mm"], bazafouriera)$fd # funkcja średniej z wykresem # srednia1 <- mean.fd(dane1) plot(srednia1,xlab="Czas",ylab="Wartość średniej temperatury [C]", main="Średnia dla danych wygładzonych w bazie Fouriera", font=3,col="lightblue4",lwd=2) # funkcja kowariancji z wykresami # # czas określony przez wektor weeks # dane10 <-cor.fd(weeks,dane1,weeks) persp3D(weeks, weeks, dane10, colvar=dane10 ,phi=35, theta=35, xlab="Temperatura", ylab="Temperatura",zlab="Korelacja",border = "black", bty = "g") contour2D(dane10,weeks,weeks, xlab="Temperatura", ylab="Temperatura", main="Korelacja") filled.contour(weeks,weeks,dane10, xlab="Temperatura",ylab="Tempertura",main="Korelacja - tempertura") 37 Dalsza część kodu # funkcja cross kowariancji z wykresami # # czas określony przez wektor weeks # dane5 <-cor.fd(weeks,dane1,weeks,dane2) persp3D(weeks, weeks, dane5, colvar=dane5 ,phi=25, theta=45, xlab="Temperatura", ylab="Opady",zlab="Korelacja",border ="black", bty = "g") contour2D(dane5,weeks,weeks, xlab="Temperatura", ylab="Opady", main="Korelacja między opadami a temperaturą") filled.contour(weeks,weeks,dane5,xlab="Temperatura", ylab="Opady",main="Korelacja między opadami a temperaturą") # funkcja wariancji z wykresem # wariancja <- func.var(dane1) plot(wariancja, xlab="Czas", ylab="Wariancja - temperatura", main="Wariancja dla danych wygładzonych w bazie Fouriera", font=3,col="lightblue4",lwd=2) # funkcja odchylenia standardowego z wykresem # dane6 <- std.fd(dane1) plot(dane6, xlab="Czas",ylab="Odchylenie standardowe - temperatura ", main="Wykres odchylenia standardowego w bazie Fouriera", font=3,col="lightblue4",lwd=2) # pochodne - 1 oraz 2 rząd z wykresami # plot(deriv.fd(dane1), xlab="Dni",ylab="Wartość",main="Funkcja pochodnej") plot(deriv.fd(dane1,2), xlab="Dni",ylab="Wartość", main="Funkcja pochodnej rzędu 2") 38 Rozdział 5 Funkcjonalna analiza głównych składowych 5.1 Wstęp teoretyczny Funkcjonalna analiza głównych składowych (ang.functional principal component analysis - FPCA) podobnie jak w przypadku klasycznej analizy głównych składowych polega na tworzeniu nowych zmiennych mających na celu wyjaśnienie struktur wariancji na podstawie zbioru wejściowego, który w tym przypadku stanowi N danych funkcjonalnych X1 , X2 , . . . , XN , pochodzących z przestrzeni H = L2 [0, 1], którą zapisujemy na potrzeby tego działu prościej - L2 . Na początek należy przytoczyć teorię związaną z L2 -elementami losowymi oraz operatorami w przestrzeni L2 . Niech (Ω, F, P) będzie przestrzenią probabilistyczną, wówczas definiuje się Definicja 5.1. Niech B będzie przestrzenią Banacha, wówczas σ-ciałem zbiorów borelowskich na B nazywamy σ-ciało B(B) generowane przez rodzinę zbiorów otwartych w normie przestrzeni B. Definicja 5.2. Niech (Ω, F, P) będzie przestrzenią probabilistyczną, natomiast B przestrzenią Banach. Wówczas odwzorowanie X:Ω→B określa się jako B-element losowy, jeśli powyższe odwzorowanie jest mierzalne czyli dla każdego zbioru borelowskiego B ∈ B(B) przeciwobraz X −1 (B) ∈ F. Zgodnie z powyższymi definicjami, można uściślić definicję danych funkcjonalnych Definicja 5.3. Niech X : Ω → B będzie B-elementem losowym, wtedy X określa się jako zmienną funkcjonalną a jej realizację x daną funkcjnonalną. Dla przestrzeni Hilbert elementy losowe definiuje się następująco Twierdzenie 5.1. Niech (Ω, F, P) będzie przestrzenią probabilistyczną oraz H ośrodkową przestrzenią Hilberta. Wówczas odwzorowanie X:Ω→H 39 jest H-elementem losowym wtedy i tylko wtedy, gdy dla każdego f ∈ H odwzorowanie Ω 3 ω → hf, X(ω)i ∈ R jest mierzalne. Związek między mierzalnym procesem a L2 -elementem losowym określa poniższa definicja Definicja 5.4. Niech {Xt }t∈T będzie procesem stochastycznym mierzalnym. Odwzorowanie Ω 3 ω → X(ω) ∈ L2 jest L2 -elementem losowym, jeśli funkcja X(ω) jest całkowalna z kwadratem dla każdego ω ∈ Ω ( względem miary Lebesgue’a ) Bardzo ważną funkcją określoną dla L2 elementu losowego jest funkcja wartości średniej określona następująco definicją Definicja 5.5. Funkcją wartości średniej całkowalnego L2 -elementu losowego X nazywamy taki element µ ∈ L2 , który dla dowolnego x ∈ L2 spełnia hx, µi = E hx, Xi Oznaczenie EX := µ. Całkowalność oznacza, iż element spełnia E kXk = E Z h i1 X 2 (t)dt 2 < ∞. FPCA opiera się na wykorzystaniu operatorów Hilberta-Schmidta, które definiuje się następująco Definicja 5.6. Operatorami Hilberta-Schmidta nazywamy operatory spełniające • są określone w przestrzeni L - przestrzeni operatorów ograniczonych na H z normą kψkL = sup {kψ(x)k : kxk ≤ 1} , • są zwarte, czyli istnieją dwie ortonormalne bazy {υj } i {fj } oraz ciąg {λj } ∈ R zbiegający do zera taki, że ψ(x) = ∞ X λj hx, υj i fj , x ∈ H, j=1 • spełniają warunek P∞ j=1 λ2j < ∞. Funkcje własne oraz wartości własne operatora określone są poprzez następującą definicję Definicja 5.7. Niech ψ(x) będzie symetrycznym oraz dodatnio określonym operatorem Hilberta-Schmidta spełniającym następującą dekompozycje ψ(x) = ∞ X λj hx, υj i υj , x ∈ H, j=1 wtedy, gdy υj są ortonarmalne, określa się je jako funkcje własne operatora. Równoważnie : ψ(υj ) = λj υj , gdzie : λj - wartość własna. 40 Cała idea FPCA opiera się na estymacji elementów własnych operatora kowariancji spełniającego poniższą definicję Definicja 5.8. Niech X będzie L2 elementem losowym, który jest całkowalny z kwadratem. Operatorem kowariancji nazywamy symetryczny oraz dodatnio określony operator Hilberta-Schmidta zdefiniowany następująco C(x) = E [h(X − µ, x)i (X − µ)] , x ∈ L2 , gdzie C(x)(t) = Z c(t, s)x(s)ds, gdzie c(t, s) - funkcja kowariancji, µ - funkcja wartości średniej. Z powyższej definicji wynika, że operator kowariancji jest operatorem całkowym z jądrem całkowym określonym przez funkcję kowariancji. Dla L2 elementów losowych funkcję kowariancji definiuje się następująco Definicja 5.9. Niech X1 , X2 , . . . , XN będą L2 -elementami losowymi o tym samym rozkładzie co X. Funkcję kowariancji określamy następująco c(t, s) = E [(X(t) − µ(t)) (X(s) − µ(s))] . Estymatory dla wcześniej zdefiniowanych struktur wyglądają następująco Definicja 5.10. Niech X1 , X2 , . . . , XN będą L2 -elementami losowymi o tym samym rozkładzie co X. Wówczas • estymator operatora kowariancji wygląda następująco Ĉ(x) = N −1 N X hXi − µ̂, xi (Xi − µ̂) , x ∈ L2 , i=1 gdzie ˆ = N −1 PN Xi (t) - estymator funkcji wartości średniej. µ(t) i=1 • estymator funkcji kowariancji wygląda następująco ĉ(t, s) = ĉ(t, s) = N −1 N X (Xi (t) − µ̂(t)) (Xi (s) − µ̂(s)) . i=1 Biorąc pod uwagę powyższe informacje, estymowanie elementów własnych na potrzeby FPCA odbywa się za pomocą równania : Ĉ(υˆj )(t) = Z ĉ(t, s)υjˆ(s)ds = λˆj υˆj (t), j = 1, 2, . . . , N. Ostatecznie i-tą funkcje własną operatora kowariancji nazywamy i-tą składową funkcjonalną. Udział p-pierwszych funkcjonalnych składowych głównych w określeniu struktur zmienności określa następujący wskaźnik ˆ k=1 λk . CP V (p) = PN ˆk λ k=1 Pp Zalecane jest by wskaźnik ten osiągał wartość nie mniejszą niż 85 procent. 41 Bardzo ważnym z punktu widzenia analitycznego jest następujący produkt skalarny Definicja 5.11. Niech υj będzie j-tą funkcjonalną składową główną, wtedy produkt hxi − µ̂, υˆj i = Z ˆ υjˆ(t)dt, xi (t) − µ(t) określa się jako jako j-ty score, czyli miara wkładu j-tej składowej głównej w wyjaśnianiu wariancji i-tej krzywej. Funkcja własna oraz wartość własna czasami określane są jako harmoniczna (ang. harmonic) oraz wartość (ang. value) odpowiednio. Warto zauważyć także, że FPCA określa się dla danych wycentrowanych, co ma istotne znaczenie podczas rozważań praktycznych, ponieważ znacząco ułatwia późniejszą analizę wyników. 5.2 Podejście analityczne - przykłady oraz analiza W tej sekcji zostanie przedstawiony przykład wraz z interpretacją odnoszący się do do przytoczonej teorii. Jako dane, które poddane będą analizie, posłużą dane z rozdziału 4 - uśrednione dzienne odczyty wartości temperatur dla 35 kanadyjskich stacji meteorologicznych w latach 1960-1994. Dane te zostały wygładzone w bazie Fouriera - 65 funkcji bazowych. Wyniki uzyskane za pomocą programu R prezentują się następująco 0.00 -0.10 -0.05 Wartości 0.05 0.10 Składowe główne funkcjonalne 0 100 200 300 Czas Rysunek 5.1: Składowe główne - harmoniczne, obliczone dla danych wycentrowanych Składowe główne domyślnie obliczane są dla danych wycentrowanych, czyli danych powstałych po odjęciu funkcji średniej od każdej danej funkcjonalnej. Składowe główne wyjaśniają odpowiednio następujący procent zmienności danych : 42 Rysunek 5.2: Wektor prezentujący procent wyjaśniania wariancji danych funkcjonalnych- konsola programu R Przydatność powyższego wykresu prezentującego harmoniczne jest z punktu widzenia praktycznego wątpliwa, tak więc podczas analizy stosuje się następująco formę prezentacji wyników przedstawioną na wykresie poniżej - funkcje wartości średniej (linia ciągła) dla danych wejściowych zamieszcza się wraz z krzywymi (linie przerywane) będącymi wynikiem odejmowania oraz dodawania poszczególnych harmonicznych od średniej. Na górze wykresu widoczny jest procentowy udział w wyjaśnianiu wariancji dla każdej z 4 pierwszych składowych głównych. PCA function 2 (Percentage of variability 8.5 ) 10 -10 0 Harmonic 2 0 -10 -20 Harmonic 1 10 20 20 PCA function 1 (Percentage of variability 88.4 ) 0 100 200 300 0 200 300 PCA function 3 (Percentage of variability 2 ) PCA function 4 (Percentage of variability 0.5 ) 5 0 Harmonic 4 5 0 -15 -5 -5 10 10 argvals -15 Harmonic 3 100 argvals 0 100 200 300 0 argvals 100 200 300 argvals Interpretacja : • Pierwsza oraz druga składowa główna, dostarczają informacji o 96,9 procent wariancji • Trzecia oraz czwarta składowa zawierają niewielki procent informacji • Pierwsza składowa główna może być zinterpretowana jako ogólny wskaźnik średniej temperatury • Druga składowa główna może być zinterpretowana jako wskaźnik zmienności temperatury między okresem letnim i zimowym • Trzecia składowa główna możne być potraktowana jako wskaźnik temperatury w okresie wiosenno zimowym 43 100 Kolejnym istotnym etapem podczas analizy FPCA jest zbadanie j-tych score dla poszczególnych zmiennych, czyli analiza następującego wykresu prezentująca wartość zmiennych (stacji) osiąganych na pierwszym i drugim score. Resolute Pr. Rupert Iqaluit 50 St. Johns Drugi score Yarmouth Sydney Scheffervll Churchill Vancouver Halifax Pr. George Charlottvl Calgary Whitehorse Inuvik 0 Victoria Fredericton Sherbrooke Toronto Edmonton London Thunder Bay Kamloops Quebec Bagottville Arvida Montreal Ottawa -50 Yellowknife Pas AlbertRegina Uranium City ThePr. Winnipeg Dawson -300 -200 -100 0 100 200 Pierwszy score Interpretacja : • W prawej górnej części wykresu znajdują się stacje morskie - klimat nad morzem sprzyja wysokiej średniej temperaturze ( wysoki score 1 ) oraz niskim wariancją letnio-zimowym ( niski score 2 ) • Poniżej znajdują się stacje znajdujące się dalej od morza - klimat lądowy sprzyja niższej średniej ( niższa wartość score 1) • W lewej dolnej części wykresu znajdują się stacje leżace w głębi lądu - średnia staje się coraz niższa ( niski score 1), natomiast wariancje letnio-zimowe są relatywnie wysokie ( wyższy score 2 ) • Arktyczna stacja znajduje się w lewym górnym rogu - bardzo niska średnia temperatura ( niski score 1 ) oraz bardzo duża wariancja ( wysoki score 2 ) • Znak przy wartości pierwszego score jest istotny, natomiast w przypadku drugiego nie jest istotny, ponieważ został on zinterpretowany jako wskaźnik zmienności 44 5.2.1 Kod programu R - FPCA # Część I - Wygładzanie danych # instalacja pakietu install.packages("fda", dependencies =TRUE) library(fda) # utworzenie bazy Fouriera złożonej z 65 funkcji (nbasis) # na odcinku o długości "rangeval" # o okresie "period" (domyślnie period = długość rangeval) bazafouriera <- create.fourier.basis(rangeval=c(0,365), nbasis=65, period=365) # utworzenie obiektu funkcjonalnego przy użyciu bazy Fouriera ##### # na podstawie obserwacji CanadianWeather$dailyAv, w punktach ##### # określonych przez wektor day.5 - zawierającego kolejne dni roku # dane1 <- smooth.basis(day.5, CanadianWeather$dailyAv[,,"Temperature.C"], bazafouriera)$fd # Część II - Funkcjonalna analiza głównych składowych # FPCA dla dane1, o liczbie składowych głównych nharm=4 ######### FPCA <- pca.fd(dane1, nharm=4) # Wykresy średniej +/- składowa główna wraz z udziałem w # # wyjaśnianiu wariancji # op <- par(mfrow=c(2,2)) plot.pca.fd(FPCA, cex.main=0.9,pointplot=FALSE) # Wykresy harmonicznych - składowych głównych # plot(FPCA$harmonics, main="Składowe główne funkcjonalne",xlab="Czas",ylab="Wartości") # Wykres - wartość zmiennych na poszczególnych score # plot(FPCA$scores[,1], FPCA$scores[,2], xlab="Pierwszy score", ylab="Drugi score") text(FPCA$scores[,1], FPCA$scores[,2], CanadianWeather$place, col=3) 45 Bibliografia [1] J.O. Ramsay, B.W. Silverman, Functional Data Analysis. Springer, 2nd Edition, 2005. [2] Lajos Horváth, Piotr Kokoszka, Inference for Functional Data with Applications. Springer, 2012. [3] Frédéric Ferraty, Philippe Vieu Nonparametric Functional Data Analysis. Springer, 2006. [4] strona internetowa J.O.Ramsay functionaldata.org. (Uniwersytet Montrealski), https:// [5] Richard A.Johnson, Dean W.Wichern, Applied Multivariate Statistical Analysis. Pearson Education Inc., 2007. [6] J.O.Ramsay, Giles Hoocker, Spence Graves, Functional Data Analysis with Matlab and R. [7] Giles Hoocker, Functional Data Analysis A Short Course. 2010. [8] T. Hsing, R. Eubank, Theoretical Foundations of Functional Data Analysis, with an Introduction to Linear Operators. Wiley, 2015. [9] J.O.Ramsay, H.Wickham, S.Graves, G.Hooker, https://cran.r-project. org/web/packages/fda/fda.pdf. 2015. [10] D. Bosq, Linear Processes in Function Spaces. Springer, 2000. [11] Ngoc Mai Tran, AN INTRODUCTION TO THEORETICAL PROPERTIES OF FUNCTIONAL PRINCIPAL COMPONENT ANALYSIS. Department of Mathematics and Statistics, The University of Melbourne, 2008. [12] M.F.Bande, M.Oviedo de la Fuente, P.Galeano, A.Nieto, E.Garcia-Portugues, https://cran.r-project.org/web/packages/fda.usc/fda.usc.pdf. 2015. [13] Anna Wieżel, Statystyczna analiza danych funkcjonalnych. Funkcjonalny model liniowy. 2016. [14] Michal Benko, Functional Principal Components Analysis, Implementation and Applications. 2004. [15] J. Jakubowski, R. Sztencel, Wstęp do teorii prawdopodobieństwa. Warszawa 2010. 46