From d3b5239cf264a4662b5c1efc2193dfaf3222acc7 Mon Sep 17 00:00:00 2001 From: tzoltak Date: Mon, 17 Oct 2016 22:19:05 +0200 Subject: [PATCH] Jeszcze knit do HTMLa --- warsztat 2016.10.17/warsztat_2016.10.17.Rmd | 3 +- warsztat 2016.10.17/warsztat_2016.10.17.html | 286 ++-------- warsztat 2016.10.24/warsztat_2016.10.24.html | 522 +++++++++++++++++++ 3 files changed, 553 insertions(+), 258 deletions(-) create mode 100644 warsztat 2016.10.24/warsztat_2016.10.24.html 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 @@

17 października 2016

  • Rozkład brzegowy liczebności
  • Rozkład brzegowy częstości
  • Skumulowane rozkłady brzegowe
  • -
  • Rozkłady łączne dwóch zmiennych
  • -
  • Rozkłady warunkowe
  • - -
  • Prosta wizualizacja rozkładów zmiennych (kategorialnych) - funkcja barplot()
  • Na następne zajęcia -

    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.

    Podstawowe struktury danych w R - macierze

    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 @@

    Zadanie

    5 M 500+ tys 150 > # to jest miejsce na Twój kod -> -> -> -
    -
    - -
    -

    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).

    -
    > # łą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
    -
    -
    -

    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).

    -
    > # 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
    -
    -

    Rozkłady warunkowe

    -

    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
    -
    - -
    -

    Prosta wizualizacja rozkładów zmiennych (kategorialnych) - 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ą).

    -
    > 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.

    -
    -
    -

    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.

    -
    > # 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))
    -

    -

    Na następne zajęcia

    +

    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.

    Praca domowa

    -

    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.

    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., 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:

    +
      +
    • łą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,
    • +
    • rodzina rozkładów warunkowych częstości.
    • +
    diff --git a/warsztat 2016.10.24/warsztat_2016.10.24.html b/warsztat 2016.10.24/warsztat_2016.10.24.html new file mode 100644 index 0000000..b68e6da --- /dev/null +++ b/warsztat 2016.10.24/warsztat_2016.10.24.html @@ -0,0 +1,522 @@ + + + + + + + + + + + + + + +Statystyka I z R Warsztat 4. Rozkłady łączne i warunkowe + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + +

    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.

    +
    +

    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).

    +
    > 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()

    +
    +

    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).

    +
    > # łą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
    +
    +
    +

    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).

    +
    > # to jest miejsce na Twój kod
    +> 
    +> 
    +> 
    +> 
    +
    +
    +
    +
    +

    Rozkłady warunkowe

    +

    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
    +
    +
    +
    +

    Prosta wizualizacja rozkładów zmiennych (kategorialnych) - 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ą).

    +
    > 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.

    +
    +
    +

    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.

    +
    > # 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))
    +

    +
    +
    +
    +
    +

    Na następne zajęcia

    +
    +

    Praca domowa

    +

    Wejdź dziś wieczorem na stronę projektu na GitHubie z materiałami z tego warsztatu i zobacz, co pojawiło się w tym miejscu.

    +
    +
    +

    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., 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:

    +
      +
    • modalna (dominanta),
    • +
    • minimum i maksimum,
    • +
    • mediana,
    • +
    • kwartyle,
    • +
    • średnia,
    • +
    +

    i następujące parametry rozproszenia zmiennych statystycznych:

    +
      +
    • rozstęp,
    • +
    • odchylenie ćwiartkowe,
    • +
    • odchylenie przeciętne od mediany,
    • +
    • wariancja,
    • +
    • odchylenie standardowe,
    • +
    • współczynnik zmienności.
    • +
    +
    +
    + + + + +
    + + + + + + + +