1 Wstęp

Do tworzenia wykresów statystycznych w R można wykorzystać jedną z popularnych bibliotek:

2 Grafika w R - praca z pakietem lattice

2.1 Przykładowe dane

Przykładowe dane, z którymi będziemy pracować, załadujemy z pakietu Przemysława Biecka “PBImisc” (autor “Przewodnik po pakiecie R”). W przypadku pierwszego użycia tego pakietu, należy go zainstalować (w RStudio, pasek zadań-> Tools->Install Packages… - może wymagać uruchomienia RStudio w trybie administratora).

Inny sposób na instalowanie biblioteki jak w przykładzie niżej (linijka jest zakomentowana, instalujemy raz):

#install.packages("PBImisc")
library("PBImisc")

Na nasze potrzeby sprawdzimy “zawartość” obiektu kidney:

#kidney  #wyświetla obiekt kidney, wyświetla cały zbiór, 
#"dużo tekstu, dlatego zakomentowane tutaj"
head(kidney) # sprawdzić w pomocy co robi funkcja head
##   recipient.age donor.age CIT discrepancy.AB discrepancy.DR therapy diabetes
## 1            26        40  25              2              1      tc        0
## 2            52        62  31              4              1      cm        1
## 3            50        50  20              2              1      cm        0
## 4            56        47  38              3              0      tc        0
## 5            67        18  26              1              1      ca        0
## 6            26        45  22              1              0      cm        0
##   bpl.drugs MDRD7 MDRD30 MDRD3 MDRD6 MDRD12 MDRD24 MDRD36 MDRD60
## 1         3    46     71  65.0    71     65     70     76     72
## 2         4    44     58  20.0    78     62     87     72     47
## 3         2     6     36  37.8    42     45     46     46     33
## 4         3     8     39  55.7    52     60     73     75     91
## 5         1    36     79  64.2    64     64     79     70     63
## 6         3     9     43  58.0    49     45     51     48     56
mode(kidney)   #typ obiektu
## [1] "list"
str(kidney)    #struktura obiektu
## 'data.frame':    334 obs. of  16 variables:
##  $ recipient.age : int  26 52 50 56 67 26 56 42 48 53 ...
##  $ donor.age     : int  40 62 50 47 18 45 66 28 52 51 ...
##  $ CIT           : num  25 31 20 38 26 22 23 24 42 31 ...
##  $ discrepancy.AB: int  2 4 2 3 1 1 2 2 3 3 ...
##  $ discrepancy.DR: int  1 1 1 0 1 0 0 1 0 0 ...
##  $ therapy       : Factor w/ 3 levels "ca","cm","tc": 3 2 2 3 1 2 1 2 2 1 ...
##  $ diabetes      : int  0 1 0 0 0 0 0 0 0 0 ...
##  $ bpl.drugs     : int  3 4 2 3 1 3 2 1 1 2 ...
##  $ MDRD7         : num  46 44 6 8 36 9 33 37 8 7 ...
##  $ MDRD30        : num  71 58 36 39 79 43 39 64 57 40 ...
##  $ MDRD3         : num  65 20 37.8 55.7 64.2 58 52 70 39 33.4 ...
##  $ MDRD6         : num  71 78 42 52 64 49 39 64 76 42 ...
##  $ MDRD12        : num  65 62 45 60 64 45 42 70 84 42 ...
##  $ MDRD24        : num  70 87 46 73 79 51 41 86 75 47 ...
##  $ MDRD36        : num  76 72 46 75 70 48 45 77 81 42 ...
##  $ MDRD60        : num  72 47 33 91 63 56 47 69 82 39 ...
summary(kidney) #podsumowanie
##  recipient.age     donor.age          CIT        discrepancy.AB 
##  Min.   :14.00   Min.   :14.00   Min.   : 0.50   Min.   :0.000  
##  1st Qu.:34.00   1st Qu.:31.00   1st Qu.:18.00   1st Qu.:2.000  
##  Median :43.00   Median :44.00   Median :23.00   Median :2.000  
##  Mean   :41.67   Mean   :41.68   Mean   :23.07   Mean   :2.249  
##  3rd Qu.:50.00   3rd Qu.:51.00   3rd Qu.:28.00   3rd Qu.:3.000  
##  Max.   :67.00   Max.   :66.00   Max.   :44.00   Max.   :4.000  
##  discrepancy.DR   therapy     diabetes        bpl.drugs         MDRD7      
##  Min.   :0.0000   ca:152   Min.   :0.0000   Min.   :0.000   Min.   : 5.00  
##  1st Qu.:0.0000   cm: 77   1st Qu.:0.0000   1st Qu.:2.000   1st Qu.: 9.00  
##  Median :1.0000   tc:105   Median :0.0000   Median :2.000   Median :18.50  
##  Mean   :0.6976            Mean   :0.2365   Mean   :2.284   Mean   :24.36  
##  3rd Qu.:1.0000            3rd Qu.:0.0000   3rd Qu.:3.000   3rd Qu.:37.00  
##  Max.   :2.0000            Max.   :1.0000   Max.   :6.000   Max.   :99.00  
##      MDRD30           MDRD3            MDRD6            MDRD12      
##  Min.   :  7.00   Min.   : 15.00   Min.   : 16.00   Min.   :  8.00  
##  1st Qu.: 35.00   1st Qu.: 39.00   1st Qu.: 39.25   1st Qu.: 42.00  
##  Median : 47.00   Median : 50.00   Median : 50.00   Median : 51.00  
##  Mean   : 47.27   Mean   : 50.50   Mean   : 51.20   Mean   : 52.22  
##  3rd Qu.: 58.00   3rd Qu.: 58.15   3rd Qu.: 61.00   3rd Qu.: 62.00  
##  Max.   :115.00   Max.   :105.00   Max.   :131.00   Max.   :153.00  
##      MDRD24           MDRD36           MDRD60      
##  Min.   : 13.50   Min.   : 11.00   Min.   :  9.00  
##  1st Qu.: 43.00   1st Qu.: 42.25   1st Qu.: 41.00  
##  Median : 53.00   Median : 54.00   Median : 54.00  
##  Mean   : 53.72   Mean   : 53.74   Mean   : 54.83  
##  3rd Qu.: 65.00   3rd Qu.: 67.75   3rd Qu.: 69.00  
##  Max.   :103.00   Max.   :109.00   Max.   :141.00
#? PBImisc # informacje na temat pakietu, w szczególności zbioru danych
#"kidney" (na dole okna pomocy powinien znajdować się link "Index"
#do dalszej części dokumentacji)

