-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwarsztat_2016.10.24.Rmd
290 lines (206 loc) · 13 KB
/
warsztat_2016.10.24.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
---
title: "Statystyka I z R<br/>Warsztat 4. Rozkłady łączne i warunkowe"
author: "Tomasz Żółtak"
date: "24 października 2016"
output:
html_document:
css: ../styles.css
toc: TRUE
toc_depth: 3
---
Na dzisiejszych zajęciach zapoznamy się z wykorzystaniem funkcji `table()` do tworzenia rozkładów łącznych dwóch zmiennych i (rodzin rozkładów) warunkowych. Będziemy też ćwiczyć przekładanie pytań badawczych na tworzenie rozkładów, pozwalających uzyskać na nie odpowiedzi. Poznamy również **podstawy** wizualizowania (dyskretnych) rozkładów zmiennych w R przy pomocy wykresów słupkowych.
# Rozkłady łączne i warunkowe (rodziny rozkładów warunkowych)
Zacznijmy od wczytania danych, na których będziemy dalej pracować. Funkcja `load()` pozwala wczytać obiekty R zapisane w natywnym formacie R-a, czyli .RData (linijka wcześniej służy upewnieniu się, że bęziemy próbowali wczytać dane z odpowiedniego folderu). Funkcja `load()` zwraca nazwy wczytanych obiektów - w tym przypadku jest to 11 wektorów. Wektor o nazwie *etykiety* opisuje znaczenie pozostałych wektorów, które zawierają dane - zmienne z badania Polski Generalny Sondaż Społeczny (uwzględniono tylko wybrane edycje i tylko respondentów pomiędzy 20 a 29 rokiem życia).
```{r comment="", prompt=TRUE, collapse=TRUE}
try(setwd("warsztat 2016.10.24"), silent = TRUE)
nazwyObiektow = load("dane_2016.10.24.RData")
nazwyObiektow
etykiety
summary(cbind(Y, X, Z, W, V1, V2, V3, V4, V5, V6, V7))
```
## Funkcja table()
### Rozkłady łączne dwóch zmiennych
Funkcja `table()` pozwala też łatwo uzyskać **łączny rozkład liczebności** dwóch zmiennych - wystarczy podać jej jako drugi argument inny wektor (o tej samej liczbie elementów, co ten, który podajemy jako pierwszy argument).
```{r comment="", prompt=TRUE, collapse=TRUE}
# łączny rozkład liczebności zadowolenia z własnego wykształcenia
# i roku przeprowadzenia badania PGSS
nV7Y = table(V7, Y)
nV7Y
```
Zwrócony obiekt, jak w przypadku jednowymiarowym, jest typu *table*, ale tym razem ma dwa wymiary i możemy go traktować podobnie jak macierz.
```{r comment="", prompt=TRUE, collapse=TRUE}
str(nV7Y)
colnames(nV7Y)
rownames(nV7Y)
nV7Y[3:4, 2:3]
```
Do uzyskanego rozkładu możemy też dodać rozkłady brzegowe, przy pomocy poznanej już wcześniej funkcji `addmargins()`. Wywołanie jej bez podania drugiego parametru spowoduje dodanie wszystkich możliwych (tu: dwóch) rozkładów brzegowych. Możemy też zrobić to *na piechotę*, korzystając z funkcji `rowSums()`, `colSums()`, `rbind()` i `cbind()`.
```{r comment="", prompt=TRUE, collapse=TRUE}
# przy pomocy funkcji addmargins()
addmargins(nV7Y)
# "na piechotę"
nBV7Y = rbind(nV7Y, "łącznie" = colSums(nV7Y))
nBV7Y = cbind(nBV7Y, "łącznie" = rowSums(nBV7Y))
nBV7Y
```
---
#### Zadanie
Dysponując łącznym rozkładem liczebności zmiennych *V7* i *Y*, zapisanym w obiekcie `nV7Y` oblicz **łączny rozkład częstości** tych zmiennych i przypisz go do obiektu `pV7Y`. Pokaż ten rozkład w konsoli z wartościami zaokrąglonymi do trzeciego miejsca po przecinku, używając polecenia `round(pV7Y, 3)`.
```{r comment="", prompt=TRUE, collapse=TRUE}
# to jest miejsce na Twój kod
pV7Y = nV7Y / sum(nV7Y)
pV7Y = nV7Y / nBV7Y[nrow(nBV7Y), ncol(nBV7Y)]
pV7Y = addmargins(pV7Y)
round(pV7Y, 3)
```
---
### Rozkłady warunkowe
**Warunkowe rozkłady liczebności** w istocie możemy traktować po prostu jako *wycinki* z łącznego rozkładu liczebności.
```{r comment="", prompt=TRUE, collapse=TRUE}
# warunkowy rozkład liczebności zadowolenia z własnego wykształcenia
# dla roku badania PGSS równego 1995
nV7Y[, colnames(nV7Y) == "1995"]
# warunkowy rozkład liczebności zadowolenia z własnego wykształcenia
# dla roku badania PGSS mniejszego niż 2000
temp = nV7Y[, as.numeric(colnames(nV7Y)) < 2000]
temp
rowSums(temp)
```
**Rodzina warunkowych rozkładów liczebności** jest z kolei właściwie tożsama, z łącznym rozkładem liczebności, z którego *obcięto* rozkład brzegowy jednej zmiennej.
```{r comment="", prompt=TRUE, collapse=TRUE}
# łączny rozkład liczebności zadowolenia z własnego wykształcenia
# i roku badania PGSS
addmargins(nV7Y)
# rodzina warunkowych rozkładów liczebności zadowolenia z własnego wykształcenia
# pod warunkiem roku badania PGSS
addmargins(nV7Y)[, -(ncol(nV7Y) + 1)]
# lub równoważnie (a nawet prościej)
addmargins(nV7Y, 1)
```
Pojedynczy **warunkowy rozkład częstości** możemy uzyskać na podstawie odpowiedniego warunkowego rozkładu liczebności w analogiczny sposób, jak brzegowy rozkład częstości na podstawie brzegowego rozkładu liczebności.
```{r comment="", prompt=TRUE, collapse=TRUE}
# jakiś rozkład warunkowy
nWarunkowyV7Y1995 = nV7Y[, colnames(nV7Y) == "1995"]
nWarunkowyV7Y1995
# "ręcznie"
pWarunkowyV7Y1995 = nWarunkowyV7Y1995 / sum(nWarunkowyV7Y1995)
pWarunkowyV7Y1995
# przy pomocy funkcji prop.table
prop.table(nWarunkowyV7Y1995)
```
**Pamiętamy oczywiście o tym, że w sytuacji, gdy do nasz rozkład łączny już wcześniej uzupełniliśmy o rozkłady brzegowe, musielibyśmy obliczyć to nieco inaczej!**
**Rodzinę warunkowych rozkładów częstości** również możemy uzyskać przy pomocy funkcji `prop.table()`, podając jej drugi (opcjonalny), argument. Podobnie jak w przypadku funkcji `addmargins()` wskazuje on, *w którą stronę* ma być wykonana operacja (tu: procentowania). Żeby sprawy nie były zbyt proste, **wartości tego drugiego argumentu mają inne znaczenie w ramach funkcji `prop.table()`, niż w ramach funkcji `addmargins()`**:
* `prop.table()`: 1 - procentuj w wierszach, 2 - procentuj w kolumnach;
* `addmargins()`: 1 - dodaj rozkład brzegowy pierwszej zmiennej (dla dwóch zmiennych: ten na dole, tzn. sumuj w kolumnach), 2 - dodaj rozkład brzegowy drugiej zmienej (dla dwóch zmiennych: ten po prawej, tzn. sumuj w wierszach).
```{r comment="", prompt=TRUE, collapse=TRUE}
# rodzina warunkowych rozkładów częstości zadowolenia z własnego wykształcenia
# w zależności od roku badania PGSS
rWRPV7Y = addmargins(prop.table(nV7Y, 2), 1)
rWRPV7Y
round(rWRPV7Y, 3)
```
---
#### Zadanie
Korzystając z poznanych możliwości tworzenia rozkładów łącznych i warunkowych, przygotuj rozkłady pozwalające udzielić odpowiedzi na poniższe pytania, a następnie analizując rozkłady udziel odpowiedzi na te pytania.
1. Jaka jest kategoria welkości miejscowości zamieszkania, w ramach której badani najczęściej są bardzo zadowoleni z życia rodzinnego?
- Aby odpowiedzieć na to pytanie należy przeanalizować rodzinę warunkowych rozkładów częstości zmiennej **V3** ze względu na zmienną **X**.
- Kategoria wielkości miejscowości zamieszkania, w ramach której badani są najczęściej bardzo zadowoleni z życia rodzinnego to **TU WPISZ odpowiedź**.
```{r comment="", prompt=TRUE, collapse=TRUE}
# to jest miejsce na Twój kod - przygotuj odpowiedni rozkład/rozkłady
pV3X = prop.table(table(V3, X), 2)
addmargins(pV3X, 1)
round(pV3X, 3)
```
2. O ilu więcej/mniej jest w analizowanej grupie respondentów mieszkających na wsi, którzy zostali zbadani w latach 1992-1999, niż respondentów mieszkających w miastać o wielkości od 100 tys. do 500 tys. mieszkańców, którzy zostali zbadaniu w latach 2005-2010?
- Aby odpowiedzieć na to pytanie należy przeanalizować **TU WPISZ SWOJĄ ODPOWIEDŹ**.
- Respondentów mieszkających na wsi, którzy zostali zbadani w latach 1992-1999, jest w analizowanej grupie o **PODAJ LICZBĘ** **więcej/mniej**, niż respondentów mieszkających w miastać o wielkości od 100 tys. do 500 tys. mieszkańców, którzy zostali zbadaniu w latach 2005-2010.
```{r comment="", prompt=TRUE, collapse=TRUE}
# to jest miejsce na Twój kod - przygotuj odpowiedni rozkład/rozkłady
```
3. Czy w analizowanej grupie daje się dostrzec związek pomiędzy zadowoleniem ze stanu własnego zdrowia, a zadowoleniem z własnego wykształcenia?
- Aby odpowiedzieć na to pytanie należy przeanalizować **TU WPISZ SWOJĄ ODPOWIEDŹ**.
- Zadowolenie z własnego stanu zdrowia i zadowolenie z własnego wykształcenia są ze sobą w badanej grupie powiązane, w ten sposób, że **OPISZ, JAKi OGÓLNY ZWIĄZEK DOSTRZEGASZ**.
```{r comment="", prompt=TRUE, collapse=TRUE}
# to jest miejsce na Twój kod - przygotuj odpowiedni rozkład/rozkłady
```
---
# Podstawy tworzenia wykresów
## Funkcja barplot()
### Prosta wizualizacja rozkładu jednej zmiennej
Wykres słupkowy obrazujący rozkład jednej zmiennej możemy uzyskać korzystając z funkcji `barplot`, której jako argument podajemy rozkład danej zmiennej (uwaga, bez ew. elementu z sumą).
```{r comment="", prompt=TRUE, collapse=TRUE}
nX = table(X)
pX = prop.table(nX)
barplot(nX)
barplot(pX)
```
Funkcja ma też dużą liczbę dodatkowych argumentów, które pozwalają nam zarządzać jego wyglądem i uzupełnić o dodatkowe elmenty (np. tytuł, czy etykiety osi). Funkcji `grid()` możemy użyć, aby dodać linie siatki.
```{r comment="", prompt=TRUE, collapse=TRUE}
barplot(pX, col = 3,
main = "Wielkość miejscowości zamieszkania w analizowane zbiorowości",
ylab = "czestość")
grid(col = grey(0.3), nx = NA, ny = NULL)
```
Czasem bardziej użyteczne byłoby pokazanie wykresu w postaci *skumulowanej* - słupków reprezentujących częstość (względnie liczebność) poszczególnych słupków *nałożonych jeden na drugim*. Możemy to łatwo uzyskać, konwertując nasz rozkład na macierz przed przekazaniem funkcji `barplot()`.
```{r comment="", prompt=TRUE, collapse=TRUE}
barplot(as.matrix(nX))
# nawet mając macierz możemy wrócić do poprzedniego wyglądu
barplot(as.matrix(nX), beside = TRUE)
# żeby móc coś zrozumieć, warto dodać legendę
barplot(as.matrix(pX), col = 2:6,
main = "Wielkość miejscowości zamieszkania w analizowane zbiorowości",
legend.text = TRUE, args.legend = list(x = "right"), xlim = c(0, 1.8))
```
Niestety kwestia pozycjonowania legendy nie jest tu rozwiązana w niezawodny sposób i w ramach kombinacji funkcji `barplot()` i `legend()` nie da się na to nic łatwo poradzić.
### Prosta wizualizacja rozkładu dwóch zmiennych
Opisane poniżej rozwiązania można oczywiście zastosować do różnych typów rozkładów łącznych i rodzin rozkładów warunkowych, ale **prowadząc analizy zwykle skupiamy się na porównywania ze sobą rozkładów w ramach rodziny warunkowych rozkładów częstości**. Stąd przykład odnosi się właśnie do takiej rodziny rozkładów.
```{r comment="", prompt=TRUE, collapse=TRUE}
# rodzina warunkowych rozkładów częstości zadowolenia z własnego wykształcenia
# w zależności od roku badania PGSS
rWRPV7Y = prop.table(nV7Y, 2)
barplot(rWRPV7Y)
```
Bez legendy, tytułu i etykiet osi trochę trudno się zorientować, o co chodzi.
```{r comment="", prompt=TRUE, collapse=TRUE}
barplot(rWRPV7Y,
main = "Zadowolenie z własnego wykształcenia\nw różnych rundach badania PGSS",
xlab = "rok badania PGSS",
ylab = "częstość",
legend.text = TRUE, args.legend = list(x = "right"), xlim = c(0, 10))
```
Możemy też uzyskać wykres w postaci słupków zestawionych obok siebie - choć w tym przypadku jest on raczej mniej użyteczny analitycznie.
```{r comment="", prompt=TRUE, collapse=TRUE}
barplot(rWRPV7Y, beside = TRUE,
main = "Zadowolenie z własnego wykształcenia\nw różnych rundach badania PGSS",
xlab = "rok badania PGSS",
ylab = "częstość",
legend.text = TRUE, args.legend = list(x = "topright"), ylim = c(0, 0.9))
```
---
#### Zadanie
Wykonaj wykres słupkowy (w formie skumulowanej), ilustrujący rozkład(y), które wykorzystałeś/aś do odpowiedzi na pyanie 3. w poprzednim zadaniu: czy w analizowanej grupie daje się dostrzec związek pomiędzy zadowoleniem ze stanu własnego zdrowia, a zadowoleniem z własnego wykształcenia?
```{r comment="", prompt=TRUE, collapse=TRUE}
# to jest miejsce na Twój kod - przygotuj odpowiedni rozkład/rozkłady
```
Zastanów się, dlaczego dokonałeś/aś procentowania (wybrałeś/aś jako zmienną grupującą) właśnie tą zmienną, a nie drugą. Czy możnaby równie dobrze zamienić obie zmienne rolami? Od czego to zależy?
---
# Na następne zajęcia
## Praca domowa
Zostanie nadesłana mailem.
## Do przeczytania na następne zajęcia
G. Lissowski, J. Haman i M. Jasiński. (2011). Podstawy statystyki dla socjologów. Wyd. II poprawione. Warszawa: Wydawnictwo Naukowe SCHOLAR. - Rozdziały: 1.1.-1.2., rozdziały 1.2.2, 3.5.-3.6., 4.1.-4.2. oraz 4.5. w zakresie, w jakim odnosi się do parametrów omówionych w 4.1. i 4.2.
Względnie inne publikacje, w których opisane są
* rodzaje skal pomiarowych (nominalne/porządkowe/przedziałowe/ilorazowe/absolutne)
i następujące parametry poziomu wartości zmiennych statystycznych:
* modalna (dominanta),
* minimum i maksimum,
* mediana,
* kwartyle,
* średnia,
oraz następujące parametry rozproszenia zmiennych statystycznych:
* rozstęp,
* odchylenie ćwiartkowe,
* odchylenie przeciętne od mediany,
* wariancja,
* odchylenie standardowe,
* współczynnik zmienności.