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