2.2 Porównanie wykresów z 3 pakietów ze domyślnymi argumentami

Uwaga: pakiety lattice i ggplot2 wymagają załadowania bibliotek i być może jednorazowego zainstalowania.

plot(MDRD12~MDRD7, data=kidney) #standardowy wkres

library("lattice")
xyplot(MDRD12~MDRD7, data=kidney) # za pomocą pakietu lattice

library("ggplot2")
qplot(MDRD12,MDRD7, data=kidney)  # za pomocą pakietu ggplot2
## Warning: `qplot()` was deprecated in ggplot2 3.4.0.

2.3 Elementy wykresu w pakiecie lattice

  • Użyty szablon - każdy szablon realizowany przez odpowiednią funkcję z pakietu. Listę funkcji można znaleźć w pomocy na temat pakietu (omówione zostaną w dalszej części Laboratorium):

    #? lattice

    Funkcje podzielone są na grupy: funkcje jednej zmiennej (univariate), dwóch zmiennych (bivariate), trójwymiarowe (trivariate) i wielu zmiennych (multivariate). Funkcje te i ich opcje omówimy w dalszej części. Uwaga: przez wykres dwóch zmiennych rozumiemy wykres, gdzie jedna ze zmiennych jest zależna (np. jest funkcją) drugiej zmiennej.

  • Formuła opisująca, które zmienne i w jakiej roli mają wystąpić na wykresie. Formuła składa się z 3 części: lewej strony formuły, prawej strony formuły i warunkowania. Zmienne powinny być widoczne w lokalnej przestrzeni nazw (prawe górne okno RStudio) albo odpowiadać nazwom kolumn w danych wskazanych przez argument data.
    Składnia formuły:
    zmienna objaśniana ~ zmienne objaśniające | zmienna grupująca

    zmienna objaśniana oraz zmienna grupująca może zawierać dowolną liczbę zmiennych rozdzielonych znakiem * lub + (znaki te można używać zamiennie)

  • Typy zmiennych użytych w formule, od nich zależy sposób prezentacji na wykresie.

