530 likes | 686 Views
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
E N D
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
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.
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) 2 3 4 2 3 4 2 (x, x, 2) 2 3 4 0 2 3 4 ( y=[x,0,x] ) 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 xdaje 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 2 4 6 a[ 2, 1 ]<- 0 1 3 5 0 4 6
Macierze (2) b 5 6 a 1 3 2 4 1 3 5 2 4 6 X<- cbind( a, b ) daje X= 1 3 2 4 1 3 2 4 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
Rama danych Specjalna lista do składowania danych 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
summary( weight ) Min. 1st Qu. Median Mean 3rd Qu. Max. 108.0 204.5 258.0 261.3 323.5 423.0
stem( weight ) 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…
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 populacjachAi 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)
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
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
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