Install library

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(readxl)
library(ggthemes)
library(gridExtra)

Input Data

dir.exists("C:/Users/berli/Documents/tugas probstat")
## [1] TRUE
data <- read_excel("~/tugas probstat/Sleep_health_and_lifestyle_dataset (1).xlsx")
head(data)
## # A tibble: 6 × 13
##   `Person ID` Gender   Age Occupation        `Sleep Duration` `Quality of Sleep`
##         <dbl> <chr>  <dbl> <chr>             <chr>                         <dbl>
## 1           1 Male      27 Software Engineer 6.1                               6
## 2           2 Male      28 Doctor            6.2                               6
## 3           3 Male      28 Doctor            6.2                               6
## 4           4 Male      28 Sales Representa… 5.9                               4
## 5           5 Male      28 Sales Representa… 5.9                               4
## 6           6 Male      28 Software Engineer 5.9                               4
## # ℹ 7 more variables: `Physical Activity Level` <dbl>, `Stress Level` <dbl>,
## #   `BMI Category` <chr>, `Blood Pressure` <chr>, `Heart Rate` <dbl>,
## #   `Daily Steps` <dbl>, `Sleep Disorder` <chr>

1. Bar Chart (Occupation)

Dari data tersebut akan disajikan visualisasi data dalam bentuk Bar Chart. Berikut terlampir hasil visualisasi data Distribusi Responden Berdasarkan Pekerjaan:

bar_chart_occupation <- ggplot(data, aes(x = Occupation, fill = Occupation)) +
  geom_bar() +
  theme_minimal() +
  labs(title = "Distribusi Responden Berdasarkan Pekerjaan",
       x = "Jenis Pekerjaan",
       y = "Frekuensi") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

bar_chart_occupation

Bar Chart ini memberikan gambaran visual tentang distribusi responden berdasarkan pekerjaan mereka. Informasi ini dapat digunakan untuk menganalisis bagaimana suatu faktor (misalnya, kebiasaan tidur atau kesehatan) mungkin dipengaruhi oleh profesi seseorang. Dari chart ini, dapat disimpulkan bahwa profesi seperti Nurse, Doctor, dan Engineer lebih banyak diwakili dibandingkan dengan profesi lain seperti Software Engineer, Scientist, dan Manager.

2 Bar Chart (Sleep Disorder)

Dari data tersebut akan disajikan visualisasi data dalam bentuk Bar Chart. Berikut terlampir hasil visualisasi data Frekuensi Gangguan Tidur:

bar_chart <- ggplot(data, aes(x = `Sleep Disorder`, fill = `Sleep Disorder`)) +
  geom_bar() +
  theme_minimal() +
  labs(title = "Frekuensi Gangguan Tidur", 
       x = "Sleep Disorder", 
       y = "Frekuensi")

bar_chart

Bar Chart Diatas menunjukkan bahwa sebagian besar responden memiliki pola tidur yang normal, tetapi ada sebagian yang mengalami masalah tidur, terutama insomnia. Hal ini bisa menjadi dasar untuk penelitian lebih lanjut mengenai faktor-faktor yang mempengaruhi gangguan tidur.

3. Pie Chart

Dari data tersebut akan disajikan visualisasi data dalam bentuk Pie Chart. Berikut terlampir hasil visualisasi data Kategori Berat Badan:

pie_chart <- ggplot(data, aes(x = "", fill = `BMI Category`)) +
  geom_bar(width = 1) +
  coord_polar("y", start = 0) +
  theme_minimal() +
  labs(title = "Distribusi BMI Category") +
  theme(axis.title.x = element_blank())

pie_chart

Sebagian besar responden memiliki berat badan normal, yang merupakan indikasi bahwa mayoritas memiliki BMI yang sehat. Sebagian responden mengalami kelebihan berat badan dan obesitas, yang bisa menjadi perhatian dalam kaitannya dengan kesehatan dan risiko penyakit. Hanya sedikit responden yang tergolong underweight, menunjukkan bahwa kekurangan berat badan bukan masalah utama dalam dataset ini.

4. Dot Plot

Dari data tersebut akan disajikan visualisasi data dalam bentuk Dot Plot. Berikut terlampir hasil visualisasi data Hubungan Durasi Tidur dan Tingkat Stres:

data$`Sleep Duration` <- as.numeric(gsub("[^0-9\\.]", "", data$`Sleep Duration`))

dot_plot <- ggplot(data, aes(x = `Sleep Duration`, y = `Stress Level`)) +
  geom_point(color = "blue", size = 2) +
  theme_minimal() +
  labs(title = "Dot Plot: Hubungan Durasi Tidur dan Tingkat Stres",
       x = "Durasi Tidur (jam)",
       y = "Tingkat Stres")

dot_plot

Variasi dalam tingkat stres ditemukan pada berbagai durasi tidur, tetapi ada indikasi bahwa stres lebih tinggi pada individu dengan durasi tidur lebih pendek. Beberapa individu dengan durasi tidur lebih panjang (sekitar 7–8 jam) memiliki tingkat stres yang lebih rendah, meskipun masih ada beberapa pengecualian. Tidak ada hubungan yang sangat jelas dan linear antara durasi tidur dan tingkat stres, tetapi ada kecenderungan bahwa kurang tidur dapat berhubungan dengan stres yang lebih tinggi.

5. Histogram

Dari data tersebut akan disajikan visualisasi data dalam bentuk Histogram. Berikut terlampir hasil visualisasi data Distribusi Jumlah Langkah Harian:

histogram <- ggplot(data, aes(x = `Daily Steps`)) +
  geom_histogram(binwidth = 1000, fill = "blue", color = "black", alpha = 0.7) +
  theme_minimal() +
  labs(title = "Histogram: Distribusi Jumlah Langkah Harian",
       x = "Jumlah Langkah Harian",
       y = "Frekuensi")

histogram

  1. Sebagian besar responden memiliki tingkat aktivitas sedang hingga tinggi, dengan jumlah langkah harian yang cukup banyak.
  2. Hanya sedikit individu yang memiliki langkah harian sangat rendah, menunjukkan bahwa kebanyakan responden aktif secara fisik.
  3. Kelompok dengan langkah harian di atas 9000 cukup dominan, yang bisa berarti ada pola gaya hidup aktif dalam dataset ini.

6. Box Plot

Dari data tersebut akan disajikan visualisasi data dalam bentuk Boxplot. Berikut terlampir hasil visualisasi data distribusi Tingkat Aktivitas Fisik:

boxplot_data <- ggplot(data, aes(y = `Physical Activity Level`, fill = "Activity Level")) +
  geom_boxplot(alpha = 0.6) +
  theme_minimal() +
  labs(title = "Boxplot: Distribusi Tingkat Aktivitas Fisik",
       y = "Tingkat Aktivitas Fisik",
       fill = "Keterangan")

boxplot_data

Distribusi aktivitas fisik cukup merata tanpa banyak nilai ekstrem. Mayoritas responden memiliki tingkat aktivitas fisik dalam rentang yang wajar, dengan sedikit variasi antarindividu.Tidak adanya outlier mencerminkan bahwa tidak ada responden dengan aktivitas fisik yang sangat rendah atau sangat tinggi dibandingkan yang lain.

7. Density Plot

Dari data tersebut akan disajikan visualisasi data dalam bentuk Density Plot. Berikut terlampir hasil visualisasi data distribusi Distribusi Kualitas TIdur:

density_plot <- ggplot(data, aes(x = `Quality of Sleep`, fill = "Quality")) +
  geom_density(alpha = 0.5, color = "black") +
  theme_minimal() +
  labs(title = "Density Plot: Distribusi Kualitas Tidur",
       x = "Kualitas Tidur",
       y = "Density",
       fill = "Keterangan")

density_plot

Mayoritas responden memiliki kualitas tidur yang bervariasi, dengan sebagian besar berada di sekitar skor 6 dan 8. Distribusi yang tidak berbentuk normal (multimodal) menunjukkan adanya beberapa kelompok dalam data, yang mungkin disebabkan oleh faktor eksternal seperti kebiasaan tidur, tingkat stres, atau pola aktivitas harian, Kualitas tidur tidak merata di satu nilai saja, melainkan tersebar dalam beberapa kelompok berbeda.

Ukuran Pemusatan

1. Menghitung Rata-rata (mean)

Berikut terlampir rata-rata durasi tidur responden:

mean(data$`Sleep Duration`)
## [1] 7.132086

Rata-rata durasi tidur responden adalah sekitar 7.13 jam, yang menunjukkan bahwa sebagian besar responden memiliki durasi tidur yang sudah sesuai rekomendasi kesehatan.

2. Menghitung Median

Berikut terlampir median durasi tidur responden:

median(data$`Sleep Duration`)
## [1] 7.2

Median berada pada 7.2 jam, yang menunjukkan bahwa setengah dari responden tidur kurang dari atau sama dengan 7.2 jam, sementara setengah lainnya tidur lebih dari 7.2 jam.

3. Menghitung Modus

Berikut terlampir modus durasi tidur responden:

modus <- function(x) {
  uniqx <- unique(x)
  uniqx[which.max(tabulate(match(x, uniqx)))]
}

modus(data$`Sleep Duration`)
## [1] 7.2

Nilai modus adalah 7.2 jam, yang berarti banyak responden tidur selama 7.2 jam.

Ukuran Penyebaran Data

1. Menghitung Q1 dan Q3

Q1 <- quantile(data$`Sleep Duration`, 0.25)
Q3 <- quantile(data$`Sleep Duration`, 0.75)

Q1
## 25% 
## 6.4
Q3
## 75% 
## 7.8

Kuartil 1 (Q1) = 6.4, ini menunjukkan 25% dari responden memiliki durasi tidur kurang dari atau sama dengan 6.4 jam. Kuartil 3 (Q3) = 7.8, ini menunjukkan 75% dari responden memiliki durasi tidur kurang dari atau sama dengan 7.8 jam.

2. Menghitung range

range_values <- range(data$`Sleep Duration`)
range_values
## [1] 5.8 8.5
range <- max(data$`Sleep Duration`) - min(data$`Sleep Duration`)

range
## [1] 2.7

Range = 2.7 (dari 5.8 hingga 8.5 jam), ini menunjukkan selisih antara durasi tidur minimum dan maksimum dalam dataset.

3. Menghitung Keragaman Data

Berikut terlampir keberagaman data durasi tidur responden:

var(data$`Sleep Duration`)
## [1] 0.6330696

Varians 0.633 menunjukkan bahwa ada sedikit perbedaan dalam durasi tidur responden. Nilai ini menandakan bahwa sebagian besar responden memiliki pola tidur yang hampir seragam.

4. Menghitung Standar Deviasi dari Data

Berikut terlampir standar deviasi dari data durasi tidur responden:

sd(data$`Sleep Duration`)
## [1] 0.7956567

Standar deviasi 0.796 jam (sekitar 48 menit) menunjukkan bahwa tidak banyak individu yang memiliki durasi tidur jauh di luar rata-rata, sehingga mayoritas responden memiliki durasi tidur yang mirip.

Dataset source: https://www.kaggle.com/datasets/uom190346a/sleep-health-and-lifestyle-dataset?resource=download