2.4 Podstawowy wykres

2.4.1 Dane do wykresu

Spróbujemy najpierw przyjrzeć się trzem wybranym elementom zbioru kidney, a następnie zilustrujemy dane na wykresie (chodzi o kolumny MDRD12, MDRD7, discrepancy.DR ramki danych kidney). Sprawdzić w pomocy ? kidney co opisują (mierzą) te zmienne.

head(kidney$MDRD12) # można pominąć head()
## [1] 65 62 45 60 64 45
mode(kidney$MDRD12)
## [1] "numeric"
str(kidney$MDRD12)
##  num [1:334] 65 62 45 60 64 45 42 70 84 42 ...
length(kidney$MDRD12)
## [1] 334
summary(kidney$MDRD12)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    8.00   42.00   51.00   52.22   62.00  153.00


head(kidney$MDRD7)
## [1] 46 44  6  8 36  9
mode(kidney$MDRD7)
## [1] "numeric"
str(kidney$MDRD7)
##  num [1:334] 46 44 6 8 36 9 33 37 8 7 ...
length(kidney$MDRD7)
## [1] 334
summary(kidney$MDRD7)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    5.00    9.00   18.50   24.36   37.00   99.00
kidney$discrepancy.DR
##   [1] 1 1 1 0 1 0 0 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 1 1 0 1 1 1 1 1 1 2
##  [38] 1 1 2 0 0 2 1 0 1 0 0 1 1 0 0 1 1 1 0 0 1 2 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1
##  [75] 0 0 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 0 2 0 0 1 0 0 0 1 0 0 2 1 1 1 0 1 1 1
## [112] 1 0 0 0 0 1 1 2 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1
## [149] 2 2 1 1 1 1 1 0 1 1 1 0 0 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 0 1 1
## [186] 1 0 1 0 1 1 0 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 2 0 1 0 0 1 0 1 2 0 1 1
## [223] 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1
## [260] 1 1 1 1 0 1 0 1 0 0 1 0 1 1 0 1 1 1 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 2 1 0 0
## [297] 0 1 1 0 0 1 0 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 1 0 0 1 0 1 0 1 0
## [334] 1
table(kidney$discrepancy.DR) #liczba wystąpień wartości 0, 1 lub 2
## 
##   0   1   2 
## 113 209  12
mode(kidney$discrepancy.DR)
## [1] "numeric"
str(kidney$discrepancy.DR)
##  int [1:334] 1 1 1 0 1 0 0 1 0 0 ...
length(kidney$discrepancy.DR)
## [1] 334
summary(kidney$discrepancy.DR)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.0000  0.0000  1.0000  0.6976  1.0000  2.0000

2.4.2 Sam wykres

xyplot(MDRD12 ~ MDRD7 | discrepancy.DR, data = kidney)

W ten sposób uzyskaliśmy wykres składający się z 3 paneli (zmienna warunkująca discrepancy.DR ma 3 wartości 0, 1 oraz 2. Jest to liczba niezgodności w antygenach DR). Na osi OY (wartości) znajdują się dane MRDR12, na osi OX (argumenty) dane MDRD7. Jest to podstawowy wykres kropkowy. Argument data=kidney wskazuje, z jakiego zbioru danych mają być pobrane dane MDRD12, MDRD7, discrepancy.DR ilustrowane na wykresie.

Nic nie stoi na przeszkodzie, by dane do wykresu były zmiennymi globalnymi:

x=seq(0,10,0.1)
y=sin(x)
xyplot(y~x) #dostaniemy "wykres" funkcji y=sin(x) w przedziale od 0 do 10

3 Dodatkowe argumenty - modyfikacja wykresu xyplot

Wybrane argumenty pozwalające na modyfikowanie wykresu:

