Krzysztof Trajkowski. Analiza i wizualizacja danych naukowych



Podobne dokumenty
Kurs z matematyki - zadania

7. OPRACOWYWANIE DANYCH I PROWADZENIE OBLICZEŃ powtórka

Test F- Snedecora. będzie zmienną losową chi-kwadrat o k 1 stopniach swobody a χ

Zadania z parametrem

MATEMATYKA 4 INSTYTUT MEDICUS FUNKCJA KWADRATOWA. Kurs przygotowawczy na studia medyczne. Rok szkolny 2010/2011. tel

Temat: Funkcje. Własności ogólne. A n n a R a j f u r a, M a t e m a t y k a s e m e s t r 1, W S Z i M w S o c h a c z e w i e 1

ROZWIĄZANIA ZADAŃ Zestaw P3 Odpowiedzi do zadań zamkniętych

Matematyka ubezpieczeń majątkowych r.

PAKIET MathCad - Część III

BIOMETRIA 3. Wprowadzenie do pakietu SAS

Kurs wyrównawczy dla kandydatów i studentów UTP

Moduł. Rama 2D suplement do wersji Konstruktora 4.6

1 Wizualizacja danych - wykresy 2D

Wyznaczanie współczynnika sprężystości sprężyn i ich układów

14.Rozwiązywanie zadań tekstowych wykorzystujących równania i nierówności kwadratowe.

OBLICZENIA STATYCZNO-WYTRZYMAŁOŚCIOWE PRZEJŚCIE DLA ZWIERZĄT W KM PRZĘSŁO 1. NORMY, PRZEPISY, LITERATURA.

Arkusz maturalny treningowy nr 7. W zadaniach 1. do 20. wybierz i zaznacz na karcie odpowiedzi poprawną odpowiedź.

Studenckie Koło Naukowe Drogowiec

