diff --git a/warsztat 2016.11.07/praca_domowa_2016.11.07.Rmd b/warsztat 2016.11.07/praca_domowa_2016.11.07.Rmd new file mode 100644 index 0000000..4db06d5 --- /dev/null +++ b/warsztat 2016.11.07/praca_domowa_2016.11.07.Rmd @@ -0,0 +1,198 @@ +--- +title: "Praca domowa na 7 listopada 2016" +author: "Tomasz Żółtak" +date: "24 października 2016" +output: html_document +--- + +# Przygotowanie do pracy + + 1. Otwórz w RStudio plik "praca_domowa_2016.11.07.Rmd" (np. menu: File -> Open file...). + * Mogło się zdarzyć, że przy zapisywaniu pliku "praca_domowa_2016.11.07.Rmd" z programu pocztowego na dysk Twojego komputera do jego nazwy zostało dopisane dodatkowo rozszerzenie ".txt". W takim przypadku po otwarciu go w RStudio kod nie będzie się kolorował (RStudio uzna go za zwykły plik tesktsowy, a nie plik raportu R). Aby rozwiązać problem, mając taki plik otwarty w RStudio wybierz z menu: File -> Save As... i w okienku, w którym ma być podana nazwa pliku wpisz "praca_domowa_2016.11.07.Rmd", po czym kliknij "zapisz". Możesz potem skasować wersję pliku z dodanym rozszerzeniem ".txt". + 3. Otwórz w RStudio plik "dane_2016.11.07.RData" (np. menu: File -> Open file...). + * Pojawi się okno zawierające pytanie, czy chcesz wczytać obiekty z pliku danych do przestrzeni roboczej - klikamy "tak". + 4. Otwórz w przeglądarce internetowej plik "warsztat_2016.11.07.html", żeby móc korzystać z niego jako pomocy. + +# Wczytywanie danych + +Jeśli plik "dane_2016.11.07.RData" zapisałeś/aś w tym samym folderze, co plik "praca_domowa_2016.11.07.Rmd" (który właśnie edytujesz), to poniższa linijka kodu pozwoli wczytać dane na potrzeby "zknitowania" raportu (gdybyś chciał(a) to zrobić). + +```{r comment="", prompt=TRUE, collapse=TRUE} +load("dane_2016.11.07.RData") +``` + +Powyższego polecenia możesz też użyć, żeby wczytać dane zamiast otwierania pliku metodą przez menu: File -> Open file... Jednakże aby operacja ta się udała, aktywny folder R musi być ustawiony na ten, w którym znajduje się ten plik. Aby sprawdzić, jaki jest folder roboczy, wywołaj w konsoli funkcję `getwd()`. Możesz go zmienić, używając funkcji `setwd("ścieżka_do_folderu")`. + +# Braki danych i specjalne wartości liczbowe (do przeczytania) + +## Braki danych w operacjach logicznych + +Dokonując operacji logicznych alternatywy (*lub*) oraz koniunkcji (*i*), z użyciem wektorów zawierających braki danych trzeba mieć na uwadze, że R wartość `NA` stanowi trzecią, zupełnie legalną, wartość logiczną, która w operacjach tych zachowuje się następująco: + +```{r comment="", prompt=TRUE, collapse=TRUE} +c(TRUE, FALSE) & NA +c(TRUE, FALSE) | NA +# to samo w tabelce +m = matrix(c(c(TRUE, FALSE) & NA, c(TRUE, FALSE) | NA), ncol = 2) +colnames(m) = c(" & NA", " | NA") +rownames(m) = c("TRUE", "FALSE") +m +``` + +## Braki danych w operacjach porównania + +Jeśli jedną (lub oboma) z dwóch wartości porównywanych w ramach zastosowania operatorów `==`, `!=`, `>`, `<`, `>=`, `<=` jest brak danych (`NA`), to w efekcie zwrócony zostanie brak danych. + +```{r comment="", prompt=TRUE, collapse=TRUE} +c(-1, 1, NA) > 0 +``` + +## Braki danych a wybieranie elementów wektora (macierzy) + +Jeśli wybieramy elementy wektora (macierzy, innego rypu obiektu) wykorzystując porównanie (czy ogólnie rzecz biorąc wektor wartości logicznych), musimy mieć na uwadze, że zwrócone zostaną **nie** te elementy, dla których wektor użyty do indeksowania (wyboru) przyjmuje wartości `TRUE` (choć zapewne tego właśnie byśmy oczekiwali) ale te, dla których nie przyjmuje on wartości `FALSE`. Tak więc zwrócone zostaną wszystkie elementy, dla których wekotr indeksujący przyjmuje wartości `TRUE` lub `NA`. + +```{r comment="", prompt=TRUE, collapse=TRUE} +x = c(1:10, NA) +x +x > 5 +x[x > 5] # zwraca również element z brakie danych! +``` + +Ponieważ typowo (a przynajmniej tak wynika z mojego osobistego doświadczenia) nie prowadzi to do wyniku, który chcielibyśmy osiągnąć, musimy pamiętać o zastosowaniu w takim przypadku środków zaradczych: użycia funkcji `is.na()` lub `na.omit()`, albo operatora `%in%`. + + 1. Użycie funkcji `is.na()` w ramach składni postaci `x[warunek_odnoszący_się_do_x & !is.na(x)]`: +```{r comment="", prompt=TRUE, collapse=TRUE} +x +is.na(x) +x[x > 5 & !is.na(x)] # teraz dostajemy to, czego typowo oczekujemy +``` + + 2. Użycie funkcji `na.omit()` w celu usunięcia z wektora elementów z brakami danych. +```{r comment="", prompt=TRUE, collapse=TRUE} +x +y = na.omit(x) +y +y[y > 5] +``` + + 3. Użycie operatora `%in%`. Operator `%in%` dla każdej wartości wektora podanego przed operatorem zwraca `TRUE`, jeśli występuje ona wśród elementów wektora podanego po operatorze lub `FALSE` w przeciwnym wypadku. Widać jednak, że aby móc postąpić w ten sposób, musimy być w stanie podać wyczerpujący zbiór wartości, które mogą przyjąć te elementy wektora, które chcemy wybrać. +```{r comment="", prompt=TRUE, collapse=TRUE} +x +x %in% 6:10 # po operatorze musimy podać zbiór konkretnych wartości +x[x %in% 6:10] +``` + +## Specjalne wartości liczbowe + +Pewne operacje są w matematyce zasadzie niedozwolone, lub nie mają sensu, np. dzielenie przez zero, czy wykonywanie jakichkolwiek operacji arytmetycznych na nieskończonościach. Próba ich wykonania w R nie wywoła jednak błędu, za to spowoduje zwrócenie w wyniku jednej ze specjalnych wartości liczbowych. + +### Nieskończoność + +W R element wektora liczb może mieć wartość *nieskończoność*: `Inf` lub *minus nieskończoność*: `-Inf` i **nie są** one traktowane jak braki danych! Wartości te możemy wykorzystać do porównań większe/mniejsze: + +```{r comment="", prompt=TRUE, collapse=TRUE} +Inf > 0 +c(1, 0, -Inf) >= 0 +Inf > 10^308 +# ale +Inf > 10^309 +# bo +10^308 # to się jeszcze daje reprezentować w typie danych 'numeric' +10^309 # a to jest już zbyt duża liczba +Inf == Inf +# Inf to nie brak danych! +is.na(Inf) +``` + +Poddają się też one operacjom arytmetycznym (z pewnym ograniczeniem w zakresie odejmowania i dzielenia), choć w większości wypadków zwracają w nich siebie lub minus siebie: + +```{r comment="", prompt=TRUE, collapse=TRUE} +Inf + 2 +Inf + Inf +Inf * 5 +Inf * -5 +Inf * Inf +Inf / 123 +# ale (p. dalsza część warsztatu) +Inf - Inf +Inf / Inf +``` + +Wartości `Inf` lub `-Inf` typowo uzyskujemy w wyniku wykonania jednej z dwóch operacji: + + 1. Podania jako argumentu funkcji `min()` lub `max()` wektora zawierającego same braki danych, przy pozostawieniu wartości argumentu `na.rm` na `TRUE` (poskutkuje to wywołaniem ostrzeżenia). +```{r comment="", prompt=TRUE, collapse=TRUE} +min(NA, na.rm = TRUE) +max(NA, na.rm = TRUE) +``` + + + 2. Podzieleniu liczby (nie będącej zerem) przez zero (zwróćmy uwagę, że oznacza to przyjęcie milczącego założenia, że tak na prawdę to nie chcieliśmy podzielić przez zero, tylko coś bardzo, bardzo małego - na tyle, że zostało zapisane jako zero, bo w programie zabrakło nam precyzji pozwalającej reprezentować tak małe liczby). +```{r comment="", prompt=TRUE, collapse=TRUE} +10 / 0 +-5 / 0 +-5 / (10 / 10^309) +``` + +### "Nie liczba" + +Wartość "Nie liczba": `NaN` jest specyficznym rodzajem braku danych, który uzyskamy, jeśli spróbujemy wykonać jedną z trzech operacji: + + 1. Podzielić zero przez zero. + 2. Odjąć *nieskończoność* od *nieskończoności*. + 3. Podzielić *nieskończoność* przez *nieskończoność*. + +```{r comment="", prompt=TRUE, collapse=TRUE} +0 / 0 +Inf - Inf +Inf / Inf + +is.na(NaN) +``` + +Wartość `NaN` jest uznawana za brak danych. Tyle tylko, że niesie ze sobą dodatkową inforację, że powstał on w wyniku próby wykonania *nielegalnej* operacji arytmetycznej. + +# Analiza danych (do wykonania) + +## Zadanie 1. + +W badaniu PISA badane są umiejętności uczniów w zakresie trzech dziedzin: *matematyki* (zmienna `scorePISAMath`), *czytania ze zrozumieniem* (zmienna `scorePISARead`) i *rozumowania w naukach przyrodniczych* (zmienna `scorePISAScie`). Możemy przyjąć, że wszystkie te trzy zmienne wyrażone są na jednej skali (jest to skala standardowa o średniej 500 i odchyleniu standardowym 100 w populacji krajów należących do OECD). Wykonaj niezbędne analizy i określ, które z dziedzin okazały się średnio najtrudniejsze, a które średnio najłatwiejsze oddzielnie dla zbadanych kobiet i mężczyzn. + + - Kobiety najniższe średnie wyniki uzyskały w dziedzinie **NAZWA DZIEDZINY** (**WPISZ WARTOŚĆ ŚREDNIEJ**), a najwyższe średnie wyniki uzyskały w dziedzinie **NAZWA DZIEDZINY** (**WPISZ WARTOŚĆ ŚREDNIEJ**). +```{r comment="", prompt=TRUE, collapse=TRUE} +# to jest miejsce na Twój kod + + + +``` + + - Mężczyźni najniższe średnie wyniki uzyskali w dziedzinie **NAZWA DZIEDZINY** (**WPISZ WARTOŚĆ ŚREDNIEJ**), a najwyższe średnie wyniki uzyskali w dziedzinie **NAZWA DZIEDZINY** (**WPISZ WARTOŚĆ ŚREDNIEJ**). +```{r comment="", prompt=TRUE, collapse=TRUE} +# to jest miejsce na Twój kod + + + +``` + +## Zadanie 2. + +Przeanalizuj, jak różnią się między sobą średnie wyniki z poszczególnych dziedzin testu PISA pomiędzy tymi badanymi, dla których liczba lat nauki rodzica (zmienna `parEdu`; ściśle jest to maksimum z liczby lat nauki matki i liczby lat nauki ojca) była nie większa niż mediana liczby lat nauki rodzica a tymi badanymi, dla których liczba lat nauki rodzica była większa od mediany. **Pomiń w analizie osoby, dla których liczba lat nauki rodzica jest nieznana.** Zapisz odpowiedzi: + +Różnica średnich wyników pomiędzy badanymi posiadającymi lepiej a badanymi posiadającymi gorzej wykształconych rodziców (zgodnie z przedstawioną wyżej definicją tych dwóch grup) to: + + - **WPISZ LICZBĘ** w dziedzinie *matematyki*, + - **WPISZ LICZBĘ** w dziedzinie *czytania ze zrozumieniem*, + - **WPISZ LICZBĘ** w dziedzinie *rozumowania w naukach przyrodniczych*. + +```{r comment="", prompt=TRUE, collapse=TRUE} +# to jest miejsce na Twój kod + + + +``` + +# Czynności końcowe + + - Zapisz wyniki swojej pracy (tj. plik "praca_domowa_2016.11.07.Rmd"). + - Zmień jego nazwę na "moje_imie_i_nazwisko_2016.11.07.Rmd". + - Wyślij go na adres email: **zoltakt@is.uw.edu.pl** diff --git a/warsztat 2016.11.07/praca_domowa_2016.11.07.html b/warsztat 2016.11.07/praca_domowa_2016.11.07.html new file mode 100644 index 0000000..2652676 --- /dev/null +++ b/warsztat 2016.11.07/praca_domowa_2016.11.07.html @@ -0,0 +1,370 @@ + + + + + + + + + + + + + + +Praca domowa na 7 listopada 2016 + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+

