Wprowadzenie

W moim raporcie użyję pakietu “MASS”, a w nim zbioru danych “Survey”, który pokazuje wyniki ankiety przeprowadzonej wśród studentów. Do wizualizacji danych posłużę się pakietem “ggplot2”.

Ten raport analizuje dane ankietowe zebrane za pomocą pakietu “MASS” w R. Zbiór obejmuje informacje na temat wieku, płci, palenia papierosów i tętna uczestników. Celem raportu jest zrozumienie ogólnej charakterystyki badanej populacji oraz identyfikacja kluczowych trendów w danych.

W poniższym raporcie stworzę cztery wykresy o różnych formach. Do niektórych z nich dołączone są obliczenia oraz interpretacje wyników.

Instalacja i załadowanie biblietek i pakietów.

library(MASS) #ładujemy bibliotekę "MASS"
library(ggplot2) #ładujemy bibliotekę "ggplot2"
## Warning: pakiet 'ggplot2' został zbudowany w wersji R 4.2.3

Szczegółowe informacje na temat zbioru danych “Survey” (biblioteka “MASS”).

data("survey")
head(survey) 
##      Sex Wr.Hnd NW.Hnd W.Hnd    Fold Pulse    Clap Exer Smoke Height      M.I
## 1 Female   18.5   18.0 Right  R on L    92    Left Some Never 173.00   Metric
## 2   Male   19.5   20.5  Left  R on L   104    Left None Regul 177.80 Imperial
## 3   Male   18.0   13.3 Right  L on R    87 Neither None Occas     NA     <NA>
## 4   Male   18.8   18.9 Right  R on L    NA Neither None Never 160.00   Metric
## 5   Male   20.0   20.0 Right Neither    35   Right Some Never 165.00   Metric
## 6 Female   18.0   17.7 Right  L on R    64   Right Some Never 172.72 Imperial
##      Age
## 1 18.250
## 2 17.583
## 3 16.917
## 4 20.333
## 5 23.667
## 6 21.000

Komenda ‘head(survey)’ wyświetli pierwsze kilka wierszy zbioru danych “survey”, w celu umożliwienia podglądu jego struktury i zawartości.

str(survey) 
## 'data.frame':    237 obs. of  12 variables:
##  $ Sex   : Factor w/ 2 levels "Female","Male": 1 2 2 2 2 1 2 1 2 2 ...
##  $ Wr.Hnd: num  18.5 19.5 18 18.8 20 18 17.7 17 20 18.5 ...
##  $ NW.Hnd: num  18 20.5 13.3 18.9 20 17.7 17.7 17.3 19.5 18.5 ...
##  $ W.Hnd : Factor w/ 2 levels "Left","Right": 2 1 2 2 2 2 2 2 2 2 ...
##  $ Fold  : Factor w/ 3 levels "L on R","Neither",..: 3 3 1 3 2 1 1 3 3 3 ...
##  $ Pulse : int  92 104 87 NA 35 64 83 74 72 90 ...
##  $ Clap  : Factor w/ 3 levels "Left","Neither",..: 1 1 2 2 3 3 3 3 3 3 ...
##  $ Exer  : Factor w/ 3 levels "Freq","None",..: 3 2 2 2 3 3 1 1 3 3 ...
##  $ Smoke : Factor w/ 4 levels "Heavy","Never",..: 2 4 3 2 2 2 2 2 2 2 ...
##  $ Height: num  173 178 NA 160 165 ...
##  $ M.I   : Factor w/ 2 levels "Imperial","Metric": 2 1 NA 2 2 1 1 2 2 2 ...
##  $ Age   : num  18.2 17.6 16.9 20.3 23.7 ...

Komenda ‘str(survey)’ dostarczy nam bardziej szczegółowych informacji na temat struktury i statystyk podsumowujących dla każdej kolumny w tym zbiorze danych.

Dane jakie znajdziemy w zbiorze danych ‘Survey’:

