From b05a303f22d83f3d3e4c6c20472723cef1b848d7 Mon Sep 17 00:00:00 2001 From: tzoltak Date: Mon, 17 Oct 2016 22:10:51 +0200 Subject: [PATCH] =?UTF-8?q?Praca=20domowa=202016.10.17=20i=20powi=C4=85zan?= =?UTF-8?q?e.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...03\263wki z rozk\305\202ad\303\263w.RData" | Bin 0 -> 7319 bytes .../praca_domowa_2016.10.17.Rmd | 164 +++++++++++++ warsztat 2016.10.17/warsztat_2016.10.17.Rmd | 195 ++------------- warsztat 2016.10.24/dane_2016.10.24.RData | Bin 0 -> 9127 bytes warsztat 2016.10.24/warsztat_2016.10.24.Rmd | 225 ++++++++++++++++++ ...ci\303\263wka z rozk\305\202ad\303\263w.R" | 135 +++++++++++ 6 files changed, 541 insertions(+), 178 deletions(-) create mode 100644 "dane do wej\305\233ci\303\263wki z rozk\305\202ad\303\263w.RData" create mode 100644 warsztat 2016.10.17/praca_domowa_2016.10.17.Rmd create mode 100644 warsztat 2016.10.24/dane_2016.10.24.RData create mode 100644 warsztat 2016.10.24/warsztat_2016.10.24.Rmd create mode 100644 "wej\305\233ci\303\263wka z rozk\305\202ad\303\263w.R" diff --git "a/dane do wej\305\233ci\303\263wki z rozk\305\202ad\303\263w.RData" "b/dane do wej\305\233ci\303\263wki z rozk\305\202ad\303\263w.RData" new file mode 100644 index 0000000000000000000000000000000000000000..6691b3d5dd6e3a5549f16678dabc68c7cc9083f9 GIT binary patch literal 7319 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 S6Y_b1mz`u%C&fSg^nU Open file...). + 4. Otwórz w RStudio plik "dane_2016.10.17.RData" (np. menu: File -> Open file...). + * Pojawi się okno zawierające pytanie, czy chcesz wczytać obiekty z pliku danych do przestrzeni roboczej - klikamy "tak". + 5. Otwórz w przeglądarce internetowej plik "warsztat_2016.10.17.html", żeby móc korzystać z niego jako pomocy. + +# Zadania - generowanie rozkładów + +## 1. Oblicz rozkłady częstości + +Korzystając z poznanych funkcji dla każdej ze zmiennych V1, ..., V7 oblicz brzegowe rozkłady częstości i przypisz je do obiektówo nazwach podanych w poniższych blokach kodu. + + * Zmienna V1 - zadowolenie z miejsca zamieszkania: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pV1 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pV1 # obejrzyjmy ten rozkład +``` + + * Zmienna V2 - z czasu wolnego i wypoczynku: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pV2 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pV2 # obejrzyjmy ten rozkład +``` + * Zmienna V3 - zadowolenie z życia rodzinnego: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pV3 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pV3 # obejrzyjmy ten rozkład +``` + * Zmienna V4 - zadowolenie z przyjaźni: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pV4 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pV4 # obejrzyjmy ten rozkład +``` + * Zmienna V5 - zadowolenie ze stanu zdrowia: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pV5 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pV5 # obejrzyjmy ten rozkład +``` + * Zmienna V6 - zadowolenie ze swoich warunków mieszkaniowych: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pV6 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pV6 # obejrzyjmy ten rozkład +``` + * Zmienna V7 - zadowolenie z własnego wykształcenia: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pV7 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pV7 # obejrzyjmy ten rozkład +``` + +## 2. Oblicz skumulowane rozkłady częstości + +Korzystając z poznanych funkcji dla każdej ze zmiennych V1, ..., V7 oblicz skumulowane brzegowe rozkłady częstości i przypisz je do obiektówo nazwach podanych w poniższych blokach kodu. Możesz tu wykorzystać to, że w obiektach `pV1`, ..., `pV7` masz już przygotowane wcześniej brzegowe rozkłady częstości. + + * Zmienna V1 - zadowolenie z miejsca zamieszkania: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pSV1 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pSV1 # obejrzyjmy ten rozkład +``` + + * Zmienna V2 - z czasu wolnego i wypoczynku: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pSV2 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pSV2 # obejrzyjmy ten rozkład +``` + * Zmienna V3 - zadowolenie z życia rodzinnego: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pSV3 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pSV3 # obejrzyjmy ten rozkład +``` + * Zmienna V4 - zadowolenie z przyjaźni: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pSV4 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pSV4 # obejrzyjmy ten rozkład +``` + * Zmienna V5 - zadowolenie ze stanu zdrowia: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pSV5 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pSV5 # obejrzyjmy ten rozkład +``` + * Zmienna V6 - zadowolenie ze swoich warunków mieszkaniowych: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pSV6 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pSV6 # obejrzyjmy ten rozkład +``` + * Zmienna V7 - zadowolenie z własnego wykształcenia: + +```{r comment="", prompt=TRUE, collapse=TRUE} +pSV7 = # to jest miejsce na Twój kod (może Ci to zająć kilka linii) +pSV7 # obejrzyjmy ten rozkład +``` + +# Zadania - analiza wyników + +Aby wygodniej było Ci porównywać ze sobą rozkłady różnych zmiennych, zbierzmy je w jednej macierzy przy pomocy funkcji `cbind()` i zaokrąglijmy częstości przy pomocy funkcji `round()`. + +### Brzegowe rozkłady częstości zmiennych V1-V7 + +```{r comment="", prompt=TRUE, collapse=TRUE} +round(cbind(pV1, pV2, pV3, pV4, pV5, pV6, pV7), 3) +``` + +Uwaga! To **nie jest** żaden rozkład łączny, ani rodzina rozkładów warunkowych, tylko zestawione obok siebie rozkłady brzegowe zmiennych, które mają wspólny zbiór wartości, jakie mogąprzyjmować. + +### Skumulwane brzegowe rozkłady częstości zmiennych V1-V7 + +```{r comment="", prompt=TRUE, collapse=TRUE} +round(cbind(pSV1, pSV2, pSV3, pSV4, pSV5, pSV6, pSV7), 3) +``` + +Wygodne może też być dla Ciebie skompilowanie w tej chwili raportu przy pomocy opcji "Knit" (obok ikonki kłębka włóczki), która znajduje się na górze panelu RStudio zawierającego kod. W ten sposób powyższe tabelki będziesz mógł/mogła podejrzeć sobie w zewnętrzym pliku HTML, który zostanie utworzony w wyniku dokonanie takiej operacji. + +## 4. Odczytywanie wartości z rozkładów I + +Na podstawie wygenerowanych wcześniej rozkładóW odpowiedz na poniższe pytania. Jeśli będziesz potrzebował(a) dokonać jakichś obliczeń, możesz oczywiście skorzystać z konsoli R, ale poniżej nie wpisuj kodu, a jedynie liczbę - wynik ew. operacji (lub wartość, którą daje się odczytać wprost z któregośc z rozkładów). + + - Jaki odsetek badanej zbiorowości stanowią Ci, który na pytanie o zadowolenie ze swojego stanu zdrowia udzielili odpowiedzi "raczej zadowolony"? **TU WPISZ LICZBĘ** + - Jaki odsetek badanej zbiorowości stanowią Ci, którzy zadeklarowali, że nie są zadowoleni z własnego wykształcenia (łącznie, bez względu na to, jak bardzo są niezadwoleni)? **TU WPISZ LICZBĘ** + - Jaki odsetek badanej zbiorowości stanowią Ci, którzy w pytaniu o zadowolenie z przyjaźni udzielili odpowiedzi wskazujących na niezdecydowanie ("raczej zadowolony"lub "raczej niezadowolony")? **TU WPISZ LICZBĘ** + +## 5. Odczytywanie wartości z rozkładów II + +Na podstawie wygenerowanych wcześniej rozkładóW odpowiedz na poniższe pytania. + + - Z jakiej spośród analizowanych dziedzin życia respondenci byli najbardziej, a z jakiej najmniej zadowoleni? Przy porównaniu pomiń natężenie zadowolenia/niezadowolenia. + - Dziedzina, z której respondenci są najbardziej zadowoleni: **TU WPISZ ODPOWIEDŹ**. + - Dziedzina, z której respondenci są najmniej zadowoleni: **TU WPISZ ODPOWIEDŹ**. + - W odniesieniu do jakiej dziedziny respondenci udzielili najmniej, a w odniesieniu do jakiej najwięcej odpowiedzi niezdecydowanych ("raczej zadowolony"lub "raczej niezadowolony")? + - Dziedzina z najmniejszą liczbą odpowiedzi niezdecydowanych: **TU WPISZ ODPOWIEDŹ**. + - Dziedzina z największą liczbą odpowiedzi niezdecydowanych: **TU WPISZ ODPOWIEDŹ**. + +# Czynności końcowe + + - Zapisz wyniki swojej pracy (tj. plik "praca_domowa_2016.10.17.Rmd"). + - Zmień jego nazwę na "moje_imie_i_nazwisko_2016.10.17.Rmd". + - Wyślij go na adres email: zoltakt@is.uw.edu.pl diff --git a/warsztat 2016.10.17/warsztat_2016.10.17.Rmd b/warsztat 2016.10.17/warsztat_2016.10.17.Rmd index 1b35fde..38c6d33 100644 --- a/warsztat 2016.10.17/warsztat_2016.10.17.Rmd +++ b/warsztat 2016.10.17/warsztat_2016.10.17.Rmd @@ -9,7 +9,7 @@ output: toc_depth: 3 --- -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 @@ -297,191 +297,30 @@ Dysponując brzegowym rozkładem liczebności zmiennej *X*, zapisanym w obiekcie nX = table(X) nX # 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). - -```{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, "suma" = colSums(nV7Y)) -nBV7Y = cbind(nBV7Y, "suma" = rowSums(nBV7Y)) -nBV7Y +sNX = cumsum(nX) +sNX +pNX = cumsum(pX) +pNX +pNX = sNX / sNX[length(sNX)] +pNX ``` --- -#### 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 - - - - -``` - ---- - - -### 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) -``` - -## 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ą). - -```{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), - 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. - -```{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)) -``` - # 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](https://github.com/tzoltak/3501-KOG-S1R_2016_gr3). + ## 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. +Pobierz ze strony ## 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.](http://libra.ibuk.pl/book/145985) - 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/dane_2016.10.24.RData b/warsztat 2016.10.24/dane_2016.10.24.RData new file mode 100644 index 0000000000000000000000000000000000000000..13f988ca5a40ecbe30fd93214b7489f2cac32cb2 GIT binary patch literal 9127 zcmV;YBUs!YiwFP!000002JKzJj$OxbeWH{^b{yM@fgpC2UESxLs!KgB zbUE+ccW>YB>Z)^2RrkH~=DXLv{_fWoi^Y}2i!Z*gxbouapD$fm{qKdvON+0qjxQfP zdi>yU^}p3A-(LOwr{|x4`_A!$<@#(ubb5HOynp=h@#*7_*Ed{U_`&kw!Rm~o`v*sl_Rc^5+k1QWSGV}+;Ar)ev-5lI zUA)^DXa3{GGxyK-PCi|({ysYR#qsiRdHVR1FkE>%-&w zXNN~me{+7?UtK)ylZR)IKiqrrzek7XxBcr2-ybYb9_<}{x;(r8@c8suM||I&b9#KZ z|H1Nf@8PFM4}SZb)8(^=S@p>N2j{=~hl_VUee%n_lg}UK^znm}vqyVRez||}d1qf3 z(LXxc`}pAGX^;NFaK7-~`XBGE|8Z~qkGtppxbpL>&;E7o*}two``6C1f9*c|*NtcY zy1DxQ?@UuxcU>&Lx%%+eZ~V`4@$|p#aeLezx5w>qd)$2d?)JDnZjamJ_P9Mh$H!aS z|57YpIzJi-fORY_qC3X zzbI_`ldH?ShX+r7b$-^L@2t+c`pPTc+c7`CT(XfW9*p>vK58I#OB20&rAb$4Mw zNE988bVcSV#?zysE}Tg=I0vjD%)&{+L#Tx6jvE=tOv%)<`t%+mrDC3rF{|QCmgKyu zJY*7t0q}Q_btmZ#b*vutNJ(8RVUbKpOv>RD5l&+#Md)y8f2u*=ScW1A&hh&TmEK|6 zqa3b$MF$~cw0AX3*X_-f$?hCmYWq=^F&<>~V6#XX_LI3Vs-R zSdOWtD3JtCL>nGSl#!0uQ24K<5e<3$VFa8{tHvtU$m$}$Zl~v$C1gytgDq0=H&maD zE9U9ClFY>;kt;re%|Rmu_-zJOZ1B0wLo?*R8R!BuXl3yQDeo{uqKM=|kJL~-+TP8= znodp#Vb?kiS1%~}I6#g_OJU9I3r4CLty7n(e;v($iLf1EWo}B*26Q$LJQ$fe!M~7K zSweh#ji?H7g0x|%H^14YB~F%9GC~FooQ+G-r+`S2Ky^1xRN`b%m9;$u;_-9;MV%D_ zbv}M>;^ZK>OKVuJl&!{~H7!f$g6aU+u4xf74cbyal`M};-^dnWAmw~knl5Gi8mGLl zwAUE0{Z3^cfXW&yvD2OFlRgp0!m5;)RK_wAB!yCKLw$ox!Va5W=8{?bK=3^(zCK2` zR+qGZgJYQWB;V$sSEM=)5Caf^8v-38GpAmvrRfTQ(W5QqfzYDR9eJn^N=zqh!!Yxv98mT%sD>-KVa{`VhWU%qqa-h1nBca}f8_s;D*@0~Z{ z<=y4a-umpnKKqaJzyIRq^6j^7zj^y7%eR(yS6}?-_Kz>U&ib#ZU)k2!`%mBR@^=3I z?=Q|?b>)w5zxmUDcD^>9U>nugWzoOen$G)u>rj31&DU-$-@bSI$$$U;!tU6$bkpVb z($|H5(6pBE^+r2t^3ROw@>ZI!o2P_3z8xL8(Q;#*zUjA{CjXc0#>~a`p7_$0CZ=td zJ+|Fy!XW)w7(UdO@lK1XWisQdvpg zt*61w=|he&sMiK@AS5stbmLxz8pa{SEFRNv;`azgjw)#=g={>Q4!XqY0Sh}3{&=_2 zk|`y#uv+^4UQ8C+W=Hbre?1P|5 zQcN-qrAopsH11qlyvInHMSlz()_=z3g&siAMIM9CK2nj=@1)uXILt~z6wKI7NNVd% z{tgAzM*P%G9^0?nNG$pj#ZwLoRp=Ltg|W~!VqpDpe2-Na05NEh5x*XGBmE_yy((j) zQ}4~=bX~16BTRm@0o9O2I(vGvj}|u*!>GE@eamL9+2i~-dapo?i8;y5b9Un7aAF|R z@S!-f@mdX4G~+lk(HMKzYAtnkDprXfPB` zoDctCI=v7qTuaJhZT_~|KgV2bPxu;njEFx8SEcqdok`g+xXxuT6VtB}wPyqnmHdNw!az(<6cUUYCHXinLM@{R7sm_%x8AdZs&EsQ#kM7wd>mVY5iTX@R54qA z+?x>Y*U3lWTy*^zXmwhHyPPnhpePjt>jUd3qR1Y)+exV1QOjsoQv%Vj2ipv+{u-Lk zmz z>~(IL^IkRI+xx8lUSH>i^W64#>*M;mubT7M$MyAoXwF}MzP|4Ieml+7wb&-Rmj z{u}0V+kduyUN?W=GJo6l?wX_R_w~{C^ZN50^ZEMkbvx|!>^Ru-Zkg|GyX`pG=U*Rf zzpg)Dx6h8RwHtdKJ73oQwZ8u?^ZD!MdutbVUfAF7nD5v3_pWFA(_Yt(qwNR#`&Z5H zyrVZS?fkI)>dmM1{XIWo?bowIYtOcQ_Byt|ZNGc{cEkK_$Jeuu_3!L;?Q`8Uzq9ki z-p97z&L{i59cTNy9doqf<;`3Bw>K{9``Lc9{@Xix{?|UA^)plUYW=5er=5S+u5G_s zyRq%J{cq>F7bk4Ht-ac~X2)^;x3woP{@ZwJ?bOB_>u0^V=EWUr57sX2@2vl_{>jcK z>u;_9vClu{5AE~Y-`oE8;_3}^zO@5u@7B-S@v?qy{k`Y^Z9KGgYx~E}7dy{9oaxOs zYhSj%>~q`au=CHx7wdnmeOiBR{fNDv9an2F_B?yE_|DD~&#!s&%G$ksemn1M`)xnj zarNSw9XHPpdbrcW_a4sh`p?c2`yAFD?Ks=tS-;`=Vb8x?KjZlwk0;r`J)GgqQ`>JA z&w6(3@dWE}a; z^}P1Erud|_nv@NkL6 z=XO4NJkkE%;st9*Hm+Gb=IIaCpVy?AEr!Q%i6N)=up>S^dZQ zLwg-NUe+F`^iA9U_WmA^^6-Wi4?H`!^TUq2hdXS1vE%6JAD-^-;apEA^7MC)*G}m$ z9{%<8Ec=`uPq3d`KW5uw`^{^&y{wCD& z(+8*WZ8ly{;aKZ`r}D_wKY4h;!?zy(^KgJ?f1Z7M&p#Cxy!^lA|MvdY4|sV7k5_un zHIANUhm;CFAweMnO@$;J)f7a^y)dRJ$iKwUVX<@orWFfDO_dS;f=5LQ=X3G z@odjeTHIsp*v>a^o_Ovoo8#|H!PS+YUtL^$-{N2HEbr{?pB;R-JUTo$+q-{! zdi>Gx(c|-Pzj1AOkNw$quCH70rQ2_A+=d^v-W&7u8yfPRtIL1cdwBosxUG$wuGHI2 z(LTSiZt+l;_|J{&62R%fwts7P`P0iRG4@E8edb&_aB83JAZ(m^z?j?Mx7$-@I+A(2E-_E5|3EPmS@sTA*F(XK4JGV z$W4u>tq(4MtyakC`p}UrVZbqCLKoJsC)@d+Ih6?rX2rrkVYYZOc9iBIxnc}l%7M~*-<3I)GrLMkl`sXDQS+L%0S zQ14p}8bM1Ab8skHF4Q{vY^P9)T2}fjyZ15j`zGxTGW|+16^70{%iIlXq)KoHNqQJV zR|_Jd8YK_X!T?3-d^hgyK;_)peno`^!h&FeOqy^+(7KD{x*7Fbbm2qAY;gCPX=RS9$CvLgv& zDO`X}POOC83us*n124-h8jfJ(JPtZG6mUWBFd739l7SkDAB`jhEv}Wz!Mr2{`ZLj5 zbM4^&gx{{R# z3N0TFQ~HQ3NZ8^(;iiUj8Y7_mo^g)hZOfV`}% zo|d<+1noEq#AL1!&1IGe^|H*Rk{T~sLb2?iH_1h2H8T>WBv2JUP1e@Zs7(zGJY6`` zF2!L*VEZn=YYWD^{89?km64n}xdKj?vARRA7?mmX%ACoYhjQ?lV-=%-o=kr2CRCTn z))L|^hH?h)9=)z7-Z*Uwpo;@Qp-t|{p_vQVHf*Ga#kCJo;=^#@%f#(-g@=80V^b#0)?=wnyicr z3{?stiYJM?detELnBga5lipNbR+fpRd%z}{iddrsWw`jytNfs6k?DCMuI!^NhhXJv z=r7XJbqB`ARFZdh;1>2MM?W8x-?NhUTp;b3KA!^;? zUAhU=DGxWumnr_ixq`HnIl?+4dM-$t{OjIv1ug$b1`4_gLRHwJ&0(fhoCkciqQH&b zo2-h}qMLH4a!6F>qT0MGr3fx{*}w3sqWV6tCPBn;RWc=dC9P0xJefjck?y74^_gPa%3`t?JKos*2!5Ur!`V9Ets}R?Wqz zh04ViqO?6dc>?Vf;Q*vc?s5gJ)5Q*Ca~OBzvUGAW4s$0NY#QS>!uY+yr2=yGqy~D)HLdF_fNo|ixG?Sz#3T$(hvL=fvmzPQm zsFHU@FfgnnB1h6dhkHGWVN`VKS00JIX~Hnc)9}jPF13C;rOGxN#EgZZBhzgOIy68B*JOcW(AAmNc}GHlok6^ zSpzc@G*ox4CQp*&CIwH|zU?Ey>(Q1ml3JBhh+a@oOc<-r5%OxfA)dJ1h{()2&vOv8%Nkj+sl@sRmaCRj#3k3ia4|79 zFN+(G5;C9O>9FodJ-y;Ir~$l_(J=9aepC|%ZGuuF^l|Zc@=nuw=TXp|i)#h-C@agj z>slP?;WGE&VQ`up|06^mr7{<3Ir$p%v|`W9l9)d~aiP+Lm{~c2e*Qj(i(+Ou{c+)r zzj6y6>SvrhDJ83DFC~TOVIyT@*+hIc6WWtE zA7=vO(>%58JsimOXhQIqhPczf&U3o-Jx!U)mYWksp%Np^?tTqQ&Vs_pSc90XueA3K zUcspJbcG|g!gtIInwQ_K0=geWsVsTn_(L|V*p0s;RqcpAFNi2gO}S*>obEfaptf@I z)#cRLGdFv2PLUK`b+V*1E@9_lmiwh~Y|3s&m83a6lHo$Fx|}QdvVDW9+Vr0O^4Gf7 zSrRfLEuzD(aw|&Y21MT%FdHq&CkVe_zPy)_FrE^6Z;i_)P=YyQ$h3OFf+RIvw@H%$ z>*APFG=yw^B~m()$0y1S_9byUi|LodB}X`74=FaADXb|gtg9!YizzjB2!Kw zva?JWKEI=Z)(PhDigAgH5#@@sRVpL^pxsv>WP8`MF8j=m7Ru=z@s zKh8e4B5YDc(p9Q}sIQ&ams1M0rMwc&vIQ(@Q>jK}T&V*6QjxHf7fg;pHAqZB0$yXL z&XOP|6pQpmbY=8Ln8REo?5v`bw3KifEG`w`Di+AjW!X(B_Ec9uU@VG7O1~PfSSjL7^Hq%#_Wp(pE3cF-{itGX;S;Z>54>oK2VAO6?Q@r6B=-gB_go??CYYrxQRR9*#>=M*+OD#+Lbk_2#Tchgi`#dm z?JjWdOv}g5j4EQ_+^JMjl~;V~f8`{=%52hC18S=bU#rBxHhGWRmk`k6TmafR(%*=V z8N#|V8^_0Ltt^2eV8@dB}Fu%MqyXXMv^itK-63(QI=1poa25ypit^-J+ z)x;7EQ(_~4=oMBM=rd^(ZY8YGAlbY=jI#7-ZoXZV2Q9VTRCbM-QdcGLQeV_>EWvnl3#B+;L^BciAr4SxRY49<7xmgR^<~a+wNHXlo}c1Gl@f%ea*XYW zW|hmzeDPv|e7Le~O=v8u%He&FLX<~tbUnQX-T%O z)<|-5JXcYpd$|>EJh(cO$cdR@X?`q!49aWEDQR;qBf~tBw$`F>$^x#%!gwbpy+0Ga zRBAyq&i?=!lVS$k;h^Z3RK2I-%EH2)Q!%x&*$a1uP^CF~LOa3msXka$a;^l;^S}jl z(N3CFRYdu(v2#$_@lI~7elAIph^3a{&t=Dzj? zRo(K^395qItOrb+ZY1}ieUUCp>ybcSswUpOCRmB7pU)_SmyEhDNTlmj@5gnZwah`` zG1B^uCubHA!*Cq3blqYaA5NHES*n0++qpSBmGE+j5 z#MbCyl!AaJoiUPQeT5geGnRk{bN+pwt{ zaE|zxs+)I~SPrQ0C;9h)Mtt-hqVnMb*6Oiezku-%gE5x?GDSX)XN;T;mGx>jGFjFf_O@IxI_Q;&PqfVh-)~%Dl6P&ZW{;$noAACoVRC zGA(*`K$5h8x~u#mPHZVKO}vPc97D9z-Gz&>NCT*_K&QlV-G z6=2N85_>VBqcInbz{`Q@!ZBRA0Wb)$B+^$KNmrP0UaHcT!z#W-CvW)ukO(q0NQll5 z07#igUM%897ED%AEK-%}>=7~uT2YDIQClwi=z~Ebv7JM82f!0D7=>a$B~{9GG9B!< zij-PoQ6`wvLw)koLuDDj^U=#?={14X5=k)J04xkw>}ZY9ACPuRatH`}Cdjb*kO74@ zB(E%eB3!?hA_3tw%@QP_#)u}kx~zzjtbEMx-9@RSQ(+~2 zJ*z64(L`73T<7r`dL|7D9))3ryt*KHiB1}JO`xC2gd3Ww!0_t;o|Nz}eT)^R!xR;Q zBR-H=+9%f($*fIMCZDxi6;w0kPe=Q%$eW9ycSUA>#@hy~#_Z#Q4`KaUGV3LHZfz9@ zod?i`ZtYcI>ly+5Cx0Srn36~!iabGzxJ0*=x`nDZm`3omywT-XS938gY$_s`iSpm8 zsdmy5c$`u=B$0&(C6L5bTNzQN%&TyO1W56|N5wr<3sZTXFrUcHBsS1}gKYDPpqYs_ zU@uee2vD9nh@C)-Crx!;l@EHqG{vro!XR32?-)gdmTa}&E%3>g^P#s4(8Ea>Vouq; zgSvnWGoO;HPfBSWDJ(th$6Nr&l8MsWU3zDu(pdnZ6HqZ1#2CyW zpmLdaS}ZJJLH$IDr$2Bo02%kPQ(EZS%u3ns@%)sc4vy1uB{tD6N-g*bJDv_6rT7qC zCv7j5>MK$uAzF(?MTxjH`byvIH=j(E81&5Q!J@fqpgfzn*omb7R!c_J?J0U{fsu*i z`J}|umEI~-79U{%w)`q|kx)@zo3@kyhhJ4lfSB>gkX0&OC0|p320eP=UfMRBqjWVe-~b`EAdLPp0(R3;DIF9kqK023Sh zHo|H;f+VS`dhslGx9$8bRq0h5;?nXO@TL|Ym+yBhiLVM96oP7c{TOtASgx9ji%-1z zAbs8|EkDLZx5-3GlVN0UpvH4RDk)7?>5g8BTBg=BtvfE{`&aKNKaeCopM?NcKlJbRkr369{lqj|ypDRgX l-!n%O(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. 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). + +```{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, "suma" = colSums(nV7Y)) +nBV7Y = cbind(nBV7Y, "suma" = 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 + + + + +``` + +--- + + +### 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) +``` + +## 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ą). + +```{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), + 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. + +```{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)) +``` + +# 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. + diff --git "a/wej\305\233ci\303\263wka z rozk\305\202ad\303\263w.R" "b/wej\305\233ci\303\263wka z rozk\305\202ad\303\263w.R" new file mode 100644 index 0000000..feecca5 --- /dev/null +++ "b/wej\305\233ci\303\263wka z rozk\305\202ad\303\263w.R" @@ -0,0 +1,135 @@ +library(knitr) +library(rmarkdown) +load("dane do wejściówki z rozkładów.RData") + +opisZmiennych = data.frame( + zmienna = names(etykiety), + opis = etykiety +) +poczatek1 = c("", "imię i nazwisko: ..................................", "", "---", "") +poczatek2 = c("", + "### Przy każdym z poniższych rozkładów napisz:", + "", + " * co to za typ rozkładu (brzegowy/skumulowany brzegowy/łączny/rodzina rozkładów warunkowych; liczebności/częstości)", + " * jakiej/jakich zmiennej/zmiennych", + " * używaj opisów znaczenia zmiennych, a nie liter oznaczających zmienne,", + " * w przypadku rodzin rozkładów warunkowych użyj sformułowania wskazującego zmienną *warunkującą*: *coś* ze względu na *coś innnego*.", + "") + +rozklady = list(brzegowyLiczebnosci = NULL, brzegowyCzestosci = NULL, + skumulowanyLiczebnosci = NULL, skumulowanyCzestosci = NULL, + lacznyLiczebnosci = NULL, lacznyCzestosci = NULL, + rwrLiczebnosci = NULL, rwrCzestosci = NULL) + +tresc = vector(mode = "character", length = 0) +for (i in 1:3) { + zmienne = vector(mode = "numeric" , length = 0) + # brzegowy liczebności + j = sample(ncol(dane), 1) + zmienne = c(zmienne, j) + tab = table(dane[, j]) + tab = setNames(data.frame(w = c(names(tab), "suma"), n = c(tab, sum(tab))), + c(paste0(tolower(names(etykiety)[j]), "_i"), + paste0("N(", names(etykiety)[j], " = ", + tolower(names(etykiety)[j]), "_i)"))) + rozklady$brzegowyLiczebnosci = kable(tab, row.names = FALSE, + format.args = list(decimal.mark = ",")) + # brzegowy częstości + j = sample(ncol(dane), 1) + zmienne = c(zmienne, j) + tab = round(prop.table(table(dane[, j])), 2) + tab[1] = 1 - sum(tab[-1]) + tab = setNames(data.frame(w = c(names(tab), "suma"), n = c(tab, sum(tab))), + c(paste0(tolower(names(etykiety)[j]), "_i"), + paste0("P(", names(etykiety)[j], " = ", + tolower(names(etykiety)[j]), "_i)"))) + rozklady$brzegowyCzestosci = kable(tab, row.names = FALSE, + format.args = list(decimal.mark = ",")) + # skumulowany liczebności + j = sample(ncol(dane), 1) + zmienne = c(zmienne, j) + tab = cumsum(table(dane[, j])) + tab = setNames(data.frame(w = names(tab), n = tab), + c(paste0(tolower(names(etykiety)[j]), "_i"), + paste0("N(", names(etykiety)[j], " <= ", + tolower(names(etykiety)[j]), "_i)"))) + rozklady$skumulowanyLiczebnosci = kable(tab, row.names = FALSE, + format.args = list(decimal.mark = ",")) + # skumulowany częstości + j = sample(ncol(dane), 1) + zmienne = c(zmienne, j) + tab = round(cumsum(prop.table(table(dane[, j]))), 2) + tab = setNames(data.frame(w = names(tab), n = tab), + c(paste0(tolower(names(etykiety)[j]), "_i"), + paste0("P(", names(etykiety)[j], " <= ", + tolower(names(etykiety)[j]), "_i)"))) + rozklady$skumulowanyCzestosci = kable(tab, row.names = FALSE, + format.args = list(decimal.mark = ",")) + # łączny liczebności + j = sample(1:4, 1) + k = sample(5:11, 1) + zmienne = c(zmienne, j, k) + tab = addmargins(table(dane[, k], dane[, j])) + rownames(tab) = sub("^Sum$", "suma", rownames(tab)) + colnames(tab) = sub("^Sum$", "suma", colnames(tab)) + rozklady$lacznyLiczebnosci = + c(paste0("N(", names(etykiety)[k], " = ", + tolower(names(etykiety)[k]), "_i ˄ ", + names(etykiety)[j], " = ", + tolower(names(etykiety)[j]), "_j)"), + "", kable(tab, format.args = list(decimal.mark = ","))) + # łączny czestosci + j = sample(1:4, 1) + k = sample(5:11, 1) + zmienne = c(zmienne, j, k) + tab = round(prop.table(table(dane[, k], dane[, j])), 3) + tab[1, 1] = 1 - sum(as.vector(tab)[-1]) + tab = addmargins(tab) + rownames(tab) = sub("^Sum$", "suma", rownames(tab)) + colnames(tab) = sub("^Sum$", "suma", colnames(tab)) + rozklady$lacznyCzestosci = + c(paste0("P(", names(etykiety)[k], " = ", + tolower(names(etykiety)[k]), "_i ˄ ", + names(etykiety)[j], " = ", + tolower(names(etykiety)[j]), "_j)"), + "", kable(tab, format.args = list(decimal.mark = ","))) + # warunkowy liczebności + j = sample(1:4, 1) + k = sample(5:11, 1) + zmienne = c(zmienne, j, k) + tab = addmargins(table(dane[, k], dane[, j]), 1) + rownames(tab) = sub("^Sum$", "suma", rownames(tab)) + rozklady$rwrLiczebnosci = + c(paste0("N(", names(etykiety)[k], " = ", + tolower(names(etykiety)[k]), "_i | ", + names(etykiety)[j], " = ", + tolower(names(etykiety)[j]), "_j)"), + "", kable(tab, format.args = list(decimal.mark = ","))) + # warunkowy czestosci + j = sample(1:4, 1) + k = sample(5:11, 1) + zmienne = c(zmienne, j, k) + tab = round(prop.table(table(dane[, k], dane[, j]), 2), 3) + tab[1, ] = 1 - colSums(tab[-1, ]) + tab = addmargins(tab, 1) + rownames(tab) = sub("^Sum$", "suma", rownames(tab)) + rozklady$rwrCzestosci = + c(paste0("P(", names(etykiety)[k], " = ", + tolower(names(etykiety)[k]), "_i | ", + names(etykiety)[j], " = ", + tolower(names(etykiety)[j]), "_j)"), + "", kable(tab, format.args = list(decimal.mark = ","))) + # generowanie tekstu + tresc = c(tresc, poczatek1, + kable(opisZmiennych[sort(unique(zmienne)), ], row.names = FALSE), + poczatek2, "", "---", "") + kolejnosc = sample(length(rozklady), length(rozklady)) + for (i in kolejnosc) { + tresc = c(tresc, "", paste0(rep(".", 458), collapse = ""), "", + rozklady[[i]], "", "---") + } +} + +#tresc = c("---", "output: odt_document", "---", "", tresc) +writeLines(tresc, file("temp.Md", encoding = "UTF-8")) +render("temp.Md", "odt_document", encoding = "UTF-8")