diff --git a/warsztat 2016.10.17/warsztat_2016.10.17.Rmd b/warsztat 2016.10.17/warsztat_2016.10.17.Rmd index 38c6d33..a806db2 100644 --- a/warsztat 2016.10.17/warsztat_2016.10.17.Rmd +++ b/warsztat 2016.10.17/warsztat_2016.10.17.Rmd @@ -313,13 +313,14 @@ Jeśli interesuje Cię zrozumienie, co robimy na początku każdych zajęć, aby ## Praca domowa -Pobierz ze strony +Informacja zostanie rozesł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ł 2. Względnie inne źródła, w których opisane zostało co to jest: + * łączny rozkład statystyczny liczebności dwóch zmiennych, * łączny rozkład statystyczny częstości dwóch zmiennych, * rodzina rozkładów warunkowych liczebności, diff --git a/warsztat 2016.10.17/warsztat_2016.10.17.html b/warsztat 2016.10.17/warsztat_2016.10.17.html index 914c47b..4919a4d 100644 --- a/warsztat 2016.10.17/warsztat_2016.10.17.html +++ b/warsztat 2016.10.17/warsztat_2016.10.17.html @@ -144,12 +144,6 @@
Na dzisiejszych zajęciach zapoznamy się z używaniem macierzy. Poznamy też funkcję table()
, przy pomocy której będziemy tworzyć rozkłady zmiennych. Poznamy też sposób tworzenia prostych tabel w Rmarkdown i wizualizowania (dyskretnych) rozkładów zmiennych.
Na dzisiejszych zajęciach zapoznamy się z używaniem macierzy. Poznamy też funkcję table()
, przy pomocy której będziemy tworzyć rozkłady zmiennych.
Macierze to dwuwymiarowe struktury danych składające się z elementów tego samego typu. Możemy wykorzystywać je m. in. do reprezentowania macierzy danych, rozkładów łączynych lub rodzin rozkładów warunkowych.
@@ -725,268 +719,46 @@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).
> # łączny rozkład liczebności zadowolenia z własnego wykształcenia
-> # i roku przeprowadzenia badania PGSS
-> nV7Y = table(V7, Y)
-> nV7Y
- Y
-V7 1992 1995 1999 2005 2010
- 1 Bardzo zadowolony 15 18 34 38 57
- 2 Zadowolony 97 96 149 79 99
- 3 Raczej zadowolony 40 40 79 44 36
- 4 Raczej niezadowolony 27 34 58 25 17
- 5 Niezadowolony 17 27 29 14 8
- 6 Bardzo niezadowolony 2 6 5 4 1
-Zwrócony obiekt, jak w przypadku jednowymiarowym, jest typu table, ale tym razem ma dwa wymiary i możemy go traktować podobnie jak macierz.
-> str(nV7Y)
- 'table' int [1:6, 1:5] 15 97 40 27 17 2 18 96 40 34 ...
- - attr(*, "dimnames")=List of 2
- ..$ V7: chr [1:6] "1 Bardzo zadowolony" "2 Zadowolony" "3 Raczej zadowolony" "4 Raczej niezadowolony" ...
- ..$ Y : chr [1:5] "1992" "1995" "1999" "2005" ...
-> colnames(nV7Y)
-[1] "1992" "1995" "1999" "2005" "2010"
-> rownames(nV7Y)
-[1] "1 Bardzo zadowolony" "2 Zadowolony"
-[3] "3 Raczej zadowolony" "4 Raczej niezadowolony"
-[5] "5 Niezadowolony" "6 Bardzo niezadowolony"
-> nV7Y[3:4, 2:3]
- Y
-V7 1995 1999
- 3 Raczej zadowolony 40 79
- 4 Raczej niezadowolony 34 58
-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()
.
> # przy pomocy funkcji addmargins()
-> addmargins(nV7Y)
- Y
-V7 1992 1995 1999 2005 2010 Sum
- 1 Bardzo zadowolony 15 18 34 38 57 162
- 2 Zadowolony 97 96 149 79 99 520
- 3 Raczej zadowolony 40 40 79 44 36 239
- 4 Raczej niezadowolony 27 34 58 25 17 161
- 5 Niezadowolony 17 27 29 14 8 95
- 6 Bardzo niezadowolony 2 6 5 4 1 18
- Sum 198 221 354 204 218 1195
-> # "na piechotę"
-> nBV7Y = rbind(nV7Y, "suma" = colSums(nV7Y))
-> nBV7Y = cbind(nBV7Y, "suma" = rowSums(nBV7Y))
-> nBV7Y
- 1992 1995 1999 2005 2010 suma
-1 Bardzo zadowolony 15 18 34 38 57 162
-2 Zadowolony 97 96 149 79 99 520
-3 Raczej zadowolony 40 40 79 44 36 239
-4 Raczej niezadowolony 27 34 58 25 17 161
-5 Niezadowolony 17 27 29 14 8 95
-6 Bardzo niezadowolony 2 6 5 4 1 18
-suma 198 221 354 204 218 1195
-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)
.
> # to jest miejsce na Twój kod
->
->
->
->
+> sNX = cumsum(nX)
+> sNX
+ 1 Wieś 2 M do 25 tys 3 M 25-99,9 tys 4 M 100-499,9 tys
+ 436 633 831 1045
+ 5 M 500+ tys
+ 1195
+> pNX = cumsum(pX)
+> pNX
+ 1 Wieś 2 M do 25 tys 3 M 25-99,9 tys 4 M 100-499,9 tys
+ 0.3648536 0.5297071 0.6953975 0.8744770
+ 5 M 500+ tys
+ 1.0000000
+> pNX = sNX / sNX[length(sNX)]
+> pNX
+ 1 Wieś 2 M do 25 tys 3 M 25-99,9 tys 4 M 100-499,9 tys
+ 0.3648536 0.5297071 0.6953975 0.8744770
+ 5 M 500+ tys
+ 1.0000000
Warunkowe rozkłady liczebności w istocie możemy traktować po prostu jako wycinki z łącznego rozkładu liczebności.
-> # warunkowy rozkład liczebności zadowolenia z własnego wykształcenia
-> # dla roku badania PGSS równego 1995
-> nV7Y[, colnames(nV7Y) == "1995"]
- 1 Bardzo zadowolony 2 Zadowolony 3 Raczej zadowolony
- 18 96 40
-4 Raczej niezadowolony 5 Niezadowolony 6 Bardzo niezadowolony
- 34 27 6
-> # 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
- Y
-V7 1992 1995 1999
- 1 Bardzo zadowolony 15 18 34
- 2 Zadowolony 97 96 149
- 3 Raczej zadowolony 40 40 79
- 4 Raczej niezadowolony 27 34 58
- 5 Niezadowolony 17 27 29
- 6 Bardzo niezadowolony 2 6 5
-> rowSums(temp)
- 1 Bardzo zadowolony 2 Zadowolony 3 Raczej zadowolony
- 67 342 159
-4 Raczej niezadowolony 5 Niezadowolony 6 Bardzo niezadowolony
- 119 73 13
-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.
-> # łączny rozkład liczebności zadowolenia z własnego wykształcenia
-> # i roku badania PGSS
-> addmargins(nV7Y)
- Y
-V7 1992 1995 1999 2005 2010 Sum
- 1 Bardzo zadowolony 15 18 34 38 57 162
- 2 Zadowolony 97 96 149 79 99 520
- 3 Raczej zadowolony 40 40 79 44 36 239
- 4 Raczej niezadowolony 27 34 58 25 17 161
- 5 Niezadowolony 17 27 29 14 8 95
- 6 Bardzo niezadowolony 2 6 5 4 1 18
- Sum 198 221 354 204 218 1195
-> # rodzina warunkowych rozkładów liczebności zadowolenia z własnego wykształcenia
-> # pod warunkiem roku badania PGSS
-> addmargins(nV7Y)[, -(ncol(nV7Y) + 1)]
- Y
-V7 1992 1995 1999 2005 2010
- 1 Bardzo zadowolony 15 18 34 38 57
- 2 Zadowolony 97 96 149 79 99
- 3 Raczej zadowolony 40 40 79 44 36
- 4 Raczej niezadowolony 27 34 58 25 17
- 5 Niezadowolony 17 27 29 14 8
- 6 Bardzo niezadowolony 2 6 5 4 1
- Sum 198 221 354 204 218
-> # lub równoważnie (a nawet prościej)
-> addmargins(nV7Y, 1)
- Y
-V7 1992 1995 1999 2005 2010
- 1 Bardzo zadowolony 15 18 34 38 57
- 2 Zadowolony 97 96 149 79 99
- 3 Raczej zadowolony 40 40 79 44 36
- 4 Raczej niezadowolony 27 34 58 25 17
- 5 Niezadowolony 17 27 29 14 8
- 6 Bardzo niezadowolony 2 6 5 4 1
- Sum 198 221 354 204 218
-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.
-> # jakiś rozkład warunkowy
-> nWarunkowyV7Y1995 = nV7Y[, colnames(nV7Y) == "1995"]
-> nWarunkowyV7Y1995
- 1 Bardzo zadowolony 2 Zadowolony 3 Raczej zadowolony
- 18 96 40
-4 Raczej niezadowolony 5 Niezadowolony 6 Bardzo niezadowolony
- 34 27 6
-> # "ręcznie"
-> pWarunkowyV7Y1995 = nWarunkowyV7Y1995 / sum(nWarunkowyV7Y1995)
-> pWarunkowyV7Y1995
- 1 Bardzo zadowolony 2 Zadowolony 3 Raczej zadowolony
- 0.08144796 0.43438914 0.18099548
-4 Raczej niezadowolony 5 Niezadowolony 6 Bardzo niezadowolony
- 0.15384615 0.12217195 0.02714932
-> # przy pomocy funkcji prop.table
-> prop.table(nWarunkowyV7Y1995)
- 1 Bardzo zadowolony 2 Zadowolony 3 Raczej zadowolony
- 0.08144796 0.43438914 0.18099548
-4 Raczej niezadowolony 5 Niezadowolony 6 Bardzo niezadowolony
- 0.15384615 0.12217195 0.02714932
-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).> # 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
- Y
-V7 1992 1995 1999 2005
- 1 Bardzo zadowolony 0.075757576 0.081447964 0.096045198 0.186274510
- 2 Zadowolony 0.489898990 0.434389140 0.420903955 0.387254902
- 3 Raczej zadowolony 0.202020202 0.180995475 0.223163842 0.215686275
- 4 Raczej niezadowolony 0.136363636 0.153846154 0.163841808 0.122549020
- 5 Niezadowolony 0.085858586 0.122171946 0.081920904 0.068627451
- 6 Bardzo niezadowolony 0.010101010 0.027149321 0.014124294 0.019607843
- Sum 1.000000000 1.000000000 1.000000000 1.000000000
- Y
-V7 2010
- 1 Bardzo zadowolony 0.261467890
- 2 Zadowolony 0.454128440
- 3 Raczej zadowolony 0.165137615
- 4 Raczej niezadowolony 0.077981651
- 5 Niezadowolony 0.036697248
- 6 Bardzo niezadowolony 0.004587156
- Sum 1.000000000
-> round(rWRPV7Y, 3)
- Y
-V7 1992 1995 1999 2005 2010
- 1 Bardzo zadowolony 0.076 0.081 0.096 0.186 0.261
- 2 Zadowolony 0.490 0.434 0.421 0.387 0.454
- 3 Raczej zadowolony 0.202 0.181 0.223 0.216 0.165
- 4 Raczej niezadowolony 0.136 0.154 0.164 0.123 0.078
- 5 Niezadowolony 0.086 0.122 0.082 0.069 0.037
- 6 Bardzo niezadowolony 0.010 0.027 0.014 0.020 0.005
- Sum 1.000 1.000 1.000 1.000 1.000
-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ą).
> 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.
> 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()
.
> 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),
-+ 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.
-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.
-> # 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.
-> 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.
-> 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))
-Jeśli interesuje Cię zrozumienie, co robimy na początku każdych zajęć, aby pobrać pliki, których będziemy używać, zapoznaj się z opisem zawartym w pliku README.md w katalogu projektu na GitHubie.
Wejdź dziś wieczorem na stronę projektu na GitHubie z materiałami z tego warsztatu i zobacz, co pojawiło się w tym miejscu.
+Informacja zostanie rozesłana mailem.
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., 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.
+G. Lissowski, J. Haman i M. Jasiński. (2011). Podstawy statystyki dla socjologów. Wyd. II poprawione. Warszawa: Wydawnictwo Naukowe SCHOLAR. Rozdział 2.
+Względnie inne źródła, w których opisane zostało co to jest:
+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. Poznamy też podstawy wizualizowania (dyskretnych) rozkładów zmiennych w R przy pomocy wykresów słupkowych.
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).
> try(setwd("warsztat 2016.10.24"), silent = TRUE)
+> nazwyObiektow = load("dane_2016.10.24.RData")
+> nazwyObiektow
+ [1] "etykiety" "Y" "X" "Z" "W" "V1"
+ [7] "V2" "V3" "V4" "V5" "V6" "V7"
+> etykiety
+ Y
+ "Rok badania PGSS"
+ X
+ "Wielkość miejscowości zamieszkania"
+ Z
+ "Liczba osób w gospodarstwie domowym"
+ W
+ "Wiek respondenta"
+ V1
+ "Zadowolenie z miejsca zamieszkania"
+ V2
+ "Zadowolenie z czasu wolnego i wypoczynku"
+ V3
+ "Zadowolenie z życia rodzinnego"
+ V4
+ "Zadowolenie z przyjaźni"
+ V5
+ "Zadowolenie ze stanu zdrowia"
+ V6
+"Zadowolenie ze swoich warunków mieszkaniowych"
+ V7
+ "Zadowolenie z własnego wykształcenia"
+> summary(cbind(Y, X, Z, W, V1, V2, V3, V4, V5, V6, V7))
+ Y X Z W
+ 1992:198 1 Wieś :436 1 JEDNA : 67 21 :134
+ 1995:221 2 M do 25 tys :197 2 DWIE :135 20 :131
+ 1999:354 3 M 25-99,9 tys :198 3 TRZY :323 25 :127
+ 2005:204 4 M 100-499,9 tys:214 4 CZTERY :291 27 :124
+ 2010:218 5 M 500+ tys :150 5 PIĘĆ :167 28 :123
+ 6 SZEŚĆ :122 26 :120
+ 7 SIEDEM I WIĘCEJ: 90 (Other):436
+ V1 V2
+ 1 Bardzo zadowolony :228 1 Bardzo zadowolony :139
+ 2 Zadowolony :535 2 Zadowolony :436
+ 3 Raczej zadowolony :286 3 Raczej zadowolony :309
+ 4 Raczej niezadowolony: 79 4 Raczej niezadowolony:182
+ 5 Niezadowolony : 52 5 Niezadowolony : 99
+ 6 Bardzo niezadowolony: 15 6 Bardzo niezadowolony: 30
+
+ V3 V4
+ 1 Bardzo zadowolony :344 1 Bardzo zadowolony :290
+ 2 Zadowolony :598 2 Zadowolony :624
+ 3 Raczej zadowolony :192 3 Raczej zadowolony :228
+ 4 Raczej niezadowolony: 37 4 Raczej niezadowolony: 34
+ 5 Niezadowolony : 13 5 Niezadowolony : 18
+ 6 Bardzo niezadowolony: 11 6 Bardzo niezadowolony: 1
+
+ V5 V6
+ 1 Bardzo zadowolony :272 1 Bardzo zadowolony :149
+ 2 Zadowolony :609 2 Zadowolony :450
+ 3 Raczej zadowolony :199 3 Raczej zadowolony :287
+ 4 Raczej niezadowolony: 78 4 Raczej niezadowolony:128
+ 5 Niezadowolony : 28 5 Niezadowolony :120
+ 6 Bardzo niezadowolony: 9 6 Bardzo niezadowolony: 61
+
+ V7
+ 1 Bardzo zadowolony :162
+ 2 Zadowolony :520
+ 3 Raczej zadowolony :239
+ 4 Raczej niezadowolony:161
+ 5 Niezadowolony : 95
+ 6 Bardzo niezadowolony: 18
+
+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).
> # łączny rozkład liczebności zadowolenia z własnego wykształcenia
+> # i roku przeprowadzenia badania PGSS
+> nV7Y = table(V7, Y)
+> nV7Y
+ Y
+V7 1992 1995 1999 2005 2010
+ 1 Bardzo zadowolony 15 18 34 38 57
+ 2 Zadowolony 97 96 149 79 99
+ 3 Raczej zadowolony 40 40 79 44 36
+ 4 Raczej niezadowolony 27 34 58 25 17
+ 5 Niezadowolony 17 27 29 14 8
+ 6 Bardzo niezadowolony 2 6 5 4 1
+Zwrócony obiekt, jak w przypadku jednowymiarowym, jest typu table, ale tym razem ma dwa wymiary i możemy go traktować podobnie jak macierz.
+> str(nV7Y)
+ 'table' int [1:6, 1:5] 15 97 40 27 17 2 18 96 40 34 ...
+ - attr(*, "dimnames")=List of 2
+ ..$ V7: chr [1:6] "1 Bardzo zadowolony" "2 Zadowolony" "3 Raczej zadowolony" "4 Raczej niezadowolony" ...
+ ..$ Y : chr [1:5] "1992" "1995" "1999" "2005" ...
+> colnames(nV7Y)
+[1] "1992" "1995" "1999" "2005" "2010"
+> rownames(nV7Y)
+[1] "1 Bardzo zadowolony" "2 Zadowolony"
+[3] "3 Raczej zadowolony" "4 Raczej niezadowolony"
+[5] "5 Niezadowolony" "6 Bardzo niezadowolony"
+> nV7Y[3:4, 2:3]
+ Y
+V7 1995 1999
+ 3 Raczej zadowolony 40 79
+ 4 Raczej niezadowolony 34 58
+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()
.
> # przy pomocy funkcji addmargins()
+> addmargins(nV7Y)
+ Y
+V7 1992 1995 1999 2005 2010 Sum
+ 1 Bardzo zadowolony 15 18 34 38 57 162
+ 2 Zadowolony 97 96 149 79 99 520
+ 3 Raczej zadowolony 40 40 79 44 36 239
+ 4 Raczej niezadowolony 27 34 58 25 17 161
+ 5 Niezadowolony 17 27 29 14 8 95
+ 6 Bardzo niezadowolony 2 6 5 4 1 18
+ Sum 198 221 354 204 218 1195
+> # "na piechotę"
+> nBV7Y = rbind(nV7Y, "suma" = colSums(nV7Y))
+> nBV7Y = cbind(nBV7Y, "suma" = rowSums(nBV7Y))
+> nBV7Y
+ 1992 1995 1999 2005 2010 suma
+1 Bardzo zadowolony 15 18 34 38 57 162
+2 Zadowolony 97 96 149 79 99 520
+3 Raczej zadowolony 40 40 79 44 36 239
+4 Raczej niezadowolony 27 34 58 25 17 161
+5 Niezadowolony 17 27 29 14 8 95
+6 Bardzo niezadowolony 2 6 5 4 1 18
+suma 198 221 354 204 218 1195
+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)
.
> # to jest miejsce na Twój kod
+>
+>
+>
+>
+Warunkowe rozkłady liczebności w istocie możemy traktować po prostu jako wycinki z łącznego rozkładu liczebności.
+> # warunkowy rozkład liczebności zadowolenia z własnego wykształcenia
+> # dla roku badania PGSS równego 1995
+> nV7Y[, colnames(nV7Y) == "1995"]
+ 1 Bardzo zadowolony 2 Zadowolony 3 Raczej zadowolony
+ 18 96 40
+4 Raczej niezadowolony 5 Niezadowolony 6 Bardzo niezadowolony
+ 34 27 6
+> # 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
+ Y
+V7 1992 1995 1999
+ 1 Bardzo zadowolony 15 18 34
+ 2 Zadowolony 97 96 149
+ 3 Raczej zadowolony 40 40 79
+ 4 Raczej niezadowolony 27 34 58
+ 5 Niezadowolony 17 27 29
+ 6 Bardzo niezadowolony 2 6 5
+> rowSums(temp)
+ 1 Bardzo zadowolony 2 Zadowolony 3 Raczej zadowolony
+ 67 342 159
+4 Raczej niezadowolony 5 Niezadowolony 6 Bardzo niezadowolony
+ 119 73 13
+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.
+> # łączny rozkład liczebności zadowolenia z własnego wykształcenia
+> # i roku badania PGSS
+> addmargins(nV7Y)
+ Y
+V7 1992 1995 1999 2005 2010 Sum
+ 1 Bardzo zadowolony 15 18 34 38 57 162
+ 2 Zadowolony 97 96 149 79 99 520
+ 3 Raczej zadowolony 40 40 79 44 36 239
+ 4 Raczej niezadowolony 27 34 58 25 17 161
+ 5 Niezadowolony 17 27 29 14 8 95
+ 6 Bardzo niezadowolony 2 6 5 4 1 18
+ Sum 198 221 354 204 218 1195
+> # rodzina warunkowych rozkładów liczebności zadowolenia z własnego wykształcenia
+> # pod warunkiem roku badania PGSS
+> addmargins(nV7Y)[, -(ncol(nV7Y) + 1)]
+ Y
+V7 1992 1995 1999 2005 2010
+ 1 Bardzo zadowolony 15 18 34 38 57
+ 2 Zadowolony 97 96 149 79 99
+ 3 Raczej zadowolony 40 40 79 44 36
+ 4 Raczej niezadowolony 27 34 58 25 17
+ 5 Niezadowolony 17 27 29 14 8
+ 6 Bardzo niezadowolony 2 6 5 4 1
+ Sum 198 221 354 204 218
+> # lub równoważnie (a nawet prościej)
+> addmargins(nV7Y, 1)
+ Y
+V7 1992 1995 1999 2005 2010
+ 1 Bardzo zadowolony 15 18 34 38 57
+ 2 Zadowolony 97 96 149 79 99
+ 3 Raczej zadowolony 40 40 79 44 36
+ 4 Raczej niezadowolony 27 34 58 25 17
+ 5 Niezadowolony 17 27 29 14 8
+ 6 Bardzo niezadowolony 2 6 5 4 1
+ Sum 198 221 354 204 218
+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.
+> # jakiś rozkład warunkowy
+> nWarunkowyV7Y1995 = nV7Y[, colnames(nV7Y) == "1995"]
+> nWarunkowyV7Y1995
+ 1 Bardzo zadowolony 2 Zadowolony 3 Raczej zadowolony
+ 18 96 40
+4 Raczej niezadowolony 5 Niezadowolony 6 Bardzo niezadowolony
+ 34 27 6
+> # "ręcznie"
+> pWarunkowyV7Y1995 = nWarunkowyV7Y1995 / sum(nWarunkowyV7Y1995)
+> pWarunkowyV7Y1995
+ 1 Bardzo zadowolony 2 Zadowolony 3 Raczej zadowolony
+ 0.08144796 0.43438914 0.18099548
+4 Raczej niezadowolony 5 Niezadowolony 6 Bardzo niezadowolony
+ 0.15384615 0.12217195 0.02714932
+> # przy pomocy funkcji prop.table
+> prop.table(nWarunkowyV7Y1995)
+ 1 Bardzo zadowolony 2 Zadowolony 3 Raczej zadowolony
+ 0.08144796 0.43438914 0.18099548
+4 Raczej niezadowolony 5 Niezadowolony 6 Bardzo niezadowolony
+ 0.15384615 0.12217195 0.02714932
+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).> # 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
+ Y
+V7 1992 1995 1999 2005
+ 1 Bardzo zadowolony 0.075757576 0.081447964 0.096045198 0.186274510
+ 2 Zadowolony 0.489898990 0.434389140 0.420903955 0.387254902
+ 3 Raczej zadowolony 0.202020202 0.180995475 0.223163842 0.215686275
+ 4 Raczej niezadowolony 0.136363636 0.153846154 0.163841808 0.122549020
+ 5 Niezadowolony 0.085858586 0.122171946 0.081920904 0.068627451
+ 6 Bardzo niezadowolony 0.010101010 0.027149321 0.014124294 0.019607843
+ Sum 1.000000000 1.000000000 1.000000000 1.000000000
+ Y
+V7 2010
+ 1 Bardzo zadowolony 0.261467890
+ 2 Zadowolony 0.454128440
+ 3 Raczej zadowolony 0.165137615
+ 4 Raczej niezadowolony 0.077981651
+ 5 Niezadowolony 0.036697248
+ 6 Bardzo niezadowolony 0.004587156
+ Sum 1.000000000
+> round(rWRPV7Y, 3)
+ Y
+V7 1992 1995 1999 2005 2010
+ 1 Bardzo zadowolony 0.076 0.081 0.096 0.186 0.261
+ 2 Zadowolony 0.490 0.434 0.421 0.387 0.454
+ 3 Raczej zadowolony 0.202 0.181 0.223 0.216 0.165
+ 4 Raczej niezadowolony 0.136 0.154 0.164 0.123 0.078
+ 5 Niezadowolony 0.086 0.122 0.082 0.069 0.037
+ 6 Bardzo niezadowolony 0.010 0.027 0.014 0.020 0.005
+ Sum 1.000 1.000 1.000 1.000 1.000
+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ą).
> 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.
> 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()
.
> 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),
++ 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.
+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.
+> # 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.
+> 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.
+> 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))
+Wejdź dziś wieczorem na stronę projektu na GitHubie z materiałami z tego warsztatu i zobacz, co pojawiło się w tym miejscu.
+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., 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ą następujące parametry poziomu wartości zmiennych statystycznych:
+i następujące parametry rozproszenia zmiennych statystycznych:
+