Sex: Płeć respondentów (mężczyzna lub kobieta). Wr.Hnd: Szerokość dłoni w centymetrach. NW.Hnd: Szerokość dłoni niesprawnej w centymetrach (jeśli ma miejsce). W.Hnd: Długość dłoni w centymetrach. Fold: Grubość fałdu skórnego na przedramieniu w milimetrach. Pulse: Tętno w spoczynku na minutę. Clap: Czy potrafią zaśpiewać w rytmie (TAK lub NIE). Exer: Częstotliwość ćwiczeń fizycznych (często, czasami, nigdy). Smoke: Czy palą papierosy (TAK lub NIE). Height: Wzrost w calach. M.I: Ocena wskaźnika masy ciała.

summary(survey) 
##      Sex          Wr.Hnd          NW.Hnd        W.Hnd          Fold    
##  Female:118   Min.   :13.00   Min.   :12.50   Left : 18   L on R : 99  
##  Male  :118   1st Qu.:17.50   1st Qu.:17.50   Right:218   Neither: 18  
##  NA's  :  1   Median :18.50   Median :18.50   NA's :  1   R on L :120  
##               Mean   :18.67   Mean   :18.58                            
##               3rd Qu.:19.80   3rd Qu.:19.73                            
##               Max.   :23.20   Max.   :23.50                            
##               NA's   :1       NA's   :1                                
##      Pulse             Clap       Exer       Smoke         Height     
##  Min.   : 35.00   Left   : 39   Freq:115   Heavy: 11   Min.   :150.0  
##  1st Qu.: 66.00   Neither: 50   None: 24   Never:189   1st Qu.:165.0  
##  Median : 72.50   Right  :147   Some: 98   Occas: 19   Median :171.0  
##  Mean   : 74.15   NA's   :  1              Regul: 17   Mean   :172.4  
##  3rd Qu.: 80.00                            NA's :  1   3rd Qu.:180.0  
##  Max.   :104.00                                        Max.   :200.0  
##  NA's   :45                                            NA's   :28     
##        M.I           Age       
##  Imperial: 68   Min.   :16.75  
##  Metric  :141   1st Qu.:17.67  
##  NA's    : 28   Median :18.58  
##                 Mean   :20.37  
##                 3rd Qu.:20.17  
##                 Max.   :73.00  
## 

Komenda ‘summary(survey)’ dostarczy statystyki podsumowujące dla każdej kolumny w zbiorze danych “survey”, co obejmuje miary tendencji centralnej, kwartyle, liczność i inne informacje statystyczne.

Wykresy oraz obliczenia.

WYKRES NR 1

Tworzenie wykresu słupkowego. Tworzymy wykres który przedstawia liczbę palących i niepalących w zależności od płci.

ggplot(survey, aes(x = Sex, fill = Smoke)) +
  geom_bar(position = "dodge", stat = "count") +
  scale_fill_manual(values = c("red", "darkred", "red2", "pink", "red3"))+
  labs(title = "Płeć vs. palenie papierosów",
       x = "Płeć",
       y = "Liczba respondentów",
       fill = "Częstotliwość")

Interpretacja wykresu: Możemy zauważyć, że istnieją różnice w częstotliwości palenia między mężczyznami a kobietami. Z wykresu wynika, że regularnie pali większy odestek męzczyzn, natomiast większy odsetek kobiet nie pali wogóle.

WYKRES NR 2

Wykres punktowy przedstawiający jak częstotliwość palenia wpływa na tętno spoczynkowe.

ggplot(survey, aes(x = Smoke, y = Pulse, color = Smoke)) +
  geom_point(position = position_jitter(width = 0.3), alpha = 0.7) +
  labs(title = "Palenie vs. tętno spoczynkowe",
       x = "Częstotliwość palenia",
       y = "Tętno w spoczynku na minutę",
       color = "Palenie") +
  theme_minimal()
## Warning: Removed 45 rows containing missing values (`geom_point()`).

Wykres przedstawia, jak rozkładają się wartości tętna wśród osób palących i niepalących. Możemy zauważyć, różnice w tętnie między grupami. Da się zauważyc punkty, które stanowczo odbiegają od reszty. Tętno osób palących regularnie znacznie różni się od tętna osób które nigdy nie paliy.