3.1 Argument type

“p” oznacza wykres kropkowy, “smooth” - krzywa średniej ruchomej, “r” - krzywa trendu liniowego. Wartości argumentu type przekazywane są jako lista - ta literka c służąca do tworzenia listy lub wektora.

xyplot(MDRD12 ~ MDRD7 | discrepancy.DR, data = kidney, type=c("p","smooth","r"))

Wybrane wartości argumentu:

  • p, punkty

  • l, linia (ciekawy efekt, jeśli dodamy do powyższego wykresu, przy wykresie funkcji sin ma to większy sens). Związane jest to z tym, że dane nie koniecznie muszą być funkcją (w standardowym sensie)

  • b, o, linia i punkty

  • h, linie pionowe przypominające histogram

  • s, punkty łączone są krzywą schodkową

  • spline, dopasowanie splinu 3-ciego stopnia do danych

  • g, pomocnicze linie siatki

  • a, średnie w grupach połączone linią (ćwiczenie: wyjaśnić, jak działa ten argument)

xyplot(MDRD12 ~ MDRD7 | discrepancy.DR, data = kidney, type=c("p","a"))

3.2 Legenda, argument key

Za pomocą argumentu auto.key=TRUE możemy stworzyć automatyczną legendę (uwaga, w przykładzie poniżej dodane zostały wartości dla MDRD36)

xyplot(MDRD12+ MDRD36 ~ MDRD7, data = kidney, type=c("p","spline"),auto.key=TRUE)

Zamiast wartości TRUE możemy podać listę właściwości do zmodyfikowania:

  • auto.key=list(columns=2) - legenda będzie wyświetlana w dwóch kolumnach

  • auto.key=list(space="right") pozycja legendy (możliwe: top, bottom, left, right)

  • auto.key=list(title="opis legendy")

xyplot(MDRD12+ MDRD36 ~ MDRD7, data = kidney, type=c("p","spline"),
       auto.key=list(columns=2,
                     space="bottom",
                     title = "opis legendy - dwie zmienne"))

3.3 Opisy osi, wykresu

Argumenty xlab="text", ylab="text2" pozwalają na zmianę nazw osi, zamiast standardowych pobieranych z formuły wykresu. Można też usunąć opis osi przez xlab=NULL .

Argument main="opis wykresu" pozwala na nadanie wykresowi nagłówka. Standardowo ma wartość NULL (brak nagłówka).

xyplot(MDRD12+ MDRD36 ~ MDRD7, data = kidney,
       type=c("p","spline"),
       xlab="oś iksów",
       ylab="oś igrek",
       main="Tytuł wykresu jest jak każdy widzi")

Uwaga: w przypadku dłuższych formuł przydatne jest rozbicie ich na kilka linijek, co zwiększa przejrzystość jak w kodzie powyżej.

Przydatny może być pakiet latex2exp umożliwiający używanie wyrażeń TeXa do tworzenia opisów osi/wykresów. Pakiet wymaga zainstalowania (jednorazowo) i załadowania biblioteki. Warto zwrócić uwagę na main w poniższym przykładzie - mieszanka tekstu i wyrażeni matematycznych ograniczonych standardowymi znakami $ TeXa:

library("latex2exp")
xyplot(MDRD12+ MDRD36 ~ MDRD7, data = kidney, type=c("p","spline"),
       xlab="oś iksów",
       ylab=TeX(r'($\alpha  x^\alpha, \ \ \frac{1}{x}$)'),
       main=TeX(r'(Using $\LaTeX$ for plotting in base graphics! $\alpha=\beta$)',
                bold=TRUE))

3.4 Argumenty xlim, ylim

Argumenty te pozwalają na kontrolowanie wartości na obu osiach, są zadawane jako dwuwymiarowe wektory oznaczające lewy i prawy koniec przedziału na osiach

xyplot(MDRD12+ MDRD36 ~ MDRD7, data = kidney, type=c("p","spline"),
       xlim=c(20,50), ylim=c(50,100),pch=25)

3.5 Argument pch, cex