Przygotowanie do pracy

+
    +
  1. Otwórz w RStudio plik “praca_domowa_2016.11.07.Rmd” (np. menu: File -> Open file…). +
      +
    • Mogło się zdarzyć, że przy zapisywaniu pliku “praca_domowa_2016.11.07.Rmd” z programu pocztowego na dysk Twojego komputera do jego nazwy zostało dopisane dodatkowo rozszerzenie “.txt”. W takim przypadku po otwarciu go w RStudio kod nie będzie się kolorował (RStudio uzna go za zwykły plik tesktsowy, a nie plik raportu R). Aby rozwiązać problem, mając taki plik otwarty w RStudio wybierz z menu: File -> Save As… i w okienku, w którym ma być podana nazwa pliku wpisz “praca_domowa_2016.11.07.Rmd”, po czym kliknij “zapisz”. Możesz potem skasować wersję pliku z dodanym rozszerzeniem “.txt”.
    • +
  2. +
  3. Otwórz w RStudio plik “dane_2016.11.07.RData” (np. menu: File -> Open file…). +
      +
    • Pojawi się okno zawierające pytanie, czy chcesz wczytać obiekty z pliku danych do przestrzeni roboczej - klikamy “tak”.
    • +
  4. +
  5. Otwórz w przeglądarce internetowej plik “warsztat_2016.11.07.html”, żeby móc korzystać z niego jako pomocy.
  6. +
