Rozkład normalny - Statystyka I z R
Transkrypt
Rozkład normalny - Statystyka I z R
Rozkład normalny Bartosz Maćkiewicz 12 listopada 2016 Programowanie obiektowe hist_1= hist(beaver1$temp, freq = FALSE) 0.0 0.5 1.0 1.5 2.0 2.5 Density Histogram of beaver1$temp 36.2 36.4 36.6 36.8 37.0 beaver1$temp 37.2 37.4 37.6 Programowanie obiektowe class(hist_1) ## [1] "histogram" attributes(hist_1) ## ## ## ## ## $names [1] "breaks" "counts" "density" $class [1] "histogram" hist_1$xname = 'Korporacyjny ład' hist_1$counts = c(25,26,27,28,29,30) hist_1$breaks = c(3,35,77,78,79,81,100) "mids" "xname" "equidist" Programowanie obiektowe plot(hist_1) 10 15 20 25 30 5 0 Frequency Histogram of Korporacyjny ład 0 20 40 60 Korporacyjny ład 80 100 Errata 80 80 breaks = c(1:7), freq = FALSE) breaks = c(1:8)-0.5, freq = FALSE) 40 40 Frequency 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0.4 2 3 4 5 6 7 2 3 4 5 0 0.0 0.2 Density 0.4 0.2 0.0 1 df$Poziom[df$Grupa == "Help"] 1 df$Poziom[df$Grupa == "Harm"] 20 40 60 1 df$Poziom[df$Grupa == "Harm"] Density breaks = c(1:7)) breaks = c(1:8)-0.5) 0 40 80 0 Frequency df = read.csv('../24pazdz/wyniki_hindriks.csv') par(mfrow = c(2,3)) hist(df$Poziom[df$Grupa == 'Harm'], main = NULL, hist(df$Poziom[df$Grupa == 'Harm'], main = NULL, barplot(table(df$Poziom[df$Grupa == 'Harm'])) hist(df$Poziom[df$Grupa == 'Help'], main = NULL, hist(df$Poziom[df$Grupa == 'Help'], main = NULL, barplot(table(df$Poziom[df$Grupa == 'Help'])) 1 2 3 4 5 6 7 df$Poziom[df$Grupa == "Help"] 1 2 3 4 5 6 7 Praca domowa I I I I RMarkdown zamiast skryptów w R jest obowiązkowy od przyszłego tygodnia Dokument w RMarkdownie jako karta pracy. Jak sie nauczyć? Można albo obejrzeć mój filmik ale jak ktoś nie lubi to na pewno znajdzie w internecie odpowiednie materiały. Staramy się trzymać wymogów formalnych, ale nie jesteśmy jakimiś szaleńcami okrutnymi. Zadanie 1 Rozważmy dziesięciokrotny rzut symetryczną monetą. Jakie jest prawdopodobieństwo wyrzucenia: I co najwyżej 4 orłów (prawidłowa odpowiedź: 0.3759. . . ), set.seed(12345) sum(dbinom(x=1:4, size = 10, prob = 0.5)) ## [1] 0.3759766 s = rbinom(size=10, n = 10000, prob = 0.5) length(s[s<=4])/length(s) ## [1] 0.3732 Zadanie 1 I mniej niż 4 orłów (prawidłowa odpowiedź: 0.1708. . . ), set.seed(12345) sum(dbinom(x=1:3, size = 10, prob = 0.5)) ## [1] 0.1708984 s = rbinom(size=10, n = 10000, prob = 0.5) length(s[s<4])/length(s) ## [1] 0.1689 Zadanie 1 I więcej niż 4 orłów (prawidłowa odpowiedź: 0.6230. . . ), sum(dbinom(x=5:10, size = 10, prob = 0.5)) ## [1] 0.6230469 s = rbinom(size=10, n = 10000, prob = 0.5) length(s[s>4])/length(s) ## [1] 0.6194 Zadanie 1 I pomiędzy 4 a 7 orłów (prawidłowa odpowiedź: 0.7734. . . ). sum(dbinom(x=4:7, size = 10, prob = 0.5)) ## [1] 0.7734375 s = rbinom(size=10, n = 10000, prob = 0.5) length(s[s>=4 & s <= 7])/length(s) ## [1] 0.7737 Zadanie 2 Pewnym testem zbadano 500 11-latków i 800 14-latków. W grupie młodszych dzieci średni wynik wyniósł 48, a odchylenie standardowe — 8, natomiast w grupie starszych dzieci te liczby wynosiły odpowiednio 56 i 12. Przy założeniu rozkładu normalnego oszacuj, (a) ile 14-latków osiągnęło wyniki gorsze od średniej 11-latków, (odpowiedź: ≈ 202 ); (b) ile 11-latków osiągnęło wyniki lepsze niż średnia 14-latków (odpowiedź: ≈ 79 ). Proszę rozwiązać to zadanie za pomocą pnorm oraz zasymulować. pnorm(48,56,12)*800 ## [1] 201.994 mean(replicate(1000, length(which(rnorm(800,56,12)<48)))) ## [1] 202.823 pnorm(56,48,8, lower.tail = FALSE)*500 ## [1] 79.32763 mean(replicate(1000, length(which(rnorm(500,48,8)>56)))) ## [1] 79.517 Zadanie 3 Napisz funkcję (symulację), która jako wynik zwraca histogram sumy wyników uzyskanych na trzech kostkach. Funkcja ma mieć następującą postać: hist_trzech_rzutow(liczba_scian, liczba_replikacji) Liczba ścian ma przyjmować wartość domyślną 6, liczba replikacji 1000. Po przekazaniu funkcji liczby ścian mniejszej niż 3 (zakładamy, że istnieją porządne 3-ścienne kostki) ma dodatkowo drukować na ekranie napis “UWAGA TO NIE KOSTKA”, przy wartości 1 ma zwracać wartość NA. Dla chętnych - sprawdzić w internecie jak się obsługuje ostrzeżenia i błędy w R i spróbować zaimplementować tę wiedzę. Zadanie 3 hist_trzech_rzutow = function(l_scian, l_replikacji){ x = replicate(l_replikacji, {sum(sample(1:l_scian,3, replace = TRUE))}) hist(x)} hist_trzech_rzutow(6,10000) 800 400 0 Frequency 1200 Histogram of x 5 10 15 x Zadanie 4 Wykonaj 3 symulacje losując z rozkładu normalnego 10, 35 i 100 liczb. Wykonaj 3 panelowy wykres, na którym za pomocą histogramu przedstawisz rozkład próbki. Nałóż na niego rozkład populacji, z której losowałeś za pomocą funkcji curve. sym = list(x = rnorm(10), y = rnorm(35), z = rnorm(100)) par(mfrow = c(1,3)) for(s in sym){hist(s, freq = FALSE); curve(dnorm(x), add = TRUE)} Histogram of s Histogram of s Density 0.2 0.1 0.0 Density 0.2 0.1 0.0 0.2 0.1 0.0 Density 0.3 0.3 0.3 0.4 0.4 Histogram of s Zadanie 5 Wylicz za pomocą symulacji prawdopodobieństwo, że co najmniej dwie osoby z grupy 23 osób maja urodziny tego samego dnia. Przyjmij, że prawdopodobieństwo urodzenia się każdego dnia jest takie samo, a rok ma 365 dni (odpowiedź: ≈ 0.5). losowanko = function(){ any(table(sample(1:365, 23, replace = TRUE))>1) } x = replicate(10000, losowanko()) table(x)[2]/length(x) ## TRUE ## 0.5041 Zadanie 6 1. Narysuj histogramy z danymi dotyczącymi GPA i ADDSC z pliku Add.dat. df = read.table('Add.dat', header = TRUE) par(mfrow =c(1,2)) hist(df$GPA) hist(df$ADDSC) Histogram of df$ADDSC 30 20 0 5 10 Frequency 20 15 10 5 0 Frequency 25 Histogram of df$GPA 0.5 1.5 2.5 3.5 20 40 60 80 Zadanie 6 2. Oblicz średnią, wariancje i odchylenie standardowe. mean(df$GPA) ## [1] 2.45625 mean(df$ADDSC) ## [1] 52.60227 var(df$GPA) ## [1] 0.7420628 var(df$ADDSC) ## [1] 154.3113 sd(df$GPA) ## [1] 0.8614307 sd(df$ADDSC) ## [1] 12.42221 Zadanie 6 3. Oblicz średnią, wariancje i odchylenie standardowe z podziałem na płeć. tapply(df$GPA, df$Gender, mean) ## 1 2 ## 2.235818 2.823636 tapply(df$ADDSC, df$Gender, mean) ## 1 2 ## 54.29091 49.78788 tapply(df$GPA, df$Gender, var) ## 1 2 ## 0.6523322 0.6939676 tapply(df$ADDSC, df$Gender, var) ## 1 2 ## 166.4694 125.5473 tapply(df$GPA, df$Gender, sd) ## 1 2 ## 0.8076708 0.8330472 tapply(df$ADDSC, df$Gender, sd) ## 1 2 ## 12.90230 11.20479 Zadanie 6 4. Nałóż na histogramy krzywą rozkładu normalnego o parametrach takich, jakie mają rozkłady empiryczne. hist(df$GPA, freq = FALSE) curve(dnorm(x, mean(df$GPA), sd(df$GPA)), add = TRUE) 0.4 0.2 0.0 Density 0.6 Histogram of df$GPA 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 Zadanie 6 hist(df$ADDSC, freq = FALSE) curve(dnorm(x, mean(df$ADDSC), sd(df$ADDSC)), add = TRUE) 0.02 0.01 0.00 Density 0.03 Histogram of df$ADDSC 20 30 40 50 60 df$ADDSC 70 80 90 Zadanie 6 5. Wykonaj scatterplot na podstawie kolumny z IQ oraz ADDSC oraz IQ i GPA. Co możesz powiedzieć o relacji między tymi zmiennymi na pierwszy rzut oka? Sprawdź w książce Howella co oznacza kolumna ADDSC. 30 40 50 60 70 80 df$ADDSC plot(df$IQ, df$ADDSC) 80 90 100 110 df$IQ 120 130 Zadanie 6 2.0 1.0 df$GPA 3.0 4.0 plot(df$IQ, df$GPA) 80 90 100 110 df$IQ 120 130 Wykres kwantylowy W statystyce do sprawdzania, czy dana zmienna ma pewien rozkład (np. rozkład normalny) uzywa się tzw. wykresów kwantylowych (Quantile to Quantile (Q-Q) plot). Wykres kwantylowy I Jesli rozkład jest bardziej skoncentrowany na lewo od normalnego, to lewa część wykresu znajduje się ponad przekątną. I Jesli rozkład jest mniej skoncentrowany na lewo od normalnego, to lewa cześć wykresu znajduje się poniżej przekątnej. I Jesli rozkład jest bardziej skoncentrowany na prawo od normalnego, to prawa część wykresu znajduje się poniżej przekątnej. I Jeśli rozkład jest mniej skoncentrowany na prawo od normalnego, to prawa część wykresu znajduje się ponad przekątną. I Jeśli rozkład jest lewostronnie asymetryczny, to krzywa leży ponad przekątną w środku wykresu. I Jesli rozkład jest prawostronnie asymetryczny, to krzywa leży poniżej przekątnej w środku wykresu. I Jesli rozkład jest symetryczny, to krzywa przecina przekatną w środku wykresu. Wykres kwantylowy - nasza własna implementacja wykres_kwantylowy = function(x){ x = sort(x) # Tworzymy kolejne teoretyczne obserwacje (np. dla n = 100: # To będą kolejne wartości naszych percentyli # (1 - 1/2)/100 = 0.005 # (2 - 1/2)/100 = 0.015 # (3 - 1/2)/100 = 0.025 # ... # (99-1/2)/100 = 0.985 # (100-1/2)/100 = 0.995 y = ((1:length(x)) - 1/2)/length(x) y = qnorm(y) # tutaj obliczamy ile percentyle wynoszą plot(y,x, pch =3) # i nanosimy to na wykres } Wykres kwantylowy dla rozkładu normalne set.seed(12345) x = rnorm(500) par(mfrow=c(1,2)) wykres_kwantylowy(x) qqnorm(x) 2 1 0 −2 −1 0 −1 −2 x 1 Sample Quantiles 2 Normal Q−Q Plot −3 −1 1 2 3 −3 −1 1 2 3 x = runif(500) par(mfrow=c(1,2)) hist(x) wykres_kwantylowy(x) qqline(x) 0.6 0.2 0.4 x 30 0.0 10 0 Frequency 50 0.8 1.0 Histogram of x 0.0 0.4 0.8 x −3 −1 1 y 2 3 x = rpois(500,3) + runif(500) par(mfrow=c(1,2)) hist(x) wykres_kwantylowy(x) qqline(x) 8 2 4 x 6 20 40 60 80 0 0 Frequency 120 Histogram of x 0 2 4 6 x 8 −3 −1 1 y 2 3 x = rgamma(500, 3, 1/2) par(mfrow=c(1,2)) hist(x) wykres_kwantylowy(x) qqline(x) 5 10 15 x 20 100 60 0 0 20 Frequency 25 140 Histogram of x 0 5 10 20 x −3 −1 1 y 2 3 x = rsn(500, alpha = -2) par(mfrow=c(1,2)) hist(x) wykres_kwantylowy(x) qqline(x) −3 −2 −1 x 100 50 0 Frequency 0 1 150 Histogram of x −3 −2 −1 x 0 1 −3 −1 1 y 2 3 x = rchisq(500, 8) par(mfrow=c(1,2)) hist(x) wykres_kwantylowy(x) qqline(x) 25 20 15 5 10 x 20 40 60 80 0 0 Frequency 120 Histogram of x 0 5 10 20 x −3 −1 1 y 2 3 x = rt(500, 4) par(mfrow=c(1,2)) hist(x) wykres_kwantylowy(x) qqline(x) −6 −4 −2 0 x 2 100 50 0 Frequency 4 6 150 Histogram of x −6 −2 2 4 6 x −3 −1 1 y 2 3 x = rbeta(500,2,2) par(mfrow=c(1,2)) hist(x) wykres_kwantylowy(x) qqline(x) 0.6 0.4 x 40 0.0 0.2 20 0 Frequency 60 0.8 1.0 Histogram of x 0.0 0.4 0.8 x −3 −1 1 y 2 3 x = rcauchy(500); x = x[x>-10 & x<10] par(mfrow=c(1,2)) hist(x) wykres_kwantylowy(x) qqline(x) 5 −10 −5 0 x 100 50 0 Frequency 150 10 Histogram of x −10 −5 0 x 5 10 −3 −1 1 y 2 3