Do zmiany symbolu znacznika na wykresie można wykorzystać argument pch, który może przyjmować wartości od 0 do 25 (liczbowe) lub pojedyncze znaki (ograniczone przez cudzysłów, np. “k”). Lista symboli dostępna jest w pomocy przez ? pch . Argument pch może przyjąć jako wartość wektor, określający znacznik dla każdego zestawu wartości oddzielnie.

Argument cex kontroluje rozmiar znacznika

xyplot(MDRD12+ MDRD36 ~ MDRD7,
       data = kidney,
       type=c("p","spline"),
       xlim=c(20,50),
       ylim=c(50,100),
       pch=25,
       cex=2)

4 Mechanizm warunkowania i mechanizm grupowania

4.1 Mechanizm warunkowania

Mechanizm warunkowania (poprzez symbol | w formule dla wykresu) pozwala na przedstawienie danych na osobnych panelach (tutaj w przykładzie na 3 panelach, gdzie zmienna warunkująca discrepancy.DR ma 3 różne wartości).

xyplot(MDRD36 ~ MDRD7|discrepancy.DR,
       data = kidney,
       type="p",
       cex=1,
       pch=4,
       auto.key = TRUE)

4.2 Mechanizm grupowania

Mechanizm grupowania - argument group - pozwala na przedstawienie tych samych danych na jednym wykresie, jak w przykładzie niżej (podział ponownie determinuje zmienna discrepancy.DR)

xyplot(MDRD36 ~ MDRD7,group=discrepancy.DR, data = kidney, type="p",
       cex=1,pch=4,auto.key = list(column=3))

5 Przegląd szablonów pakietu lattice

UWAGA:

Zaprezentowane w poniższych materiałach funkcje/opcje stanowią ułanek opcji/możliwości. Internet jest ogromnym zasobem wiedzy i odpowiedzi na pojawiające się pytania - choć czasem jest problem z odpowiednim sformułowaniem pytania (kolega tak mówi).

5.1 Wykres kropkowy, funkcja xyplot() .

Funkcja ta omówiona była dość szczegółowo we wcześniejszej części

5.2 Wykres kropkowy, funkcja splom()

Funkcja splom() służy do rysowania macierzy wykresów kropkowych:

splom(kidney[,c(9,11,13,15)],
      type=c("smooth","p"),
      pch='.')

Dołożymy dwa argumenty, pozwalające na sterowanie rozmiarem czcionki opisu zmiennych (dla potrzeb tego opisu czcionki zmniejszymy):

splom(kidney[,c(9,11,13,15)],
      type=c("smooth","p"),
      pch='.',
      varname.cex = .5,
      axis.text.cex=0.5)

Pierwszym argumentem funkcji splom() nie jest formuła, jak w xyplot(), a ramka danych zawierająca zmienne ilościowe. Argument type działa podobnie, jak w przypadku xyplot() - poprzednie zajęcia.

5.3 Wykres paskowy, funkcja stripplot()

Wykres paskowy pokazuje, jak zmienia się zmienna ilościowa dla różnych grup opisanych przez zmienną jakościową.

stripplot(factor(discrepancy.AB)~MDRD7,
          data=kidney,
          jitter.data=TRUE,
          alpha=0.5,
          col="red")

Uwaga:

str(kidney$discrepancy.AB) # discrepancy.AB jest zmienną ilościową (int)
##  int [1:334] 2 4 2 3 1 1 2 2 3 3 ...
str(factor(kidney$discrepancy.AB)) #zamienia zmienną 
##  Factor w/ 5 levels "0","1","2","3",..: 3 5 3 4 2 2 3 3 4 4 ...
#ilościową na zmienną jakościową (kategorii, factor)

Zadanie:

Jakie jest działanie argumentów jitter.data oraz alpha w powyższym przykładzie? Przetestować ich działanie zmieniając wartości argumentów

5.4 Wykres pudełkowy, funkcja bwplot

Wykres pudełkowy, inaczej wykres typu ramka-wąsy (b - box? w - whiskers?). Info: lewy koniec wąsa - minimum, początek pudełka - pierwszy kwartyl, kropka lub kreska pionowa w pudełku - mediana, koniec pudełka - trzeci kwartyl, prawy wąs - maksimum. Kropki poza głównym wykresem - obserwacje odstające (Zadanie: co to są obserwacje odstające?).