+
+
+

Wczytywanie danych

+

Jeśli plik “dane_2016.11.07.RData” zapisałeś/aś w tym samym folderze, co plik “praca_domowa_2016.11.07.Rmd” (który właśnie edytujesz), to poniższa linijka kodu pozwoli wczytać dane na potrzeby “zknitowania” raportu (gdybyś chciał(a) to zrobić).

+
> load("dane_2016.11.07.RData")
+

Powyższego polecenia możesz też użyć, żeby wczytać dane zamiast otwierania pliku metodą przez menu: File -> Open file… Jednakże aby operacja ta się udała, aktywny folder R musi być ustawiony na ten, w którym znajduje się ten plik. Aby sprawdzić, jaki jest folder roboczy, wywołaj w konsoli funkcję getwd(). Możesz go zmienić, używając funkcji setwd("ścieżka_do_folderu").

+
+
+

Braki danych i specjalne wartości liczbowe (do przeczytania)

+
+

Braki danych w operacjach logicznych

+

Dokonując operacji logicznych alternatywy (lub) oraz koniunkcji (i), z użyciem wektorów zawierających braki danych trzeba mieć na uwadze, że R wartość NA stanowi trzecią, zupełnie legalną, wartość logiczną, która w operacjach tych zachowuje się następująco:

+
> c(TRUE, FALSE) & NA
+[1]    NA FALSE
+> c(TRUE, FALSE) | NA
+[1] TRUE   NA
+> # to samo w tabelce
+> m = matrix(c(c(TRUE, FALSE) & NA, c(TRUE, FALSE) | NA), ncol = 2)
+> colnames(m) = c("   & NA", "   | NA")
+> rownames(m) = c("TRUE", "FALSE")
+> m
+         & NA    | NA
+TRUE       NA    TRUE
+FALSE   FALSE      NA
+
+
+

Braki danych w operacjach porównania

+

Jeśli jedną (lub oboma) z dwóch wartości porównywanych w ramach zastosowania operatorów ==, !=, >, <, >=, <= jest brak danych (NA), to w efekcie zwrócony zostanie brak danych.

+
> c(-1, 1, NA) > 0
+[1] FALSE  TRUE    NA
+
+
+

Braki danych a wybieranie elementów wektora (macierzy)

+

Jeśli wybieramy elementy wektora (macierzy, innego rypu obiektu) wykorzystując porównanie (czy ogólnie rzecz biorąc wektor wartości logicznych), musimy mieć na uwadze, że zwrócone zostaną nie te elementy, dla których wektor użyty do indeksowania (wyboru) przyjmuje wartości TRUE (choć zapewne tego właśnie byśmy oczekiwali) ale te, dla których nie przyjmuje on wartości FALSE. Tak więc zwrócone zostaną wszystkie elementy, dla których wekotr indeksujący przyjmuje wartości TRUE lub NA.