WYKRES NR 3

Wykres punktowy z zależnością między wiekiem a tętnem spoczynkowym

ggplot(survey, aes(x = Age, y = Pulse)) +
  geom_point() +
  labs(title = "Zależność między wiekiem a tętnem spoczynkowym na minutę",
       x = "Wiek",
       y = "Tętno spoczynkowe na minutę") +
  theme_minimal()
## Warning: Removed 45 rows containing missing values (`geom_point()`).

Współczynnik korelacji

zmienna niezależna (x) - wiek zmienna zależna (y) - wartość tętna spoczynkowego

wspolczynnik_korelacji <- round(cor(survey$Age, survey$Pulse), 4)

Wyświetlanie wyniku z interpretacją

interpretacja <- paste("Wartość korelacji bliska zeru", wspolczynnik_korelacji, " sugeruje, że nie istnieje silna ani jednoznaczna zależność między wiekiem respondentów a ich tętnem.")
print(interpretacja)
## [1] "Wartość korelacji bliska zeru NA  sugeruje, że nie istnieje silna ani jednoznaczna zależność między wiekiem respondentów a ich tętnem."

Dodanie lini regresji

lr=lm(survey$Pulse~survey$Age)
plot(survey$Age, survey$Pulse, xlab = "Wiek", ylab = "Tętno spoczynkowe",
     main = "Zależność między tętnem spoczynkowym na minutę a wiekiem respondentów",
     xlim = c(0, 80))
abline(lr, col='red', lwd=4)

Wykres nr 4

Teraz stworzymy wykres, który pokaże nam rozkład wieku członków ankiety.

Podział wieku na przedziały

survey$Age_Group <- cut(survey$Age, breaks = c(0, 15, 20, 25, 30, 45, 60, 100), labels = c("0-15", "15-20", "20-25", "25-30", "30-45", "45-60", "60-100"))

Tworzenie wykresu słupkowego z przedziałami wieku

ggplot(survey, aes(x = Age_Group, fill=Age_Group)) +
  geom_bar(col="blue") +
  labs(title = "Rozkład wieku członków ankiety",
       x = "Przedziały wiekowe",
       y = "Liczba respondentów") +
  theme_minimal()

Z wykresu możemy odczytać, że większość respondentów ma między 15 a 20 lat.

Obliczanie średniej wieku

srednia_wiek= mean(survey$Age, na.rm = TRUE)

Wyświetlanie wyniku

print(paste("Średni wiek respondentów:", round(srednia_wiek, 1), "lat"))
## [1] "Średni wiek respondentów: 20.4 lat"

Wariancja i odchylenie standardowe

wariancja=var(survey$Age)
odchylenie_standardowe=sqrt(wariancja)
wariancja_zaokraglona <- round(wariancja, 1)
odchylenie_standardowe_zaokraglone <- round(odchylenie_standardowe, 1)

Wyświetlanie wyniku

print(paste("Wariancja wieku:", wariancja_zaokraglona))
## [1] "Wariancja wieku: 41.9"
print(paste("Odchylenie standardowe wieku:", odchylenie_standardowe_zaokraglone))
## [1] "Odchylenie standardowe wieku: 6.5"
print("Wniosek: wiek respondentów odchyla się przeciętnie o 6,5 lat od średniej.")
## [1] "Wniosek: wiek respondentów odchyla się przeciętnie o 6,5 lat od średniej."

Podsumowanie

W raporcie analizy danych ankietowych z pakietu “MASS” w R, uzyskaliśmy cenny wgląd w charakterystykę uczestników. Mimo że analiza dostarcza interesujących informacji, warto pamiętać, że dane te stanowią tylko fragment szerszego kontekstu społecznego.

Jedną z ciekawostek wynikających z analizy jest niewielka korelacja między wiekiem a tętnem respondentów (-0.0463). Wynik ten sugeruje, że wiek i tętno nie wykazują silnej zależności, co może być interesującym spostrzeżeniem.

Dziękuję za uwagę.