bwplot(therapy~MDRD12,
       data=kidney)

Argument varwidth=TRUE za pomocą szerokości pudełka obrazuje rozmiar porównywanych grup (różnica stosunkowo niewielka, ale jest):

bwplot(therapy~MDRD12,
       data=kidney,
       varwidth=FALSE)

bwplot(therapy~MDRD12,
       data=kidney,
       varwidth=TRUE)

Inny przykład: podzielenie discrepancy.AB na 3 przedziały

discrepancy<-equal.count(kidney$discrepancy.AB, number=3)
bwplot(therapy~MDRD12|discrepancy,
       data=kidney,
       varwidth=TRUE)

5.5 Wykres kropkowy i paskowy, funkcja dotplot()

Tablicę zliczeń (krzyżowych, kontyngencji) możemy wykorzystać funkcje table():

library("Przewodnik")
## Ładowanie wymaganego pakietu: PogromcyDanych
## Ładowanie wymaganego pakietu: dplyr
## 
## Dołączanie pakietu: 'dplyr'
## Następujące obiekty zostały zakryte z 'package:stats':
## 
##     filter, lag
## Następujące obiekty zostały zakryte z 'package:base':
## 
##     intersect, setdiff, setequal, union
## Ładowanie wymaganego pakietu: SmarterPoland
## Ładowanie wymaganego pakietu: httr
## Ładowanie wymaganego pakietu: htmltools
## Warning: pakiet 'htmltools' został zbudowany w wersji R 4.2.3
(wPlec=table(daneSoc$wyksztalcenie,daneSoc$plec)) #dodatkowy, zewnętrzny nawias
##             
##              kobieta mezczyzna
##   podstawowe      22        71
##   srednie         16        39
##   wyzsze          10        24
##   zawodowe         7        15
#powoduje natychmiastowe wyświetlenie danych

Do graficznej prezentacji takich danych można wykorzystać funkcję dotplot(), tutaj w podstawowej wersji:

dotplot(wPlec)

oraz nieco bardziej zaawansowanej:

dotplot(wPlec,
        groups=FALSE,
        type=c("p","h"))

dotplot(wPlec,
        type="o",
        auto.key=TRUE)

Zadanie/pytania:

  1. za co odpowiada argument groups?
  2. dla przypomnienia, co to jest type="o"?
  3. Do powyższego obrazka dodać tytuł wykresu, opisy osi, umieścić legendę po prawej stronie

5.6 Wykres kropkowy i paskowy, funkcja barchart()

attach(daneSoc) #wczytanie danych
tablica=as.data.frame(table(wyksztalcenie,plec,praca))
#potrzebujemy ramkę danych
tablica #wyświetlenie...
##    wyksztalcenie      plec             praca Freq
## 1     podstawowe   kobieta       nie pracuje    2
## 2        srednie   kobieta       nie pracuje    4
## 3         wyzsze   kobieta       nie pracuje    1
## 4       zawodowe   kobieta       nie pracuje    0
## 5     podstawowe mezczyzna       nie pracuje   20
## 6        srednie mezczyzna       nie pracuje   12
## 7         wyzsze mezczyzna       nie pracuje    5
## 8       zawodowe mezczyzna       nie pracuje    8
## 9     podstawowe   kobieta uczen lub pracuje   20
## 10       srednie   kobieta uczen lub pracuje   12
## 11        wyzsze   kobieta uczen lub pracuje    9
## 12      zawodowe   kobieta uczen lub pracuje    7
## 13    podstawowe mezczyzna uczen lub pracuje   51
## 14       srednie mezczyzna uczen lub pracuje   27
## 15        wyzsze mezczyzna uczen lub pracuje   19
## 16      zawodowe mezczyzna uczen lub pracuje    7
barchart(wyksztalcenie~Freq|plec,
         groups=praca,
         data=tablica,
         auto.key=TRUE)

Zadanie:

  1. dostosować wykres jak poprzednio (osie, tytuł itp.)

5.7 Wykres profili, funkcja parallelplot()