+
> x = c(1:10, NA)
+> x
+ [1]  1  2  3  4  5  6  7  8  9 10 NA
+> x > 5
+ [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE    NA
+> x[x > 5]  # zwraca również element z brakie danych!
+[1]  6  7  8  9 10 NA
+

Ponieważ typowo (a przynajmniej tak wynika z mojego osobistego doświadczenia) nie prowadzi to do wyniku, który chcielibyśmy osiągnąć, musimy pamiętać o zastosowaniu w takim przypadku środków zaradczych: użycia funkcji is.na() lub na.omit(), albo operatora %in%.

+
    +
  1. Użycie funkcji is.na() w ramach składni postaci x[warunek_odnoszący_się_do_x & !is.na(x)]:
  2. +
+
> x
+ [1]  1  2  3  4  5  6  7  8  9 10 NA
+> is.na(x)
+ [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
+> x[x > 5 & !is.na(x)]  # teraz dostajemy to, czego typowo oczekujemy
+[1]  6  7  8  9 10
+
    +
  1. Użycie funkcji na.omit() w celu usunięcia z wektora elementów z brakami danych.
  2. +
+
> x
+ [1]  1  2  3  4  5  6  7  8  9 10 NA
+> y = na.omit(x)
+> y
+ [1]  1  2  3  4  5  6  7  8  9 10
+attr(,"na.action")
+[1] 11
+attr(,"class")
+[1] "omit"
+> y[y > 5]
+[1]  6  7  8  9 10
+
    +
  1. Użycie operatora %in%. Operator %in% dla każdej wartości wektora podanego przed operatorem zwraca TRUE, jeśli występuje ona wśród elementów wektora podanego po operatorze lub FALSE w przeciwnym wypadku. Widać jednak, że aby móc postąpić w ten sposób, musimy być w stanie podać wyczerpujący zbiór wartości, które mogą przyjąć te elementy wektora, które chcemy wybrać.
  2. +
+
> x
+ [1]  1  2  3  4  5  6  7  8  9 10 NA
+> x %in% 6:10  # po operatorze musimy podać zbiór konkretnych wartości
+ [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
+> x[x %in% 6:10]
+[1]  6  7  8  9 10
+
+
+

Specjalne wartości liczbowe

+

Pewne operacje są w matematyce zasadzie niedozwolone, lub nie mają sensu, np. dzielenie przez zero, czy wykonywanie jakichkolwiek operacji arytmetycznych na nieskończonościach. Próba ich wykonania w R nie wywoła jednak błędu, za to spowoduje zwrócenie w wyniku jednej ze specjalnych wartości liczbowych.

+
+

Nieskończoność

+

W R element wektora liczb może mieć wartość nieskończoność: Inf lub minus nieskończoność: -Inf i nie są one traktowane jak braki danych! Wartości te możemy wykorzystać do porównań większe/mniejsze:

+
> Inf > 0
+[1] TRUE
+> c(1, 0, -Inf) >= 0
+[1]  TRUE  TRUE FALSE
+> Inf > 10^308
+[1] TRUE
+> # ale
+> Inf > 10^309
+[1] FALSE
+> # bo
+> 10^308  # to się jeszcze daje reprezentować w typie danych 'numeric'
+[1] 1e+308
+> 10^309  # a to jest już zbyt duża liczba
+[1] Inf
+> Inf == Inf
+[1] TRUE
+> # Inf to nie brak danych!
+> is.na(Inf)
+[1] FALSE
+

Poddają się też one operacjom arytmetycznym (z pewnym ograniczeniem w zakresie odejmowania i dzielenia), choć w większości wypadków zwracają w nich siebie lub minus siebie:

+
> Inf + 2
+[1] Inf
+> Inf + Inf
+[1] Inf
+> Inf * 5
+[1] Inf
+> Inf * -5
+[1] -Inf
+> Inf * Inf
+[1] Inf
+> Inf / 123
+[1] Inf
+> # ale (p. dalsza część warsztatu)
+> Inf - Inf
+[1] NaN
+> Inf / Inf
+[1] NaN
+

Wartości Inf lub -Inf typowo uzyskujemy w wyniku wykonania jednej z dwóch operacji:

+
    +
  1. Podania jako argumentu funkcji min() lub max() wektora zawierającego same braki danych, przy pozostawieniu wartości argumentu na.rm na TRUE (poskutkuje to wywołaniem ostrzeżenia).
  2. +
+
> min(NA, na.rm = TRUE)
+Warning in min(NA, na.rm = TRUE): brak argumentów w min; zwracanie wartości
+Inf
+[1] Inf
+> max(NA, na.rm = TRUE)
+Warning in max(NA, na.rm = TRUE): brak argumentów w max; zwracanie wartości
+-Inf
+[1] -Inf
+
    +
  1. Podzieleniu liczby (nie będącej zerem) przez zero (zwróćmy uwagę, że oznacza to przyjęcie milczącego założenia, że tak na prawdę to nie chcieliśmy podzielić przez zero, tylko coś bardzo, bardzo małego - na tyle, że zostało zapisane jako zero, bo w programie zabrakło nam precyzji pozwalającej reprezentować tak małe liczby).
  2. +
+
> 10 / 0
+[1] Inf
+> -5 / 0
+[1] -Inf
+> -5 / (10 / 10^309)
+[1] -Inf
+
+
+

“Nie liczba”

+

Wartość “Nie liczba”: NaN jest specyficznym rodzajem braku danych, który uzyskamy, jeśli spróbujemy wykonać jedną z trzech operacji:

+
    +
  1. Podzielić zero przez zero.
  2. +
  3. Odjąć nieskończoność od nieskończoności.
  4. +
  5. Podzielić nieskończoność przez nieskończoność.
  6. +
+
> 0 / 0
+[1] NaN
+> Inf - Inf
+[1] NaN
+> Inf / Inf
+[1] NaN
+> 
+> is.na(NaN)
+[1] TRUE
+

Wartość NaN jest uznawana za brak danych. Tyle tylko, że niesie ze sobą dodatkową inforację, że powstał on w wyniku próby wykonania nielegalnej operacji arytmetycznej.

+
+
+
+
+

Analiza danych (do wykonania)

+
+

Zadanie 1.

+

W badaniu PISA badane są umiejętności uczniów w zakresie trzech dziedzin: matematyki (zmienna scorePISAMath), czytania ze zrozumieniem (zmienna scorePISARead) i rozumowania w naukach przyrodniczych (zmienna scorePISAScie). Możemy przyjąć, że wszystkie te trzy zmienne wyrażone są na jednej skali (jest to skala standardowa o średniej 500 i odchyleniu standardowym 100 w populacji krajów należących do OECD). Wykonaj niezbędne analizy i określ, które z dziedzin okazały się średnio najtrudniejsze, a które średnio najłatwiejsze oddzielnie dla zbadanych kobiet i mężczyzn.

+
    +
  • Kobiety najniższe średnie wyniki uzyskały w dziedzinie NAZWA DZIEDZINY (WPISZ WARTOŚĆ ŚREDNIEJ), a najwyższe średnie wyniki uzyskały w dziedzinie NAZWA DZIEDZINY (WPISZ WARTOŚĆ ŚREDNIEJ).
  • +
+
> # to jest miejsce na Twój kod
+> 
+> 
+> 
+
    +
  • Mężczyźni najniższe średnie wyniki uzyskali w dziedzinie NAZWA DZIEDZINY (WPISZ WARTOŚĆ ŚREDNIEJ), a najwyższe średnie wyniki uzyskali w dziedzinie NAZWA DZIEDZINY (WPISZ WARTOŚĆ ŚREDNIEJ).
  • +
+
> # to jest miejsce na Twój kod
+> 
+> 
+> 
+
+
+

Zadanie 2.

+

Przeanalizuj, jak różnią się między sobą średnie wyniki z poszczególnych dziedzin testu PISA pomiędzy tymi badanymi, dla których liczba lat nauki rodzica (zmienna parEdu; ściśle jest to maksimum z liczby lat nauki matki i liczby lat nauki ojca) była nie większa niż mediana liczby lat nauki rodzica a tymi badanymi, dla których liczba lat nauki rodzica była większa od mediany. Pomiń w analizie osoby, dla których liczba lat nauki rodzica jest nieznana. Zapisz odpowiedzi:

+

Różnica średnich wyników pomiędzy badanymi posiadającymi lepiej a badanymi posiadającymi gorzej wykształconych rodziców (zgodnie z przedstawioną wyżej definicją tych dwóch grup) to:

+
    +
  • WPISZ LICZBĘ w dziedzinie matematyki,
  • +
  • WPISZ LICZBĘ w dziedzinie czytania ze zrozumieniem,
  • +
  • WPISZ LICZBĘ w dziedzinie rozumowania w naukach przyrodniczych.
  • +
+
> # to jest miejsce na Twój kod
+> 
+> 
+> 
+
+
+
+

Czynności końcowe

+ +
+ + + + +
+ + + + + + + + diff --git a/warsztat 2016.11.07/warsztat_2016.11.07.Rmd b/warsztat 2016.11.07/warsztat_2016.11.07.Rmd index 35392ef..be76e75 100644 --- a/warsztat 2016.11.07/warsztat_2016.11.07.Rmd +++ b/warsztat 2016.11.07/warsztat_2016.11.07.Rmd @@ -9,7 +9,7 @@ output: toc_depth: 3 --- -Na dzisiejszych zajęciach poznamy funkcje pozwalające obliczyć typowo wykorzystywane parametry poziomu wartości i parametry rozproszenia zmiennych statystycznych. Zobaczymy też, w jaki sposób R traktuje (typowo) braki danych. +Na dzisiejszych zajęciach poznamy funkcje pozwalające obliczyć typowo wykorzystywane parametry poziomu wartości zmiennych statystycznych. # Wczytanie danych @@ -142,238 +142,33 @@ names(nTMR)[which.max(nTMR)] names(which.max(nTMR)) ``` -# Parametry rozproszenia - -## Rozstęp i odchylenie ćwiartkowe - -W R nie mamy funkcji pozwalającej bezpośrednio obliczyć rozstęp, niemniej zrobienie tego samemu jest oczywiście banalnie proste. Z kolei funkcja `IQR()`, służąca obliczeniu odchylenia ćwiartkowego robi to nieco inaczej, niż w typowych (stosowanych w Polsce) definicjach (nie dzieli różnicy wartości 3. i 1. kwartyla przez dwa). Niemniej obliczenie samemu odchylenia ćwiartkowego również nie nastręcza trudności (jeśli umiemy obliczyć kwartyle). - ---- - -#### Zadanie - -Oblicz rozstęp i odchylenie ćwiartkowe zmiennej `scoreTMR`. - -```{r comment="", prompt=TRUE, collapse=TRUE} -# rozstęp -# to jest miejsce na TWój kod - -# odchylenie ćwiartkowe -# to jest miejsce na TWój kod - -``` - ---- - -## Wariancja i odchylenie standardowe - -Do obliczenia wariancji i odchylenia standardowego domyślnie wykorzystue się w R funkcje odpowiednio `var()` i `sd()`. W praktyce jest jednak z nimi pewien problem, bowiem **zwracają one wartości, które są nieobciążonymi przewidywaniami (odpowiednio wariancji i odchylenia standardowego), jeśli zadany im wektor traktować jako prostą próbę losową z populacji, dla której chcemy oszacować wartość danego parametru**. - -Od strony technicznej oznacza to, że w przypadku wariancji suma kwadratów różnic od średniej jest dzielona nie przez liczbę elmentów wektora, lecz przez liczbę elementów pomniejszoną o jeden. Jeśli wektor jest długi, robi to niewielką różnicę, jednak jeśli jest krótki, będzie ona bardzo wyraźna. - -```{r comment="", prompt=TRUE, collapse=TRUE} -# to się nie uda, bo var() nie liczy wariancji jako statystyki opisowej -# lecz jako oszacoanie wartości parametru w populacji na podstawie prostej próby losowej -var(1) -``` - -Jeśli chcemy uzyskać *normalną* wariancję/odchylenie standardowe musimy więc obliczyć ją sobie sami, lub skorygować wynik działania funkcji `var()` lub `sd()`: - - 1. Wariancja policzona *na piechotę* ze wzoru definicyjnego: - -```{r comment="", prompt=TRUE, collapse=TRUE} -varTMR = mean((scoreTMR - mean(scoreTMR, na.rm = TRUE))^2, na.rm = TRUE) -sdTMR = varTMR^0.5 -varTMR -sdTMR -# dla porównania -var(scoreTMR, na.rm = TRUE) -sd(scoreTMR, na.rm = TRUE) -``` - - 2. Wariancja policzona *na piechotę* z alternatywnego wzoru, jako różnica średniej kwadratów wartości zmiennej i kwadratu średniej tej zmiennej: - -```{r comment="", prompt=TRUE, collapse=TRUE} -var2TMR = mean(scoreTMR^2, na.rm = TRUE) - mean(scoreTMR, na.rm = TRUE)^2 -sd2TMR = var2TMR^0.5 -var2TMR -sd2TMR -``` - - - 3. Skorygowanie (przeliczenie) wyników działania funkcji `var()` lub `sd()`: - -```{r comment="", prompt=TRUE, collapse=TRUE} -poprawka = (length(scoreTMR) - 1) / length(scoreTMR) -poprawka -var(scoreTMR^2, na.rm = TRUE) * poprawka -sd(scoreTMR, na.rm = TRUE) * poprawka^0.5 -``` - -## Współczynnik zmienności - -Współczynniki zmienności są często bardziej użyteczną miarą zróżnicowania w przypadku zmiennych mierzonych na skalach ilorazowych, które przyjmują tylko wartości nieujemne, a więc mają zakres wartości ograniczony z jednej strony, ale otwarty z drugiej. Pozwalają bowiem uwzględnić, że w takim przypadku w ramach grupy o wysokiej średniej wartości zmiennej jest znacznie więcej *miejsca* na różnicowanie się wartości, niż w ramach grupy, w której średnia wartości tej zmiennej jest niska, a więc bliska granicy zakresu możliwych do przyjęcia wartości. - -Najszerzej wykorzystywany typ wskaźnika zmieności obliczamy dzieląc wartość odchylenia standardowego przez wartość średniej. - - ---- - -#### Zadanie - -Jaka zmienna/zmienne spośród wczytanych na początku zajęć spełnia warunki umożliwiające policzenie współczynnika zmienności? Odpowiedz na podstawie opisu zmiennych i wartości parametrów wartości (kod poniżej). - -```{r comment="", prompt=TRUE, collapse=TRUE} -variablesDescription -summary(cbind(age, scoreTMR, scoreKKS, scoreKNS, scorePISAMath, scorePISARead, - scorePISAScie, noPersHous, wealth, income, parEdu, hisei)) -``` - -Oblicz wartość współczynnika zmienności dla tej zmiennej (zmienych). - -```{r comment="", prompt=TRUE, collapse=TRUE} -# to jest miejsce na TWój kod -``` - ---- - - -## Odchylenie przeciętne od mediany - ---- - -#### Zadanie - -Oblicz odchylenie przeciętne od mediany zmiennej `scoreTMR`, pamiętając że: - - * Odchylenie przeciętne od mediany to średnia modułóW różnic pomiędzy wartością zmiennej dla danej jednostki obserwacji a wartością mediany. - * Do obliczenia modułu liczby można wykorzystać funkcję `abs()`. - -```{r comment="", prompt=TRUE, collapse=TRUE} -# to jest miejsce na Twój kod -``` - ---- - -# Braki danych i specjalne wartości liczbowe - -## Braki danych w operacjach logicznych - -Dokonując operacji logicznych alternatywy (*lub*) oraz koniunkcji (*i*), z użyciem wektorów zawierających braki danych trzeba mieć na uwadze, że R wartość `NA` stanowi trzecią, zupełnie legalną, wartość logiczną, która w operacjach tych zachowuje się następująco: - -```{r comment="", prompt=TRUE, collapse=TRUE} -c(TRUE, FALSE) & NA -c(TRUE, FALSE) | NA -# to samo w tabelce -m = matrix(c(c(TRUE, FALSE) & NA, c(TRUE, FALSE) | NA), ncol = 2) -colnames(m) = c(" & NA", " | NA") -rownames(m) = c("TRUE", "FALSE") -m -``` - -## Braki danych w operacjach porównania - -Jeśli wybieramy elementy wektora (macierzy, innego rypu obiektu) wykorzystując porównanie (czy ogólnie rzecz biorąc wektor wartości logicznych), musimy mieć na uwadze, że zwrócone zostaną nie elementy, dla których wektor użyty do indeksowania (wyboru) przyjmuje wartości `TRUE` ale te, dla których nieprzyjmuje on wartości `FALSE`. - -```{r comment="", prompt=TRUE, collapse=TRUE} -x = c(1:10, NA) -x -x > 5 -x[x > 5] # zwraca również element z brakie danych! -``` - -Ponieważ typowo (a przynajmniej tak wynika z mojego osobistego doświadczenia) nie prowadzi to do wyniku, który chcielibyśmy osiągnąć, musimy pamiętać o zastosowaniu w takim przypadku środków zaradczych: użycia funkcji `is.na()` lub `na.omit()`, albo operatora `%in%`. - -```{r comment="", prompt=TRUE, collapse=TRUE} -# funkcja is.na(): użycie składni '[warunek & !is.na(...)] -x -is.na(x) -x[x > 5 & !is.na(x)] # teraz dostajemy to, czego typowo oczekujemy -# funkcja na.omit(): usuwa braki danych z obiektu -x -y = na.omit(x) -y -y[y > 5] -# operator %in%: dla każdej wartości wektora podanego przed operatorem zwraca -# TRUE, jeśli występuje ona wśród elementów wektora podanego po operatorze -# lub FALSE w przeciwnym wypadku -x -x %in% 6:10 # tyle że musieliśmy tu podać zbiór konkretnych wartości -x[x %in% 6:10] -``` - -## Specjalne wartości liczbowe - -Pewne operacje są w matematyce zasadzie niedozwolone, lub nie mają sensu, np. dzielenie przez zero, czy wykonywanie jakichkolwiek operacji arytmetycznych na nieskończonościach. Próba ich wykonania w R nie wywoła jednak błędu, za to spowoduje zwrócenie w wyniku jednej ze specjalnych wartości liczbowych. - -### Nieskończoność - -W R element wektora liczb może mieć wartość *nieskończoność*: `Inf` lub *minus nieskończoność*: `-Inf` i **nie są** one traktowane jak braki danych! Wartości te możemy wykorzystać do porównań większe/mniejsze: - -```{r comment="", prompt=TRUE, collapse=TRUE} -Inf > 0 -c(1, 0, -Inf) >= 0 -Inf > 10^308 -# ale -Inf > 10^309 -# bo -10^308 # to się jeszcze daje reprezentować w typie danych 'numeric' -10^309 # a to jest już zbyt duża liczba -# Inf to nie brak danych! -is.na(Inf) -``` - -Poddają się też one operacjom arytemtycznym (z wyjątkiem odejmowania), choć w większości wypadków zwracają w nich siebie lub minus siebie: - -```{r comment="", prompt=TRUE, collapse=TRUE} -Inf + 2 -Inf + Inf -Inf * 5 -Inf * -5 -Inf * Inf -Inf / 123 -# ale (p. dalsza część warsztatu) -Inf - Inf -Inf / Inf -``` - -Wartości `Inf` lub `-Inf` typowo uzyskujemy w wyniku wykonania jednej z dwóch operacji: - - 1. Podania jako argumentu funkcji `min()` lub `max()` wektora zawierającego same braki danych, przy pozostawieniu wartości argumentu `na.rm` na `TRUE` (poskutkuje to wywołaniem ostrzeżenia). - 2. Podzieleniu liczby (nie będącej zerem) przez zero (zwróćmy uwagę, że oznacza to przyjęcie milczącego założenia, że tak na prawdę to nie chcieliśmy podzielić przez zero, tylko coś bardzo, bardzo małego - na tyle, że zostało zapisane jako zero, bo w programie zabrakło nam precyzji pozwalającej reprezentować tak małe liczby). - -```{r comment="", prompt=TRUE, collapse=TRUE} -min(NA, na.rm = TRUE) -max(NA, na.rm = TRUE) -10 / 0 --5 / 0 --5 / (10 / 10^309) -``` +# Na następne zajęcia -### "Nie liczba" +## Praca domowa -Wartość "Nie liczba": `NaN` jest specyficznym rodzajem braku danych, który uzyskamy, jeśli spróbujemy wykonać jedną z trzech operacji: +Zostanie nadesłana mailem. - 1. Podzielić zero przez zero. - 2. Odjąć *nieskończoność* od *nieskończoności*. - 3. Podzielić *nieskończoność* przez *nieskończoność*. +## Do przeczytania na następne zajęcia -```{r comment="", prompt=TRUE, collapse=TRUE} -0 / 0 -Inf - Inf -Inf / Inf +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., rozdziały 1.2.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. -is.na(NaN) -``` +Względnie inne publikacje, w których opisane są -Wartość `NaN` jest uznawana za brak danych. Tyle tylko, że niesie ze sobą dodatkową inforację, że powstał on w wyniku próby wykonania *nielegalnej* operacji arytmetycznej. + * rodzaje skal pomiarowych (nominalne/porządkowe/przedziałowe/ilorazowe/absolutne) -# Na następne zajęcia - -## Praca domowa +i następujące parametry poziomu wartości zmiennych statystycznych: -Zostanie nadesłana mailem. + * modalna (dominanta), + * minimum i maksimum, + * mediana, + * kwartyle, + * średnia, -## Do przeczytania na następne zajęcia +oraz następujące parametry rozproszenia zmiennych statystycznych: -Zostanie nadesłana mailem. + * rozstęp, + * odchylenie ćwiartkowe, + * odchylenie przeciętne od mediany, + * wariancja, + * odchylenie standardowe, + * współczynnik zmienności. diff --git a/warsztat 2016.11.07/warsztat_2016.11.07.html b/warsztat 2016.11.07/warsztat_2016.11.07.html index 12fffce..bd35105 100644 --- a/warsztat 2016.11.07/warsztat_2016.11.07.html +++ b/warsztat 2016.11.07/warsztat_2016.11.07.html @@ -135,20 +135,6 @@

7 listpada 2016

  • Średnia
  • Modalna (dominanta)
  • -
  • Parametry rozproszenia
  • -
  • Braki danych i specjalne wartości liczbowe
  • Na następne zajęcia -

    Na dzisiejszych zajęciach poznamy funkcje pozwalające obliczyć typowo wykorzystywane parametry poziomu wartości i parametry rozproszenia zmiennych statystycznych. Zobaczymy też, w jaki sposób R traktuje (typowo) braki danych.

    +

    Na dzisiejszych zajęciach poznamy funkcje pozwalające obliczyć typowo wykorzystywane parametry poziomu wartości zmiennych statystycznych.

    Wczytanie danych

    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 15 wektorów. Wektor o nazwie variablesDescription opisuje znaczenie pozostałych wektorów, które zawierają dane - zmienne z dodatkowej próby badawczej uczniów szkół pogimnazjalnych, zrealizowanej w ramach badania PISA 2009.

    @@ -348,290 +334,6 @@

    Modalna (dominanta)

    [1] "52"
    -
    -

    Parametry rozproszenia

    -
    -

    Rozstęp i odchylenie ćwiartkowe

    -

    W R nie mamy funkcji pozwalającej bezpośrednio obliczyć rozstęp, niemniej zrobienie tego samemu jest oczywiście banalnie proste. Z kolei funkcja IQR(), służąca obliczeniu odchylenia ćwiartkowego robi to nieco inaczej, niż w typowych (stosowanych w Polsce) definicjach (nie dzieli różnicy wartości 3. i 1. kwartyla przez dwa). Niemniej obliczenie samemu odchylenia ćwiartkowego również nie nastręcza trudności (jeśli umiemy obliczyć kwartyle).

    -
    -
    -

    Zadanie

    -

    Oblicz rozstęp i odchylenie ćwiartkowe zmiennej scoreTMR.

    -
    > # rozstęp
    -> # to jest miejsce na TWój kod
    -> 
    -> # odchylenie ćwiartkowe
    -> # to jest miejsce na TWój kod
    -> 
    -
    -
    -
    -
    -

    Wariancja i odchylenie standardowe

    -

    Do obliczenia wariancji i odchylenia standardowego domyślnie wykorzystue się w R funkcje odpowiednio var() i sd(). W praktyce jest jednak z nimi pewien problem, bowiem zwracają one wartości, które są nieobciążonymi przewidywaniami (odpowiednio wariancji i odchylenia standardowego), jeśli zadany im wektor traktować jako prostą próbę losową z populacji, dla której chcemy oszacować wartość danego parametru.

    -

    Od strony technicznej oznacza to, że w przypadku wariancji suma kwadratów różnic od średniej jest dzielona nie przez liczbę elmentów wektora, lecz przez liczbę elementów pomniejszoną o jeden. Jeśli wektor jest długi, robi to niewielką różnicę, jednak jeśli jest krótki, będzie ona bardzo wyraźna.

    -
    > # to się nie uda, bo var() nie liczy wariancji jako statystyki opisowej
    -> #   lecz jako oszacoanie wartości parametru w populacji na podstawie prostej próby losowej
    -> var(1)
    -[1] NA
    -

    Jeśli chcemy uzyskać normalną wariancję/odchylenie standardowe musimy więc obliczyć ją sobie sami, lub skorygować wynik działania funkcji var() lub sd():

    -
      -
    1. Wariancja policzona na piechotę ze wzoru definicyjnego:
    2. -
    -
    > varTMR = mean((scoreTMR - mean(scoreTMR, na.rm = TRUE))^2, na.rm = TRUE)
    -> sdTMR = varTMR^0.5
    -> varTMR
    -[1] 54.03407
    -> sdTMR
    -[1] 7.350787
    -> # dla porównania
    -> var(scoreTMR, na.rm = TRUE)
    -[1] 54.04975
    -> sd(scoreTMR, na.rm = TRUE)
    -[1] 7.351854
    -
      -
    1. Wariancja policzona na piechotę z alternatywnego wzoru, jako różnica średniej kwadratów wartości zmiennej i kwadratu średniej tej zmiennej:
    2. -
    -
    > var2TMR = mean(scoreTMR^2, na.rm = TRUE) - mean(scoreTMR, na.rm = TRUE)^2
    -> sd2TMR = var2TMR^0.5
    -> var2TMR
    -[1] 54.03407
    -> sd2TMR
    -[1] 7.350787
    -
      -
    1. Skorygowanie (przeliczenie) wyników działania funkcji var() lub sd():
    2. -
    -
    > poprawka = (length(scoreTMR) - 1) / length(scoreTMR)
    -> poprawka
    -[1] 0.9997366
    -> var(scoreTMR^2, na.rm = TRUE) * poprawka
    -[1] 423791.9
    -> sd(scoreTMR, na.rm = TRUE) * poprawka^0.5
    -[1] 7.350885
    -
    -
    -

    Współczynnik zmienności

    -

    Współczynniki zmienności są często bardziej użyteczną miarą zróżnicowania w przypadku zmiennych mierzonych na skalach ilorazowych, które przyjmują tylko wartości nieujemne, a więc mają zakres wartości ograniczony z jednej strony, ale otwarty z drugiej. Pozwalają bowiem uwzględnić, że w takim przypadku w ramach grupy o wysokiej średniej wartości zmiennej jest znacznie więcej miejsca na różnicowanie się wartości, niż w ramach grupy, w której średnia wartości tej zmiennej jest niska, a więc bliska granicy zakresu możliwych do przyjęcia wartości.

    -

    Najszerzej wykorzystywany typ wskaźnika zmieności obliczamy dzieląc wartość odchylenia standardowego przez wartość średniej.

    -
    -
    -

    Zadanie

    -

    Jaka zmienna/zmienne spośród wczytanych na początku zajęć spełnia warunki umożliwiające policzenie współczynnika zmienności? Odpowiedz na podstawie opisu zmiennych i wartości parametrów wartości (kod poniżej).

    -
    > variablesDescription
    -                                            schoolType 
    -                                 "School type (track)" 
    -                                                   sex 
    -                                      "Sex of student" 
    -                                                   age 
    -                         "How old student was in 2009" 
    -                                              scoreTMR 
    -   "Score on Raven's Progressive Matrices test [0-60]" 
    -                                              scoreKKS 
    -        "Score on Cultural Competences Scale [60-240]" 
    -                                              scoreKNS 
    -           "Score on Snyder's Adult Hope Scale [8-64]" 
    -                                         scorePISAMath 
    -"Score on PISA mathematics test (pseudoEAP estimator)" 
    -                                         scorePISARead 
    -    "Score on PISA reading test (pseudoEAP estimator)" 
    -                                         scorePISAScie 
    -    "Score on PISA science test (pseudoEAP estimator)" 
    -                                            noPersHous 
    -                    "Number of persons in a household" 
    -                                                wealth 
    -                "Highest parental occupational status" 
    -                                                income 
    -                 "Highest parental education in years" 
    -                                                parEdu 
    -                                              "Wealth" 
    -                                                 hisei 
    -                             "Houshold monthly income" 
    -> summary(cbind(age, scoreTMR, scoreKKS, scoreKNS, scorePISAMath, scorePISARead,
    -+               scorePISAScie, noPersHous, wealth, income, parEdu, hisei))
    -      age           scoreTMR        scoreKKS        scoreKNS    
    - Min.   :15.79   Min.   :11.00   Min.   : 60.0   Min.   : 8.00  
    - 1st Qu.:17.17   1st Qu.:45.00   1st Qu.:162.0   1st Qu.:43.00  
    - Median :17.45   Median :50.00   Median :178.0   Median :48.00  
    - Mean   :17.47   Mean   :48.54   Mean   :178.3   Mean   :47.74  
    - 3rd Qu.:17.72   3rd Qu.:54.00   3rd Qu.:195.0   3rd Qu.:53.00  
    - Max.   :20.21   Max.   :60.00   Max.   :240.0   Max.   :64.00  
    - NA's   :322     NA's   :350     NA's   :325     NA's   :337    
    - scorePISAMath   scorePISARead   scorePISAScie     noPersHous    
    - Min.   :199.2   Min.   :231.7   Min.   :226.8   Min.   : 2.000  
    - 1st Qu.:457.2   1st Qu.:467.3   1st Qu.:473.9   1st Qu.: 4.000  
    - Median :528.2   Median :534.8   Median :538.6   Median : 4.000  
    - Mean   :523.5   Mean   :524.5   Mean   :531.0   Mean   : 4.536  
    - 3rd Qu.:588.2   3rd Qu.:589.0   3rd Qu.:596.2   3rd Qu.: 5.000  
    - Max.   :793.7   Max.   :749.1   Max.   :756.3   Max.   :14.000  
    -                                                 NA's   :86      
    -     wealth            income           parEdu          hisei      
    - Min.   :-2.8256   Min.   : 1.136   Min.   : 3.00   Min.   :16.00  
    - 1st Qu.:-0.7216   1st Qu.: 5.305   1st Qu.:11.00   1st Qu.:33.00  
    - Median :-0.2500   Median : 7.494   Median :11.00   Median :43.00  
    - Mean   :-0.1678   Mean   : 9.598   Mean   :12.34   Mean   :45.86  
    - 3rd Qu.: 0.2512   3rd Qu.:10.818   3rd Qu.:12.00   3rd Qu.:55.00  
    - Max.   : 2.7703   Max.   :68.456   Max.   :16.00   Max.   :90.00  
    - NA's   :9         NA's   :9        NA's   :43      NA's   :111    
    -

    Oblicz wartość współczynnika zmienności dla tej zmiennej (zmienych).

    -
    > # to jest miejsce na TWój kod
    -
    -
    -
    -
    -

    Odchylenie przeciętne od mediany

    -
    -
    -

    Zadanie

    -

    Oblicz odchylenie przeciętne od mediany zmiennej scoreTMR, pamiętając że:

    -
      -
    • Odchylenie przeciętne od mediany to średnia modułóW różnic pomiędzy wartością zmiennej dla danej jednostki obserwacji a wartością mediany.
    • -
    • Do obliczenia modułu liczby można wykorzystać funkcję abs().
    • -
    -
    > # to jest miejsce na Twój kod
    -
    -
    -
    -
    -
    -

    Braki danych i specjalne wartości liczbowe

    -
    -

    Braki danych w operacjach logicznych

    -

    Dokonując operacji logicznych alternatywy (lub) oraz koniunkcji (i), z użyciem wektorów zawierających braki danych trzeba mieć na uwadze, że R wartość NA stanowi trzecią, zupełnie legalną, wartość logiczną, która w operacjach tych zachowuje się następująco:

    -
    > c(TRUE, FALSE) & NA
    -[1]    NA FALSE
    -> c(TRUE, FALSE) | NA
    -[1] TRUE   NA
    -> # to samo w tabelce
    -> m = matrix(c(c(TRUE, FALSE) & NA, c(TRUE, FALSE) | NA), ncol = 2)
    -> colnames(m) = c("   & NA", "   | NA")
    -> rownames(m) = c("TRUE", "FALSE")
    -> m
    -         & NA    | NA
    -TRUE       NA    TRUE
    -FALSE   FALSE      NA
    -
    -
    -

    Braki danych w operacjach porównania

    -

    Jeśli wybieramy elementy wektora (macierzy, innego rypu obiektu) wykorzystując porównanie (czy ogólnie rzecz biorąc wektor wartości logicznych), musimy mieć na uwadze, że zwrócone zostaną nie elementy, dla których wektor użyty do indeksowania (wyboru) przyjmuje wartości TRUE ale te, dla których nieprzyjmuje on wartości FALSE.

    -
    > x = c(1:10, NA)
    -> x
    - [1]  1  2  3  4  5  6  7  8  9 10 NA
    -> x > 5
    - [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE    NA
    -> x[x > 5]  # zwraca również element z brakie danych!
    -[1]  6  7  8  9 10 NA
    -

    Ponieważ typowo (a przynajmniej tak wynika z mojego osobistego doświadczenia) nie prowadzi to do wyniku, który chcielibyśmy osiągnąć, musimy pamiętać o zastosowaniu w takim przypadku środków zaradczych: użycia funkcji is.na() lub na.omit(), albo operatora %in%.

    -
    > # funkcja is.na(): użycie składni '[warunek & !is.na(...)]
    -> x
    - [1]  1  2  3  4  5  6  7  8  9 10 NA
    -> is.na(x)
    - [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
    -> x[x > 5 & !is.na(x)]  # teraz dostajemy to, czego typowo oczekujemy
    -[1]  6  7  8  9 10
    -> # funkcja na.omit(): usuwa braki danych z obiektu
    -> x
    - [1]  1  2  3  4  5  6  7  8  9 10 NA
    -> y = na.omit(x)
    -> y
    - [1]  1  2  3  4  5  6  7  8  9 10
    -attr(,"na.action")
    -[1] 11
    -attr(,"class")
    -[1] "omit"
    -> y[y > 5]
    -[1]  6  7  8  9 10
    -> # operator %in%: dla każdej wartości wektora podanego przed operatorem zwraca
    -> #   TRUE, jeśli występuje ona wśród elementów wektora podanego po operatorze
    -> #   lub FALSE w przeciwnym wypadku
    -> x
    - [1]  1  2  3  4  5  6  7  8  9 10 NA
    -> x %in% 6:10  # tyle że musieliśmy tu podać zbiór konkretnych wartości
    - [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
    -> x[x %in% 6:10]
    -[1]  6  7  8  9 10
    -
    -
    -

    Specjalne wartości liczbowe

    -

    Pewne operacje są w matematyce zasadzie niedozwolone, lub nie mają sensu, np. dzielenie przez zero, czy wykonywanie jakichkolwiek operacji arytmetycznych na nieskończonościach. Próba ich wykonania w R nie wywoła jednak błędu, za to spowoduje zwrócenie w wyniku jednej ze specjalnych wartości liczbowych.

    -
    -

    Nieskończoność

    -

    W R element wektora liczb może mieć wartość nieskończoność: Inf lub minus nieskończoność: -Inf i nie są one traktowane jak braki danych! Wartości te możemy wykorzystać do porównań większe/mniejsze:

    -
    > Inf > 0
    -[1] TRUE
    -> c(1, 0, -Inf) >= 0
    -[1]  TRUE  TRUE FALSE
    -> Inf > 10^308
    -[1] TRUE
    -> # ale
    -> Inf > 10^309
    -[1] FALSE
    -> # bo
    -> 10^308  # to się jeszcze daje reprezentować w typie danych 'numeric'
    -[1] 1e+308
    -> 10^309  # a to jest już zbyt duża liczba
    -[1] Inf
    -> # Inf to nie brak danych!
    -> is.na(Inf)
    -[1] FALSE
    -

    Poddają się też one operacjom arytemtycznym (z wyjątkiem odejmowania), choć w większości wypadków zwracają w nich siebie lub minus siebie:

    -
    > Inf + 2
    -[1] Inf
    -> Inf + Inf
    -[1] Inf
    -> Inf * 5
    -[1] Inf
    -> Inf * -5
    -[1] -Inf
    -> Inf * Inf
    -[1] Inf
    -> Inf / 123
    -[1] Inf
    -> # ale (p. dalsza część warsztatu)
    -> Inf - Inf
    -[1] NaN
    -> Inf / Inf
    -[1] NaN
    -

    Wartości Inf lub -Inf typowo uzyskujemy w wyniku wykonania jednej z dwóch operacji:

    -
      -
    1. Podania jako argumentu funkcji min() lub max() wektora zawierającego same braki danych, przy pozostawieniu wartości argumentu na.rm na TRUE (poskutkuje to wywołaniem ostrzeżenia).
    2. -
    3. Podzieleniu liczby (nie będącej zerem) przez zero (zwróćmy uwagę, że oznacza to przyjęcie milczącego założenia, że tak na prawdę to nie chcieliśmy podzielić przez zero, tylko coś bardzo, bardzo małego - na tyle, że zostało zapisane jako zero, bo w programie zabrakło nam precyzji pozwalającej reprezentować tak małe liczby).
    4. -
    -
    > min(NA, na.rm = TRUE)
    -Warning in min(NA, na.rm = TRUE): brak argumentów w min; zwracanie wartości
    -Inf
    -[1] Inf
    -> max(NA, na.rm = TRUE)
    -Warning in max(NA, na.rm = TRUE): brak argumentów w max; zwracanie wartości
    --Inf
    -[1] -Inf
    -> 10 / 0
    -[1] Inf
    -> -5 / 0
    -[1] -Inf
    -> -5 / (10 / 10^309)
    -[1] -Inf
    -
    -
    -

    “Nie liczba”

    -

    Wartość “Nie liczba”: NaN jest specyficznym rodzajem braku danych, który uzyskamy, jeśli spróbujemy wykonać jedną z trzech operacji:

    -
      -
    1. Podzielić zero przez zero.
    2. -
    3. Odjąć nieskończoność od nieskończoności.
    4. -
    5. Podzielić nieskończoność przez nieskończoność.
    6. -
    -
    > 0 / 0
    -[1] NaN
    -> Inf - Inf
    -[1] NaN
    -> Inf / Inf
    -[1] NaN
    -> 
    -> is.na(NaN)
    -[1] TRUE
    -

    Wartość NaN jest uznawana za brak danych. Tyle tylko, że niesie ze sobą dodatkową inforację, że powstał on w wyniku próby wykonania nielegalnej operacji arytmetycznej.

    -
    -
    -

    Na następne zajęcia

    @@ -640,7 +342,28 @@

    Praca domowa

    Do przeczytania na następne zajęcia

    -

    Zostanie nadesłana mailem.

    +

    G. Lissowski, J. Haman i M. Jasiński. (2011). Podstawy statystyki dla socjologów. Wyd. II poprawione. Warszawa: Wydawnictwo Naukowe SCHOLAR. - Rozdziały: 1.1.-1.2., rozdziały 1.2.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ą

    +
      +
    • rodzaje skal pomiarowych (nominalne/porządkowe/przedziałowe/ilorazowe/absolutne)
    • +
    +

    i następujące parametry poziomu wartości zmiennych statystycznych:

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

    oraz następujące parametry rozproszenia zmiennych statystycznych:

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