1. Rozwiązać układ równań { x 2 = 2y 1

Bazy danych. Andrzej Łachwa, UJ, /15

Ćwiczenie: "Ruch harmoniczny i fale"

TEST WIADOMOŚCI: Równania i układy równań

W. Guzicki Zadanie 23 z Informatora Maturalnego poziom rozszerzony 1

1 Granice funkcji. Definicja 1 (Granica w sensie Cauchy ego). Mówimy, że liczba g jest granicą funkcji f(x) w punkcie x = a, co zapisujemy.

Matematyka:Matematyka I - ćwiczenia/granice funkcji

Jak spersonalizować wygląd bloga?

Tytu : GRAPHER Podr cznik u ytkownika ISBN: Autor: Zbigniew Galon Rok wydania: 2009 Stron: 408 Wydawca: Gambit COiS Sp. z o.o.

7. REZONANS W OBWODACH ELEKTRYCZNYCH

SCENARIUSZ LEKCJI. TEMAT LEKCJI: Zastosowanie arkusza kalkulacyjnego EXCEL do rozwiązywania układów równań liniowych metodą wyznacznikową

Grapher Instrukcje. Histogram

Jan Olek. Uniwersytet Stefana Kardynała Wyszyńskiego. Procesy z Opóźnieniem. J. Olek. Równanie logistyczne. Założenia

Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x

Zadanie 1. Liczba szkód w każdym z trzech kolejnych lat dla pewnego ubezpieczonego ma rozkład równomierny:

Pomiary napięć i prądów w obwodach prądu stałego

STA T T A YSTYKA Korelacja

np. tu - na pierwszej formatce kreatora zaznaczamy opcję nr 3

I. LOGICZNE STRUKTURY DRZEWIASTE

Projekt Nowa oferta edukacyjna Uniwersytetu Wrocławskiego odpowiedzią na współczesne potrzeby rynku pracy i gospodarki opartej na wiedzy

ANALOGOWE UKŁADY SCALONE

LABORATORIUM PODSTAW TELEKOMUNIKACJI

Temat: Mnożenie liczby całej przez ułamek. Obliczanie ułamka z danej liczby.

Instrukcja do ćwiczeń laboratoryjnych Numeryczne metody analizy konstrukcji

ZASADY REPRODUKCJI SYMBOLI GRAFICZNYCH PRZEDMOWA

Statystyczna analiza danych w programie STATISTICA. Dariusz Gozdowski. Katedra Doświadczalnictwa i Bioinformatyki Wydział Rolnictwa i Biologii SGGW

Geometria Wykreślna Wykład 3

Specyfikacja techniczna banerów Flash

Instrukcja użytkowania DRIVER. Programator z przewodem sterowniczym. DRIVER 610 lub lub 2 strefy DRIVER

> x <-seq(-2*pi, 2*pi, by=0.5) > plot(x, sin(x), type="b",main="wykres funkcji sin(x) i cos(x)", col="blue") > lines(x, cos(x), type="l",col="red")

INSTRUKCJA Panel administracyjny

tel/fax lub NIP Regon

KONKURSY MATEMATYCZNE. Treść zadań

Krzysztof Trajkowski. Przegląd pakietów do optymalizacji liniowej

Połączenie VPN Host-LAN IPSec z wykorzystaniem Windows XP. 1. Konfiguracja serwera VPN. 2. Konfiguracja klienta VPN. 3. Zainicjowanie połączenia

SCHEMATY STRON. Baner Nawigacja Nawigacja okruszkowa Prawa kolumna zobacz również Boksy Zwykła strona...

Statystyki opisowe. Marcin Zajenkowski. Marcin Zajenkowski () Statystyki opisowe 1 / 57

STEROWNIK BIOLOGICZNYCH OCZYSZCZALNI ŚCIEKÓW

Podstawowe pojęcia: Populacja. Populacja skończona zawiera skończoną liczbę jednostek statystycznych

Wyklad 1. Analiza danych za pomocą pakietu SAS. Obiekty i zmienne. Rodzaje zmiennych

Nowe funkcjonalności

1 Kilka uwag teoretycznych

1/9. CCTV Tester. Instrukcja obsługi ver Wymagania systemowe: - Windows XP, Windows Vista, Windows 7 - wolny port USB -.NET Framework 3.

Metody numeryczne i statystyka dla in»ynierów

Odpowiedzi i schematy oceniania Arkusz 23 Zadania zamknięte. Wskazówki do rozwiązania. Iloczyn dwóch liczb ujemnych jest liczbą dodatnią, zatem

Matematyka dla liceum/funkcja liniowa

DEMERO Automation Systems

PAKIETY STATYSTYCZNE 5. SAS wprowadzenie - środowisko Windows

SFML. (Simple and Fast Multimedia Library)

Geomagic Design X jest najbardziej wszechstronnym oprogramowaniem, które umożliwia:

KONKURS PRZEDMIOTOWY Z FIZYKI dla uczniów gimnazjów województwa lubuskiego 23 marca 2012 r. zawody III stopnia (finałowe)

Obciążenia środowiskowe: śnieg i wiatr wg PN-B-02010/Az1 i PN-B-02011/Az1

Zakres pomiaru (Ω) Rozdzielczość (Ω) Dokładność pomiaru

DRGANIA MECHANICZNE. materiały uzupełniające do ćwiczeń. Wydział Samochodów i Maszyn Roboczych studia inżynierskie

Pathfinder poprawny dobór parametrów i zachowań ludzi w czasie ewakuacji.

Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.

Segment B.XII Opór elektryczny Przygotował: Michał Zawada

Matplotlib. Krzysztof Katarzyński. Centrum Astronomii UMK

LXV OLIMPIADA FIZYCZNA ZAWODY III STOPNIA

BLOK I. 3. Korzystając z definicji pochodnej w punkcie, obliczyć pochodne podanych funkcji we wskazanych punktach:

Metrologia cieplna i przepływowa

TESTER LX 9024 (SYSTEM ALARMOWY IMPULSOWY) INSTRUKCJA OBSŁUGI

nowe procedury i formy wizualizacji

PROCEDURA OCENY RYZYKA ZAWODOWEGO. w Urzędzie Gminy Mściwojów

Programowanie dynamiczne

Instrukcja do ćwiczenia Kompensacja mocy biernej

Podstawa prawna: Ustawa z dnia 15 lutego 1992 r. o podatku dochodowym od osób prawnych (t. j. Dz. U. z 2000r. Nr 54, poz. 654 ze zm.

Wtedy wystarczy wybrać właściwego Taga z listy.

Ćwiczenie: Badanie normalności rozkładu. Wyznaczanie przedziałów ufności

INSTRUKCJA SERWISOWA. Wprowadzenie nowego filtra paliwa PN w silnikach ROTAX typ 912 is oraz 912 is Sport OPCJONALNY

Temat: Co to jest optymalizacja? Maksymalizacja objętości naczynia prostopadłościennego za pomocą arkusza kalkulacyjngo.

EGZAMIN MATURALNY Z MATEMATYKI

MATEMATYKA 9. INSTYTUT MEDICUS Kurs przygotowawczy do matury i rekrutacji na studia medyczne Rok 2017/2018 FUNKCJE WYKŁADNICZE, LOGARYTMY


'()(*+,-./01(23/*4*567/8/23/*98:)2(!."/+)012+3$%-4#"4"$5012#-4#"4-6017%*,4.!"#$!"#%&"!!!"#$%&"#'()%*+,-+

EGZAMIN MATURALNY Z MATEMATYKI MAJ 2011 POZIOM ROZSZERZONY. Czas pracy: 180 minut. Liczba punktów do uzyskania: 50 WPISUJE ZDAJĄCY

Dodano: KALKULATOR BRUTTO-NETTO

Arkusz kalkulacyjny MS Excel podstawy

Obciążenie dachów wiatrem w świetle nowej normy, cz. 1

Wyznaczenie sprawności grzejnika elektrycznego i ciepła właściwego cieczy za pomocą kalorymetru z grzejnikiem elektrycznym

Transkrypt:

Krzysztof Trajkowski Analiza i wizualizacja danych naukowych 27 marca 2013

Spis treści 1. Wykresy liniowe.................................... 1 2. Wykresy paskowe i histogramy........................... 5 3. Estymacja i wygładzanie............................... 9 4. Interpolacja....................................... 15 1

1. Wykresy liniowe Mamy do dyspozycji pewne dane: # dane - zmienna s1: set. seed (3691) s1= abs ( rnorm (48) ) Wiemy, że pomiary były wykonywane od godziny 06:00, 31 grudnia 2012 do godziny 05:30, 01 stycznia 2013 roku co 30 minut: # dane - zmienna s1 i zmienna czas : s1= data. frame ( czas = seq ( as. POSIXct (" 2012-12 -31 06:00:00 "), as. POSIXct (" 2013-01 -01 05:30:00 "), by = "30 min "), s1) library ( ggplot2 ) ggplot (s1, aes (x= czas, y= s1)) + geom _ line () 2.0 1.5 s1 1.0 0.5 0.0 gru 31 06:00 gru 31 12:00 gru 31 18:00 sty 01 00:00 sty 01 06:00 czas Rys. 1.1. Wykres liniowy. Ustawienia domyślne można modyfikować w zależności od własnych potrzeb. Rysunek 1.2 to przykład modyfikacji kilku ustawień. Została dodana funkcja theme_bw() zatem tło wykresu zostało zamienione na białe, zmieniono także kolory i linie siatek, na osi x została zwiększona częstość podziałki (co 3 godziny) oraz zmodyfikowano zapis daty i czasu na osi x. library ( scales ) ggplot (s1, aes (x= czas, y= s1))+ geom _ line ( colour = " red3 ",size = 1)+ theme _bw ()+ scale _x_ datetime ( breaks = date _ breaks ("3 hours "), labels = date _ format ("%Y\n%d %b\n%h:%m"))+ theme ( panel. grid. minor = element _ line ( colour = " gray ", linetype = " dotted "), panel. grid. major = element _ line ( colour = " black ", linetype = " dashed ")) 2

2.0 1.5 s1 1.0 0.5 0.0 2012 31 gru 07:00 2012 31 gru 10:00 2012 31 gru 13:00 2012 31 gru 16:00 2012 31 gru 19:00 czas 2012 31 gru 22:00 2013 01 sty 01:00 2013 01 sty 04:00 Rys. 1.2. Wykres liniowy. Możemy także wyodrębnić interesujący nas okres oraz dodać legendę. ggplot (s1)+ geom _ line ( aes (x=czas,y=s1, colour =" substrat Am"),size =1) + scale _ colour _ manual ( values =" red3 ")+ labs ( colour = "")+ theme _bw ()+ scale _x_ datetime ( limits =c( as. POSIXct (" 2012-12 -31 16:00:00 "), as. POSIXct (" 2013-01 -01 00:00:00 ")), breaks = date _ breaks ("1 hours "),labels = date _ format ("%Y %b\n%h:%m"))+ theme ( legend. position = " top ", panel. grid. major.x= element _ line ( colour =" black ", linetype = " dashed "), panel. grid. major.y= element _ blank (), panel. grid. minor = element _ blank ()) substrat Am 2.0 1.5 s1 1.0 0.5 0.0 2012 gru 16:00 2012 gru 17:00 2012 gru 18:00 2012 gru 19:00 2012 gru 20:00 czas 2012 gru 21:00 2012 gru 22:00 2012 gru 23:00 2013 sty 00:00 Rys. 1.3. Wykres liniowy. 3

W zależności od tego jaki chcemy uzyskać format daty/czasu na osi x możemy używać następujących kodów: Tabela 1.1. Formatowanie daty i czasu kod oznaczenie wynik %S sekunda 00-59 %M minuta 00-59 %l godzina 1-12 %I godzina 01-12 %H godzina 00-23 %a dzień tygodnia - skrócona nazwa pon-nie %A dzień tygodnia - cała nazwa poniedziałek-niedziela %e dzień miesiąca 1-31 %d dzień miesiąca 01-31 %m miesiąc - numer 01-12 %b miesiąc - skrócona nazwa sty-gru %B miesiąc - cała nazwa styczeń-grudzień %y rok - skrócony zapis 00-99 %Y rok - pełny zapis 0000-9999 Środowisko R oraz pakiet ggplot2 może być dobrym narzędziem do wykonywania wykresów funkcji matematycznych. Poniżej na rysunku (1.4) są trzy wykresy: f(x) = sin(x) dla x ( 2 π, π (1.1) oraz f(x) = 0, 1157(x + 2) 2 + 3, 5 (1.2) x 2 + y 2 = 1 (1.3) library ( shape ) X= getellipse (1,1, mid =c (0,0) )[,1] Y= getellipse (1,1, mid =c (0,0) )[,2] fun1 = function (x) ifelse (x >= -pi/2 & x < pi, sin (x), NA) fun2 = function (x) -0.1157 *(x +2) ^2+3.5 ggplot ( data. frame (X,Y),aes (X,Y))+ theme _bw ()+ ylim ( -1,3)+ coord _ fixed ( ratio = 1)+ geom _ path ( col =" red3 ",size =1) + stat _ function ( fun = fun1, size =1) + stat _ function ( fun = fun2, size =1, lty =2, col =" orange ")+ geom _ point ( aes (-pi/2, -1),factor =1, size =3, pch =21, col =" black ", bg=" white ")+ geom _ point ( aes (pi,0),factor =1, size =3, pch =21, col =" black ",bg=" black ")+ scale _x_ continuous ( limits =c(-pi/2,3*pi/2), breaks =c(-pi/2, 0, pi/2, pi, 3*pi/2), labels =c( expression (-pi/2), expression (0), expression (pi/2), expression (pi),expression (3*pi/2)))+ opts ( plot. background = theme _ rect ( fill = " lemonchiffon2 ", colour = NA)) 4

3 2 Y 1 0 1 π 2 0 π 2 π 3π 2 X Rys. 1.4. Okrąg, sinusoida i funkcja kwadratowa. Poniżej zaprezentujemy dwa wykresy funkcji prawdopodobieństwa (rozkład wykładniczy: E(λ = 2) oraz rozkład chi-kwadrat: χ 2 (df = 6)) z wykorzystaniem rozkładu gamma: Γ(λ, k) = gdzie: λ > 0 parametr skali, k > 0 parametr kształtu. λk Γ(k) xk 1 exp( xλ) (1.4) vals = seq (1,3,.01) ggplot ( mapping = aes (x=vals, y= dgamma (vals, shape =2, scale =1) ))+ xlim (0,6) + theme _bw ()+ geom _ area ( mapping = ( aes (x=vals,y= dgamma (vals, shape =6/2, scale =1/2))), fill =" red ", alpha =1/4)+ stat _ function ( fun = dgamma, arg = list ( shape = 6/2, scale = 1/2), aes ( colour = " a"), lwd =1) + # a - funkcja przypisana do koloru : red3 geom _ area ( mapping = ( aes (x=vals, y= dgamma (vals, shape =2, scale =1) )), fill =" blue ", alpha =1/4)+ stat _ function ( fun = dgamma, arg = list ( shape = 2, scale = 1), aes ( colour = " b"), lwd =1) + # b - funkcja przypisana do koloru : blue scale _ colour _ manual ( values = c(" red3 "," blue "), labels = c( bquote ( chi ^2)," exp "))+ labs ( colour = " Rozkłady \ ngamma ")+ geom _ text ( aes (x= 2, y= 0.1), label = " część wspólna ") dgamma(vals, shape = 2, scale = 1) 0.4 0.2 część wspólna Rozkłady gamma χ 2 exp 0.0 0 2 4 6 vals Rys. 1.5. Rozkład wykładniczy i chi-kwadrat. 5

2. Wykresy paskowe i histogramy W tym rozdziale wykorzystamy dane HairEyeColor. W pierwszej kolejności przygotujemy dane tzn. przekształcimy tabelę kontyngencji HairEyeColor w ramkę danych df: df= as. data. frame ( HairEyeColor ) p= ggplot (df, aes (x= Eye, y=freq, fill = Hair ))+ geom _ bar ( position = " fill ",alpha =0.4) + facet _ wrap (~ Sex )+ coord _ flip ()+ scale _ fill _ manual ( values = c(" yellow "," orange "," bisque4 "," black "), labels =c(" Blond "," Red "," Brown "," Black "))+ scale _y_ continuous ( labels = percent ) # parametry wykresu : D= ggplot _ build (p)$ data [[1]] # wykres + wartości procentowe pasków : p+ geom _ text ( aes (D$x,D$y-D$ymin, label = percent (D$y-D$ ymin ),factor =1), size = 4, hjust = 1, vjust = 0.5, position = " stack ",angle =45) Male Female Green 9.1% 45.5% 21.2% 24.2% 6.5% 45.2% 22.6% 25.8% Eye Hazel Blue Brown 10.9% 21.3% 32.7% 53.2% 49.5% 9.9% 14.9% 10.6% 29.7% 54.1% 10.2% 3.1% 10.9% 7.9% 29.5% 29.8% 6.1% 63.0% 54.1% 15.2% 10.9% 56.1% 13.1% 3.3% 0% 25% 50% 75% 100% 0% 25% 50% 75% 100% Freq Hair Blond Red Brown Black Rys. 2.1. Frakcje kolorów włosów (Hair) z podziałem na kolor oczu i płeć. ddf = aggregate ( Freq ~ Hair +Eye, data =df, FUN = sum ) p= ggplot (ddf, aes (x= Eye, y=freq, fill = Hair ))+ geom _ bar ( position = " fill ",alpha =0.4) + coord _ flip ()+ scale _ fill _ manual ( values = c(" yellow "," orange "," bisque4 "," black "), labels =c(" Blond "," Red "," Brown "," Black "))+ scale _y_ continuous ( labels = percent ) # parametry wykresu : D= ggplot _ build (p)$ data [[1]] # wykres + wartości procentowe pasków : p+ geom _ text ( aes (D$x,D$y-D$ymin, label = percent (D$y-D$ ymin ),factor =1), size = 4, hjust = 1, vjust = 0.5, position = " stack ",angle =45) 6

Green 7.8% 45.3% 21.9% 25.0% Eye Hazel Blue 9.3% 16.1% 39.1% 7.9% 58.1% 15.1% 10.8% 43.7% Hair Blond Red Brown Black Brown 30.9% 54.1% 11.8% 3.2% 0% 25% 50% 75% 100% Freq Rys. 2.2. Frakcje kolorów włosów (Hair) z podziałem na kolor oczu. dddf = aggregate ( Freq ~ Hair, data =df, FUN = sum ) p= ggplot (dddf, aes (x= factor (""),y=freq, fill = Hair ) )+ geom _ bar ( position = " fill ",alpha =0.4, width =0.5) + coord _ flip ()+ scale _ fill _ manual ( values = c(" black "," bisque4 "," orange "," yellow "), labels =c(" Black "," Brown "," Red "," Blond "))+ scale _y_ continuous ( labels = percent ) # parametry wykresu : D= ggplot _ build (p)$ data [[1]] # wykres + wartości procentowe pasków : p+ geom _ text ( aes (D$x,D$y-D$ymin, label = percent ( round (D$y-D$ymin,4) ),factor =1), size = 4, hjust = 1, vjust = 0.5, position = " stack ") factor("") 18.2% 48.3% 12.0% 21.4% Hair Black Brown Red Blond 0% 25% 50% 75% 100% Freq Rys. 2.3. Frakcje kolorów włosów (Hair). Należy zaznaczyć, że w funkcji geom_bar(ggplot2) (rys. 2.1 2.3) wykorzystaliśmy opcję position="fill". Do graficznej prezentacji liczebności można także użyć opcji "dodge" lub "stack". 7

W tym rozdziale przedstawimy także wykresy zwane histogramami. Poniżej kilka przykładów z wykorzystaniem danych ChickWeight gdzie weight oznacza wagę kurczaka natomiast Diet to rodzaj diety. Oprócz wykonania histogramów wag kurczaków z podziałem na rodzaj diety, każdy histogram porównamy z rozkładem gamma (1.4). Parametry rozkładu gamma: Γ(λ, k) zostały obliczone na podstawie wzorów: x = k λ (2.1) gdzie: x to średnia, natomiast σ 2 to wariancja. σ 2 = k λ 2 (2.2) library ( plyr ) grid = with ( ChickWeight, seq ( min ( weight ), max ( weight ), length = 100) ) GAMMA = ddply ( ChickWeight, " Diet ", function (df) { data. frame ( predicted = grid, density = dgamma (grid, shape = mean (df$ weight )^2/var (df$ weight ), rate = mean (df$ weight )/ var (df$ weight ))) }) ggplot ( data = ChickWeight, aes (x = weight ))+ facet _ wrap (~Diet, nrow = 1, ncol = 4)+ geom _ histogram ( aes (y =.. density..),colour =" white ",fill =" bisque4 ", alpha =0.8, binwidth =20, breaks = seq (0,400, by =50) ) + geom _ line ( data = GAMMA, aes (x= predicted, y= density ), colour = " red3 ",size = 1) 0.008 1 2 3 4 density 0.006 0.004 0.002 0.000 0 100 200 300 400 0 100 200 300 400 0 100 200 300 400 0 100 200 300 400 weight Rys. 2.4. Rozkład wag kurczaków z podziałem na rodzaj diety. Poniżej histogram bez podziału na stosowaną dietę. Zamiast wartości domyślnych dla parametrów binwidth i breaks wykorzystaliśmy wartości z funkcji density(stats) oraz hist(graphics). BW= density ( ChickWeight $ weight )$bw BR= hist ( ChickWeight $ weight, plot =F)$ breaks ggplot ( ChickWeight, aes (x = weight ))+ geom _ histogram ( aes (y =.. density..),colour =" bisque4 ", fill =" bisque4 ", alpha =0.5, binwidth =BW, breaks = BR)+ stat _ function ( fun = dgamma, colour = " red3 ", size =1, arg = list ( shape = mean ( weight )^2/var ( weight ), rate = mean ( weight )/ var ( weight ))) 8

0.006 density 0.004 0.002 0.000 0 100 200 300 400 weight Rys. 2.5. Rozkład wag kurczaków. Funkcja gęstości. d2= with ( density ( weight ),data. frame (x,y)) ggplot ( data = d2, mapping = aes (x= x, y= y))+ geom _ line ( data = d2, mapping = aes (x= x, y= y), colour =" bisque4 ",lwd =0.2) + geom _ area ( data =d2, mapping = aes (x= x, y= y), fill =" bisque4 ", alpha =0.5) + stat _ function ( fun = dgamma, colour = " red3 ", lwd =1, arg = list ( shape = mean ( weight )^2/var ( weight ), rate = mean ( weight )/ var ( weight ))) 0.006 0.004 y 0.002 0.000 0 100 200 300 400 x Rys. 2.6. Rozkład wag kurczaków. 9

3. Estymacja i wygładzanie W tym rozdziale przedstawimy dopasowanie krzywych do danych doświadczalnych (tzw. fitowanie) z wykorzystaniem nieliniowej metody najmniejszych kwadratów: algorytm Gaussa-Newtona nls(stats) i algorytm Levenberga-Marquardta nlslm(minpack.lm). Na końcu zaprezentujemy także kilka metod wygładzania danych. Na podstawie danych pomiarowych zamieszczonych poniżej: # dane : xs=c (0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0) ys=c( 0.800,0.810,0.800,0.820,0.815,0.820,0.835,0.870,0.890,0.960,0.990) ye=c( 0.013,0.017,0.014,0.014,0.014,0.011,0.015,0.014,0.013,0.017,0.013) ds= data. frame (xs,ys,ye) oszacujemy parametry modelu o postaci: y = ax b + c (3.1) z wykorzystaniem funkcji nls(stats). W modelu uwzględnimy także błąd pomiaru. # algorytm Gaussa - Newtona : fit1 = nls (ys=a*xs^b+c, start = list (a =0.5, b=2,c =0.5), weights =ye, data =ds) summary ( fit1 ) Formula : ys ~ a * xs ^ b + c Parameters : Estimate Std. Error t value Pr ( > t ) a 0.194929 0.009651 20.198 3.77e -08 *** b 3.216612 0.366544 8.776 2.23e -05 *** c 0.804732 0.004953 162.484 2.30e -15 *** --- Signif. codes : 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 Residual standard error : 0. 001191 on 8 degrees of freedom Number of iterations to convergence : 6 Achieved convergence tolerance : 2. 454 e -06 # oszacowana funkcja : fun1 = function (x) coef ( fit1 ) [1] *x^ coef ( fit1 ) [2]+ coef ( fit1 ) [3] ggplot (ds, aes (x=xs,y=ys))+ theme _bw ()+ scale _x_ continuous ( breaks = seq (0,1, by =0.1) )+ stat _ function ( fun =fun1, size =1, colour =" blue ")+ geom _ errorbar ( aes (x=xs, ymin =ys -ye, ymax =ys+ye), width =0.01, size =0.5, colour =" red3 ")+ geom _ point ( size =3, colour =" red3 ") 10

1.00 0.95 ys 0.90 0.85 0.80 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 xs Rys. 3.1. Fitowanie. Tym razem wykorzystamy algorytm Levenberga-Marquardta do oszacowania modelu o postaci: y = y 0 + A exp ( (x xc ) 2 ) 2 ω 2 gdzie: y 0 parametr przesunięcia, A wysokość, ω szerokość, x c środek wykresu. # dane : xg=c (1.0,1.9,2.8,4.1,5.3,6.8,8.1,9.0,9.8,10.5,11.2,11.9) yg=c (0.3,0.5,0.9,1.9,3.5,4.1,2.5,1.0,0.8,0.6,0.5,0.3) dg= data. frame (xg,yg) (3.2) # algorytm Levenberga - Marquardta : library ( minpack.lm) fit2 = nlslm (yg~y0+a* exp (( -1*(xg -xc)^2) /(2*w ^2) ), start = list (y0 =0.5, A=4, xc =6, w =2),data =dg) summary ( fit2 ) Formula : yg ~ y0 + A * exp (( -1 * (xg - xc)^2) /(2 * w ^2) ) Parameters : Estimate Std. Error t value Pr ( > t ) y0 0. 40237 0. 07127 5. 646 0. 000484 *** A 3.85641 0.13352 28.882 2.23e -09 *** xc 6.28066 0.05366 117.036 3.18e -14 *** w 1.57771 0.06983 22.593 1.56e -08 *** --- Signif. codes : 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 Residual standard error : 0. 1447 on 8 degrees of freedom Number of iterations to convergence : 6 Achieved convergence tolerance : 1. 49 e -08 11

# oszacowana funkcja : fun2 = function (x) coef ( fit2 ) [1]+ coef ( fit2 ) [2] * exp (( -(x- coef ( fit2 ) [3]) ^2) /(2* coef ( fit2 ) [4]) ) ggplot (dg, aes (x=xg,y=yg))+ theme _bw ()+ geom _ point ( size =3) + stat _ function ( fun =fun2, size =1, colour =" blue ") 4 3 yg 2 1 2.5 5.0 7.5 10.0 xg Rys. 3.2. Fitowanie. Dopasowywanie specyficznych krzywych jest często stosowane w takich naukach jak: biologia, medycyna, farmakologia czy toksykologia. Przykładem może być estymacja parametrów równania Michaelisa-Mentena: # dane : S=c (1.0,2.7,3.4,4.1,5.3,6.8,8.7,9.8,12.0,13.2) V=c (2.1,2.5,3.8,3.5,4.9,6.1,7,7.9,8.5,8.6) D= data. frame (S,V) V = S V max S + K m (3.3) # algorytm Gaussa - Newtona : fit3 = nls (V~ SSmicmen (S,Vmax,Km)) summary ( fit3 ) Formula : V ~ SSmicmen (S, Vmax, Km) Parameters : Estimate Std. Error t value Pr ( > t ) Vmax 5.42532 0.09705 55.90 1.16e -11 *** Km 1.88394 0.14908 12.64 1.44e -06 *** --- Signif. codes : 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 Residual standard error : 0. 1259 on 8 degrees of freedom 12

Number of iterations to convergence : 0 Achieved convergence tolerance : 9. 707 e -07 # oszacowana funkcja : fun3 = function (x) SSmicmen (x, coef ( fit3 )[1], coef ( fit3 ) [2]) ggplot (D,aes (x=s,y=v))+ theme _bw ()+ geom _ point ( size =3) + stat _ function ( fun =fun3, size =1, colour =" blue ")+ scale _x_ continuous ( breaks =c( coef ( fit3 ) [2],23.6), labels =c( round ( coef ( fit3 ) [2],4),23.6) )+ scale _y_ continuous ( limits =c (0,5.5), breaks =c( coef ( fit3 ) [1] /2, coef ( fit3 ) [1]), labels =c( round ( coef ( fit3 ) [1] /2,4),round ( coef ( fit3 ) [1],4) )) 5.4253 V 2.7127 1.8839 23.6 S Rys. 3.3. Zależność szybkości reakcji enzymatycznej (V ) od stężenia substratu (S). Także i w tym przypadku możemy wykorzystać algorytm Levenberga-Marquardta: # algorytm Levenberga - Marquardta : fit4 = nlslm (V~ SSmicmen (S,Vmax,Km)) Dużo większa rodzina funkcji wzrostu lub sigmoidalnych jest dostępna w pakiecie drc. W artykułach: Bioassay Analysis using R oraz Dose response curves and other nonlinear curves in Weed Science and Ecotoxicology with the add-on package drc in R można znaleźć wiele przykładów wykorzystania tego pakietu w praktyce. W tej części opracowania przedstawimy kilka funkcji do wygładzania danych. W pierwszej kolejności wykorzystamy dwie funkcje: loess(stats) oraz ns(splines). library ( splines ) set. seed (193) x= seq (0.1,1, by =.01) y= sin (1.5 /x) ^3+ rnorm (x, s =0.1) f= function (x) sin (1.5 /x)^3 d= data. frame (x,y) 13

ggplot (d,aes (x,y))+ geom _ point ( pch =21, col =" black ",bg=" white ",size =2.5) + stat _ function ( fun =f,aes ( colour ="a"),size =1) + stat _ smooth ( span =0.1, se=f,aes ( colour ="b"),size =1) + stat _ smooth ( method = "lm",formula =y~ns(x,5),se=f,aes ( colour ="c"), size =1) + scale _ colour _ manual ( name = " Legenda ", values = c(" black "," red3 "," blue "), labels =c(" fun "," loess ","ns")) 1.0 y 0.5 0.0 0.5 Legenda fun loess ns 1.0 0.25 0.50 0.75 1.00 x Rys. 3.4. Wygładzanie. W pakiecie ggplot2 możemy wykonać szereg wykresów diagnostycznych. Wszystkie niezbędne dane są dostępne w tabeli fortify(ns) do której możemy dopisywać kolejne zmienne. # zmienne :.hat,. sigma,. cooksd,. fitted,. resid,. stdresid : diag1 = fortify (ns) # dodanie nowej zmiennej rows : diag2 = cbind ( diag1, rows =1: nrow ( diag1 )) Poniżej wykonamy dwa wykresy diagnostyczne dla modelu ns. Pierwszy z wykorzystaniem danych z funkcji fortify(ggplot2) natomiast drugi z wykorzystaniem dopisanej zmiennej rows z tabeli diag2. # wykresy : plot1 = ggplot (ns, aes ( sample =. stdresid )) + stat _qq ()+ geom _ abline ( colour =" blue ")+ labs ( title = "QQ normal ") plot2 = ggplot ( diag2, aes (rows,. cooksd, ymin =0, ymax =. cooksd ))+ geom _ linerange ()+ labs ( title = "Cook s distance ") # rozmieszczenie wykresów : library ( grid ) pushviewport ( viewport ( layout = grid. layout (1, 2))) print ( plot1, vp= viewport ( layout. pos. row = 1, layout. pos. col = 1)) print ( plot2, vp= viewport ( layout. pos. row = 1, layout. pos. col = 2)) 14

Normal Q Q 0.20 Cook s distance 2 0.15 sample 0.cooksd 0.10 2 0.05 0.00 2 1 0 1 2 theoretical 0 25 50 75 rows Rys. 3.5. Wykresy diagnostyczne modelu ns. Bardzo ciekawe rozwiązania są dostępne również w pakiecie aratio. Na rysunku (3.6) rezultat wygładzania danych metodą fourier1 oraz cubespline1. library ( aratio ) fitf = fourier1 (y~x, minq =1, maxq =10) fitc = cubespline1 (y~x, mink =1, maxk =10) ggplot (d,aes (x,y))+ geom _ point ( pch =21, col =" black ",bg=" white ",size =2.5) + stat _ function ( fun =f,aes ( colour ="a"),size =1) + geom _ line ( aes (x, fitf $yhat, colour ="b"),size =1) + geom _ line ( aes (x, fitc $yhat, colour ="c"),size =1) + scale _ colour _ manual ( name =" Legenda ", values = c(" black "," red3 "," blue "), labels =c(" fun "," fourier "," cubespline1 ")) 1.0 y 0.5 0.0 0.5 Legenda fun fourier cubespline1 1.0 0.25 0.50 0.75 1.00 x Rys. 3.6. Wygładzanie. 15

Warto także wspomnieć o pakiecie signal który oferuje szeroki zestaw funkcji do przetwarzania sygnałów. W tej bibliotece znajdziemy filtr Savitzkyego-Golaya, Czybyszewa oraz wiele innych technik przeznaczonych do usuwania szumów z sygnałów skażonych czyli do ich wygładzania i filtrowania. 4. Interpolacja W tym rozdziale przedstawimy dwa algorytmy interpolacyjne: Cubic splines spline(stats) oraz Akima splines aspline(akima). Pierwszy przykład to obliczanie wartości funkcji f(x) = sin(x) która jest zadana w x postaci 16 równoodległych punktów na przedziale x 30; 30. x= seq ( -30,30, by =4) ; y= sin (x)/x t= data. frame (x,y) # wykresy : library ( akima ) ggplot (t,aes (x,y))+ stat _ function ( fun = function (x) sin (x)/x,n =300, aes ( colour = "a"), size =1) + geom _ line ( data = data. frame ( spline (t, n =200, method =" natural ")),aes ( colour ="b"),size =1) + geom _ line ( data = data. frame ( aspline (t, n =200) ),aes ( colour ="c"),size =1) + geom _ point ( size =2.5, pch =21, col =" black ",bg=" white ")+ scale _ colour _ manual ( name = " Legenda ", values = c(" black "," red3 "," gold "), labels =c( bquote ( frac ( sin (x), x))," natural "," AKIMA ")) 1.00 0.75 y 0.50 Legenda sin(x) x natural 0.25 AKIMA 0.00 0.25 20 0 20 x Rys. 4.1. Interpolacja. Przybliżenie funkcji będzie lepsze gdy weźmiemy pod uwagę więcej punktów np. 61 równoodległych punktów. 16

x= seq ( -30,30, by =1) ;y= sin (x)/x t= data. frame (x,y) # wykresy : ggplot (t,aes (x,y))+ stat _ function ( fun = function (x) sin (x)/x,n =300, aes ( colour = "a"), size =1) + geom _ line ( data = data. frame ( spline (t, n =200, method =" natural ")),aes ( colour ="b"),size =0.5) + geom _ line ( data = data. frame ( aspline (t, n =200) ),aes ( colour ="c"),size =0.5, lty =2) + geom _ point ( size =2.5, pch =21, col =" black ",bg=" white ")+ scale _ colour _ manual ( name = " Legenda ", values = c(" black "," red3 "," gold "), labels =c( bquote ( frac ( sin (x), x))," natural "," AKIMA ")) 0.8 y 0.4 Legenda sin(x) x natural AKIMA 0.0 20 0 20 x Rys. 4.2. Interpolacja. Kolejny przykład dotyczy tzw. zagęszczania tablic. Na podstawie danych w tabeli 4.1 obliczymy jaka była temperatura o godzinie 14:30. Tabela 4.1. Temperatura. godzina [h] 7 8 9 10 11 12 13 14 15 16 17 temperatura [ C] -2,7 0,0 6,5 10,7 15,9 16,9 16,8 12,7 6,5 2,5-2,1 x =7:17 y=c ( -2.7,0,6.5,10.7,15.9,16.9,16.8,12.7,6.5,2.5, -2.1) t= data. frame (x,y) # natural : Yn= spline (x,y, method =" natural ",xout =c (14.5) )$y; Yn [1] 9. 495417 # AKIMA : Ya= aspline (x,y, xout =c (14.5) )$y; Ya [1] 9. 479256 17

# wykresy : ggplot (t,aes (x,y))+ geom _ line ( data = data. frame ( spline (t, n =200, method =" natural ")),col =" red3 ",size =1) + geom _ line ( data = data. frame ( aspline (t, n =200) ),col =" gold ",size =0.5) + geom _ point ( col =" red3 ",size =2.5, pch =21, bg=" white ")+ geom _ point ( aes (x =14.5, y=yn, colour ="a"),pch =20, size =4) + geom _ point ( aes (x =14.5, y=ya, colour ="b"),pch =20, size =1) + scale _ colour _ manual ( name = " metody ", values = c(" red3 "," gold "), labels =c(" natural "," AKIMA "))+ scale _x_ continuous ( limits =c (7,17), breaks =7:17) 15 10 metody y 5 natural AKIMA 0 7 8 9 10 11 12 13 14 15 16 17 x Rys. 4.3. Interpolacja. 18