Funkcja parallelplot jest nowszą wersją funkcji parallel. Pozwala na przedstawienie profilu zmienności wielu cech jednocześnie

parallelplot(~kidney[,c(9:16)],
             groups=MDRD7<30,
             alpha=0.2,
             horizontal.axis=FALSE,
             scales=list(x=list(rot=90)),
             data=kidney)

Zadania:

  1. Jakie jest działanie “nowych” argumentów w powyższym poleceniu (horizontal.axis, scales)?
  2. Jaki jest efekt grupowania poprzez group=MDRD7?
  3. Wykres składa się z dużej ilości linii, ze względu na liczbę obserwacji w zbiorze danych kidney. Jak zaprezentować na wykresie wybrane wiersze (np. od 5 do 15)? Usunąć przy okazji mechanizm grupowania.

5.8 Histogram, funkcja histogram()

Podstawowy histogram oraz z warunkowaniem otrzymane za pomocą funkcji histogram():

histogram(~MDRD7, data=kidney)

histogram(~MDRD7|therapy, data=kidney)

Przydatna może być informacja o danych, w celu lepszego doboru przedziałów klasowych

 summary(kidney$MDRD7)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    5.00    9.00   18.50   24.36   37.00   99.00

Modyfikacja przedziałów, (ujemne wartości tylko ilustracyjnie) podział równomierny:

histogram(~MDRD7|therapy, data=kidney,
          breaks=seq(from=-10,to=100,by=5))

oraz podział nierównomierny:

histogram(~MDRD7|therapy, data=kidney,
          breaks=c(0,5,10,20,100))

Zmiana sposobu wyświetlania paneli poprzez argument layout:

histogram(~MDRD7|therapy, data=kidney,
          breaks=seq(from=0,to=100,by=5),
             layout=c(1,3))

Zadanie: sprawdzić efekt działania layout dla innych wartości.

5.9 Wykres gęstości, funkcja densityplot()

Wykres gęstości rozkładu w podstawowej postaci:

densityplot(~MDRD7,
            data=kidney)

oraz z warunkowaniem i dodatkowymi argumentami:

densityplot(~MDRD7|factor(diabetes),
            data=kidney,
            bw=8,
            plot.points="rug",
            auto.key=TRUE)

Inne modyfikacje

densityplot(~MDRD7,
            group=factor(diabetes),
            par.settings = list(superpose.line = list(col = c("blue","red"))),
            data=kidney,
            bw=8,
            from=0,to=80,
            plot.points=FALSE,
            auto.key=TRUE)

Zadanie:

  1. Narysować wykres gęstości warunkowany przez discrepancy.AB, tak aby panele były ułożone poziomo obok siebie oraz (druga wersja) pionowo jeden pod drugim
densityplot(~MDRD7|discrepancy.AB,
            data=kidney,
            plot.points="rug",
            auto.key=TRUE,
            layout=c(5,1))

densityplot(~MDRD7|discrepancy.AB,
            data=kidney,
            plot.points="rug",
            auto.key=TRUE,
            layout=c(1,5))

5.10 Wykres dystrybuanty empirycznej, funkcja ecdfplot z pakietu latticeExtra

Wywołanie funkcji:

library("latticeExtra")
## 
## Dołączanie pakietu: 'latticeExtra'
## Następujący obiekt został zakryty z 'package:ggplot2':
## 
##     layer
ecdfplot(~MDRD7,
         auto.key=TRUE,
         data=kidney)

Zadanie

Narysować wykres dystrybuanty empirycznej wykorzystując warunkowanie i grupowanie

5.11 Wykresy kwantylowe, funkcje qqmath() i qq()

Funkcja qqmath służy do przedstawienia wykresu kwantylowego zgodności z rozkładem zadanym przez argument distribution.

Wygenerujemy próbkę 500 obserwacji z rozkładu normalnego i porównamy z rozkładem normalnym i wykładniczym

probka=rnorm(500)
qqmath(~probka,distribution=qnorm)

qqmath(~probka,distribution=qexp)

Podobnie, tym razem próbka z rozkładu wykładniczego

probka=rexp(500)
qqmath(~probka,distribution=qnorm)

