Skip to content

Commit

Permalink
Praca domowa 2016.10.17 i powiązane.
Browse files Browse the repository at this point in the history
  • Loading branch information
tzoltak committed Oct 17, 2016
1 parent b908ed1 commit b05a303
Show file tree
Hide file tree
Showing 6 changed files with 541 additions and 178 deletions.
Binary file added dane do wejściówki z rozkładów.RData
Binary file not shown.
164 changes: 164 additions & 0 deletions warsztat 2016.10.17/praca_domowa_2016.10.17.Rmd
Original file line number Diff line number Diff line change
@@ -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: [email protected]
195 changes: 17 additions & 178 deletions warsztat 2016.10.17/warsztat_2016.10.17.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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.
Binary file added warsztat 2016.10.24/dane_2016.10.24.RData
Binary file not shown.
Loading

0 comments on commit b05a303

Please sign in to comment.