R
R – środowisko do manipulowania danymi obliczeń na macierzach analizy statystycznej tworzenia wykresów tworzenia własnych programów, także statystycznych
http://cran.R-project.org Standardowa instalacja Środowisko + 8 ‘standardowych’ pakietów statystycznych Inne pakiety można instalować później
R pod Linuxem $ mkdir mojkatalog $ cd mojkatalog $ R >… >q( )
R w Windows Utwórz „mojkatalog” W skrócie do R ustaw właściwość „Rozpocznij w” (np. c:\mojkatalog)
Pomoc w R help( table ) lub ?table help.start( ) – odpala przeglądarkę i wyświetla pomoc w postaci strony html help.search – poszukiwanie pomocy na różne sposoby example( temat ) – wyświetla przykład dla danego tematu
; oddziela kolejne komendy w tym samej linii # ta linia jest niewa¿na Jêzyk R A i a to dwie ró¿ne rzeczy Polecenia R ; oddziela kolejne komendy w tym samej linii # ta linia jest niewa¿na ª strzałka przywraca poprzednie komendy
Uruchamianie komend przygotowanych w pliku tekstowym Linux source(„mojekomendy.R”) Windows menu File->Source Zapamiętanie wyników w pliku sink(„mojewyniki.txt”) sink( ) – wyniki z powrotem na ekran
Obiekty czyli liczby, znaki, tabele, funkcje … objects( ) - wyświetla wszystkie bieżące obiekty rm( x, y ) – usuwa obiekty x i y Wszyskie obiekty razem tworzą workspace. Może być zapamiętany w twoim katalogu jeśli zechcesz.
concatenate = powiązać Tworzymy wektor liczb (obiekt) assign( x, c( 2.0, 3.0, 4.0 ) ) lub krócej x <- c( 2.0, 3.0, 4.0 ) albo c( 2.0, 3.0, 4.0 ) -> x i dalej Y <- c( x, 0, x ) – razem 7 liczb concatenate = powiązać
aRytmetyka v <- 2 * x + y + 1 2 3 4 2 3 4 2 (x, x, 2) 1 1 1 1 1 1 1 ---------------------------- 7 10 13 5 9 12 9 (v)
aRytmetyka + - * / ^ log exp sin cos tan sqrt sqrt( 3^2 ) daje 3 x daje 2 3 4 max( x ) daje 4 min( x ) daje 2 length( x ) daje 3 sum( x ) daje 9
Funkcje statystyczne mean( x ) daje 3 sum( x ) / length( x ) daje 3 var( x ) daje 1
Sekwencje regularne z <- 1:7 daje 1 2 3 4 5 6 7 z <- seq( -1.5, 1.0, by=0.5 ) daje -1.50 -1.0 -0.5 0.0 0.5 1.0 z <- seq( length=4, from=10, by=2 ) daje 10 12 14 16
Wektory znakowe pakiet <- c( „SAS”, „R” ) jaki <- c( „płatny”, „darmowy” ) A <- paste( pakiet, jaki, sep=„ jest ” ) daje „SAS jest płatny” „R jest darmowy”
Wybieranie z wektora (1) a <- ( ”pies”, ”kot”, ”mysz”, ”papuga”) a[2] kot a[4] papuga a[3:4] mysz papuga
Wybieranie z wektora (2) a <- c( 6, 7, 8, 9 ) a[ -(2:3) ] daje 6 i 9 a[ a >= 8 ] daje 8 i 9 a[ a != 7 ] daje 6, 8 i 9 a[ a>6 & a!=8 ] daje 7 i 9 a[ a<7 | a>8 ] -> b teraz b zawiera 6 i 9
Zmienna grupująca (1) styl <- c(”jazz”, ”folk”, ”hh”, ”hh”, ”folk” ) grupa <- factor( styl ) ; grupa [1] jazz folk hh hh folk Levels: folk hh jazz table( grupa ) folk hh jazz 2 2 1
Obliczamy średnie w grupach styl<- c( ”jazz”, ”folk”, ”hh”, ”hh”, ”folk” ) cena <- c( 40 , 30 , 61 , 63 , 40 ) grupa <- factor( styl ) ; tapply ( cena, grupa, mean ) daje folk hh jazz 35 62 40
Macierze (1) a <- 1:6 1 2 3 4 5 6 dim( a ) <- c( 2, 3 ) 1 3 5 1 3 5 2 4 6 a[ 2, 1 ] <- 0 0 4 6
Macierze (2) a 1 3 b 5 2 4 6 1 3 5 X<- cbind( a, b ) daje X= 2 4 6 X<- rbind( a, a ) daje X=
Lista rodzina <- list( tata=Jan, mama=Maria, l.dzieci=3, wiek.dzieci = c(5, 2, 1) ) rodzina[ [2] ] to Maria rodzina[ [4] ] [3] to 1 albo rodzina$tata daje Jan
Specjalna lista do składowania danych Rama danych Specjalna lista do składowania danych ID IMIE RASA wagaP wagaK 1049 Aniel jamnik 18 16 1219 Rabuś spaniel 26 24.5 1246 Lotna 19 18.5 1078 Docent 22.7 Gdy pierwszy wiersz danych stanowią nazwy (header) kolumn Psy <-read.table( „mojplik.txt” , header=TRUE ) attach( Psy ) # udostępnia dane NowePsy <- edit( Psy ) #edycja danych
Dane przykładowe data( ) wypisuje wszystkie bazy danych data( nazwa_danych ) udostępnia dane Jeżeli przykładowe dane są poza pakietem base library( nls ) udostępnia pakiet nls data( ) data( Puromycin ) udostępnia dane
Wczytujemy przykładowe dane data( ) data( chickwts ) attach( chickwts ) chickwts weight feed 1 179 horsebean 2 160 horsebean 3 136 horsebean 4 227 horsebean 5 217 horsebean 6 168 horsebean …………………
Podstawowa analiza danych podstawowe statystyki wykres ‘łodyga-liście’ histogram zgodność z rozkładem normalnym dystrybuanta emp. i teoretyczna wykres kwantyl-kwantyl test Shapiro-Wilka
Min. 1st Qu. Median Mean 3rd Qu. Max. summary( weight ) Min. 1st Qu. Median Mean 3rd Qu. Max. 108.0 204.5 258.0 261.3 323.5 423.0
stem( weight ) dwie obserwacje: 40… i 42… The decimal point is 2 digit(s) to the right of the | 1 | 124444 1 | 5566777889 2 | 00112223333444 2 | 5556666667778 3 | 0001222222333334444 3 | 5678899 4 | 02 dwie obserwacje: 40… i 42…
hist( weight )
library( stats ) plot( ecdf( weight ) ) Tworzymy empiryczną dystrybuantę czyli empirical cumulative distribution function library( stats ) plot( ecdf( weight ) )
Nakładamy dystrybuantę teoretyczną rozkładu normalnego srednia <- mean( weight ) odch.std <- sqrt( var( weight ) ) x <- seq( 100, 450, 1 ) gestosc <- pnorm( x, srednia, odch.std ) lines( x, gestosc, col = "red„ )
Porównujemy kwantyle empiryczne i teoretyczne prawa strona jest trochę za ‘krótka’ qqnorm( weight ) dodajemy linię prostą qqline( weight )
library( stats ) shapiro.test( weight ) Shapiro-Wilk normality test data: weight W = 0.9767, p-value = 0.2101
Porównanie dwóch populacji O rozkładzie normalnym – test t O dowolnym rozkładzie ciągłym – test nieparametryczny Wilcoxona
table( feed ) feed casein horsebean linseed 12 10 12 meatmeal soybean sunflower 11 14 12
Karma roślinna ( bób + soja + siemię lniane + słonecznik ) R <- weight[ feed == 'horsebean' | feed == 'soybean' | feed == 'linseed' | feed == 'sunflower' ] Karma pochodzenia zwierzęcego ( kazeina + mięso ) Z <- weight[ feed == 'casein' | feed == 'meatmeal' ]
Wykres ramka-wąsy boxplot( R, Z )
Porównanie dwóch populacji - test t t.test( R, Z ) t = -3.3096 df = 48.512 p-value = 0.001767
Testujemy jednorodność wariancji var.test( R, Z ) F test to compare two variances data: R and Z F = 1.2699 num df = 47 denom df = 22 p-value = 0.5519
Test t gdy wariancje są równe t.test( R, Z, var.equal=TRUE ) t = -3.172, df = 69, p-value = 0.002260
Porównanie dwóch populacji o dowolnych rozkładach ciągłych – test nieparametryczny Wilcoxona H0: populacje mają ten sam rozkład ciągły (medianę) H1: mediany rozkładów są różne Brak założeń o normalności rozkładu! Wygodne! Mniejsza moc! Jeśli można lepiej ‘unormować’ dane.
Testy nieparametryczne analizują rangi Obserwacje w populacjach A i B 12, 13, 15, 16, 17, 17.5, 19, 28 Rangi A : 1 3 4 5 Rangi B: 2 6 7 8
Przykład dla danych symulowanych B <- rchisq( 100, 5 ) hist(B) A <- rchisq( 100, 1 ) hist(A)
Wilcoxon rank sum test with continuity correction Test Wilcoxona wilcox.test( A, B ) Wilcoxon rank sum test with continuity correction data: A and B W = 736 p-value < 2.2e-16 alternative hypothesis: true mu is not equal to 0 Przy obserwacjach nie sparowanych Wilcoxon = Mann-Whitney
Porównanie wielu populacji O rozkładzie normalnym – analiza wariancji (ANOVA) O dowolnym rozkładzie ciągłym – test nieparametryczny Kruskal-Wallis
boxplot( weight ~ feed, data = chickwts )
Porównanie dwóch modeli liniowych ANOVA Porównanie dwóch modeli liniowych waga = μ + karma + błąd model1 <- lm( weight ~ 1 + feed, data=chickwts) waga = μ + błąd model2 <- lm( weight ~ 1 , data=chickwts)
ANOVA anova( model1, model2 ) Analysis of Variance Table Model 1: weight ~ 1 Model 2: weight ~ 1 + feed Res.Df RSS Df Sum of Sq F Pr(>F) 1 70 426685 2 65 195556 5 231129 15.365 5.936e-10 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
lm(formula = weight ~ 1 + feed, data = chickwts) Residuals: summary( model1 ) Call: lm(formula = weight ~ 1 + feed, data = chickwts) Residuals: Min 1Q Median 3Q Max -123.909 -34.413 1.571 38.170 103.091 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 323.583 15.834 20.436 < 2e-16 *** feedhorsebean -163.383 23.485 -6.957 2.07e-09 *** feedlinseed -104.833 22.393 -4.682 1.49e-05 *** feedmeatmeal -46.674 22.896 -2.039 0.045567 * feedsoybean -77.155 21.578 -3.576 0.000665 *** feedsunflower 5.333 22.393 0.238 0.812495
ANOVA - Sprawdzamy założenie bartlett.test( weight ~ feed, data = chickwts ) Bartlett test for homogeneity of variances data: weight by feed Bartlett's K-squared = 3.2597 df = 5 p-value = 0.66
Kruskal-Wallis kruskal.test( weight ~ feed, data = chickwts ) Kruskal-Wallis rank sum test Kruskal-Wallis chi-squared = 37.3427 df = 5 p-value = 5.113e-07
Zadanie dla chętnych Analizowano wpływ mutacji w genie leptyny (CC, CG, GG) na ekspresję tego genu (poziom mRNA). Zbadano 14 świń i dla każdej wykonano 3 pomiary ekspresji genu. Zbadaj wpływ genu na średni (z trzech pomiarów) poziom leptyny. Wykorzystaj test nieparametryczny. http://jay.au.poznan.pl/~mcszyd/dyda/pakiety/index.html dane22.txt kol 1: genotyp Leptyny kol 2: pomiar 1 kol 3: pomiar 2 kol 4: pomiar 3