qqmath(~probka,distribution=qexp)

Uwaga: literka ‘q’ przy rozkładach związana jest z kwantylami rozkładu. Inne rozkłady można znaleźć w pomocy.

Funkcja qq() służy do konstrukcji wykresu kwantylowego przedstawiającego zgodność rozkładu zmiennej w dwóch grupach. Po lewej stronie formuły musi być podana zmienna z dokładnie dwoma poziomami:

qq(diabetes~MDRD7, data=kidney)

Zadanie:

Jak interpretować uzyskane wykresy?

6 Zadania

6.1 Zadanie 1

  • Zaimportować plik danych dane_w2.xlsx

  • Na podstawie danych CH7Avg wskazań wiatrowskazu (kierunku wiatru) utworzyć nowy wektor (np. sektor), który przyjmie wartości znakowe N, E, S, W, w zależności od wartości Ch7Avg w następujący sposób:
    N, gdy Ch7Avg jest mniejsze niż 45 lub większe niż 315
    E, gdy Ch7Avg jest większe niż 45 i mniejsze niż 135
    S, gdy Ch7Avg jest większe niż 135 i mniejsze niż 225
    W, gdy Ch7Avg jest większe niż 225 i mniejsze niż 315
    (domknąć przedziały z jednej strony). Wskazówka: było takie zadanie, gdzie losowaliśmy wektor z rozkładu jednostajnego i na jego podstawie budowaliśmy wektor o wartościach 0 lub 1, w zależności czy wylosowano liczbę mniejszą czy większą od 0.5.

  • Utworzyć ramkę danych zawierająca jedynie dane: date, wskazania Ch4Avg, Ch5Avg, Ch6Avg, Ch7Avg, oraz utworzony sektor. Ramka powinna wyglądać mniej więcej tak (tutaj tylko 6 pierwszych wierszy):

    ##                  date anemo_80m anemo_60m anemo_40m kierunek_80m sector
    ## 1 2010-08-01 00:00:00       4.6       5.3       4.8           62      E
    ## 2 2010-08-01 00:10:00       4.7       4.8       4.8           69      E
    ## 3 2010-08-01 00:20:00       5.1       4.8       4.5           83      E
    ## 4 2010-08-01 00:30:00       5.5       4.4       3.1           93      E
    ## 5 2010-08-01 00:40:00       5.0       3.8       2.6           89      E
    ## 6 2010-08-01 00:50:00       4.2       3.3       2.3           92      E

6.2 Zadanie 2

Korzystając z powyższej ramki narysować wykresy (zadbać o tytuły wykresów, kolory, legendy itp szczegóły wykresów):

  • jeden wykres (liniowy) wskazań anemometrów CH4, CH5 i CH6 w zależności od date

  • wykres punktowy wskazań anemometrów CH4 w zależności od date i sektora (4 panele, warunkowanie)

  • wykres punktowy wskazań anemometrów CH4, CH5 i CH6 w zależności od date i sektora (4 panele, warunkowanie)

  • wykres punktowy wskazań anemometrów CH4, CH5, CH6 w zależności od date wykorzystując grupowanie (3 panele, 4 serie kolorów). Powinno wyjść:

  • narysować wykres ramka-wąsy (bwplot) dla wskazań anemometru CH4

  • narysować wykres ramka-wąsy (bwplot) dla wskazań anemometru CH4 z podziałem na sektory (4 ramki na jednym rysunku)

  • narysować wykres macierzowy między wskazaniami CH4, CH5 i CH6. Porównać z macierzą korelacji dla tych danych (polecenie cor)

  • narysować wykres kwantylowy (qqmath) zgodności CH4 z rozkładem normalnym

  • narysować wykres kwantylowy (qqmath) zgodności CH4 z rozkładem Weibulla o parametrach wyestymowanych przy okazji poprzedniego laboratorium. Dostęp do rozkładu Weibulla (parametr distribution w qqmath) o zadanych parametrach poprzez function(p) qweibull(p,shape=???,scale=???) gdzie p jest argumentem funkcji i nie zmieniamy, a w miejsce ??? wstawiamy swoje wartości.