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 0000000..6691b3d Binary files /dev/null and "b/dane do wej\305\233ci\303\263wki z rozk\305\202ad\303\263w.RData" differ diff --git a/warsztat 2016.10.17/praca_domowa_2016.10.17.Rmd b/warsztat 2016.10.17/praca_domowa_2016.10.17.Rmd new file mode 100644 index 0000000..1cdc25c --- /dev/null +++ b/warsztat 2016.10.17/praca_domowa_2016.10.17.Rmd @@ -0,0 +1,164 @@ +--- +title: "Praca domowa na 24 października 2016" +author: "Tomasz Żółtak" +date: "17 października 2016" +output: html_document +--- + +# Przygotowanie do pracy + + 1. Jeśli nie zrobiłeś/aś tego wcześniej, zainstaluj na swoim komputerze [R](https://cran.r-project.org) i [RStudio](https://www.rstudio.com/products/rstudio/download3). + 2. Jeśli nie zrobiłeś/aś tego wcześniej, otwórz RStudio i zainstaluj potrzebne pakiety, wywołując polecenie: + +```{r, eval=FALSE} +install.packages(c("reshape2", "plyr", "dplyr", "car", "effects", "multcomp", + "ggplot2", "knitr", "yaml", "rmarkdown", "devtools")) +``` + + 3. Otwórz w RStudio plik "praca_domowa_2016.10.17.Rmd" (np. menu: File -> 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 0000000..13f988c Binary files /dev/null and b/warsztat 2016.10.24/dane_2016.10.24.RData differ diff --git a/warsztat 2016.10.24/warsztat_2016.10.24.Rmd b/warsztat 2016.10.24/warsztat_2016.10.24.Rmd new file mode 100644 index 0000000..32f46c0 --- /dev/null +++ b/warsztat 2016.10.24/warsztat_2016.10.24.Rmd @@ -0,0 +1,225 @@ +--- +title: "Statystyka I z R
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")