knitr::opts_chunk$set(echo = TRUE)

Analisis Korelasi

Analisis korelasi adalah metode statistik yang digunakan untuk mengukur dan memahami hubungan antara dua atau lebih variabel. Dengan pendekatan ini, peneliti dapat mengidentifikasi kekuatan dan arah hubungan antar variabel, memberikan wawasan mengenai apakah dan sejauh mana perubahan pada satu variabel terkait dengan perubahan pada variabel lainnya. Metode ini juga membantu menentukan apakah ada hubungan linier antara variabel-variabel yang dikaji, serta seberapa kuat hubungan tersebut. Namun, korelasi tidak menunjukkan hubungan sebab-akibat. Meski demikian, analisis korelasi tetap memberikan informasi penting mengenai pola interaksi antar variabel, yang sering kali menjadi dasar untuk penelitian lebih lanjut. Dalam penelitian ini, akan menganalisis hubungan antara IPM dan Angka Harapan Hidup di Provinsi Sumatra Utara pada tahun 2023. Penelitian ini bertujuan untuk mengevaluasi seberapa besar kualitas pembangunan manusia berpengaruh terhadap peningkatan taraf kesehatan masyarakat di wilayah tersebut.

# Membuat Fungsi Analisis Korelasi (rxy) secara manual
# Memanggil data
library(readxl)
Data_Project_Komstat_kelompok_8 <- read_excel("D:/MATKUL SMT 3/MATKUL KOMSTAT/Data Project Komstat kelompok 8.xlsx")
View(Data_Project_Komstat_kelompok_8)
Variabel_x <- Data_Project_Komstat_kelompok_8$`Angka Harapan Hidup`
Variabel_y <- Data_Project_Komstat_kelompok_8$`Indeks Pembangunan Manusia`
variabel <- data.frame(Variabel_x,Variabel_y)
variabel
##    Variabel_x Variabel_y
## 1       70.06      63.69
## 2       63.05      68.05
## 3       65.28      70.92
## 4       67.58      70.31
## 5       69.16      74.14
## 6       70.76      75.96
## 7       70.37      72.92
## 8       68.73      71.13
## 9       71.78      73.77
## 10      69.64      72.56
## 11      72.03      75.36
## 12      72.07      76.19
## 13      69.39      71.86
## 14      69.21      63.17
## 15      70.02      70.32
## 16      66.44      68.85
## 17      71.82      71.67
## 18      69.21      71.21
## 19      67.55      69.51
## 20      67.53      70.93
## 21      67.43      69.58
## 22      69.16      72.16
## 23      69.91      72.77
## 24      69.90      63.75
## 25      69.43      62.93
## 26      69.77      74.74
## 27      63.87      69.86
## 28      74.25      79.70
## 29      71.29      76.17
## 30      73.58      81.76
## 31      72.79      76.95
## 32      69.84      76.05
## 33      71.71      70.23
# Berikut adalah langkah-langkah membuat fugsi dalam menghitung nilai korelasi

# 1. Inisialisasi jumlah data (n)
banyaknya_data <- function(Variabel_x, Variabel_y){
  n <- length(Variabel_x)  # Menghitung jumlah elemen
  
  # Validasi input
  if (n != length(Variabel_y) || n <= 1) {
    return(NA)  # Kembali NA (not available) jika panjang x dan y tidak sama atau kurang dari 2
  }
  return(n)} # mengembalikan hasil nilai n
  
# Memanggil fungsi dan menyimpan hasil
  total_data <- banyaknya_data(Variabel_x, Variabel_y)
  total_data
## [1] 33
# 2. Membuat fungsi menghitung jumlah nilai setiap variabel
penjumlahan_data <-function(data){# data adalah vektor berisi angka yang akan dihitung jumlahnya
  jumlah <- 0 # Inisialisasi variabel untuk menyimpan jumlah
  n <- length(data) # inisialisasi untuk panjang atau banyaknya data
  for(i in 1:n){ # pengulangan penjumlahan untuk setiap data ke i yang dimulai dari 1 sampai dengan n
    jumlah <- jumlah + data[i]} #inisialisasi variabel jumlah yaitu jumlah ditambah dengan data ke i
  return (jumlah) # mengembalikan jumlah data setiap data ke i
}
jumlahvariabelx <- penjumlahan_data(Variabel_x)
jumlahvariabelx
## [1] 2294.61
jumlahvariabely <- penjumlahan_data(Variabel_y)
jumlahvariabely
## [1] 2369.17
# 3. Membuat fungsi menjumlahkan x ke-i kali y ke-i
jumlahkan_xi_kali_yi <- function(x, y) {
  # Validasi input
  if (length(x) != length(y)) {
    stop("Panjang vektor x dan y harus sama.")  # jika banyak data pada variabel x dan y tidak sama maka eksekusi dihentikan
  }
  
  # Inisialisasi total untuk menyimpan hasil penjumlahan
  total <- 0 # total diinisialisasi dengan nilai 0, sehingga saat penjumlahan dimulai hasilnya akan bertambah dari 0
  
  # Loop untuk menjumlahkan x-ke-i kali y-ke-i
  for (i in 1:length(x)) {#loop for yang digunakan untuk mengulang setiap elemen dari vektor
    total <- total + (x[i] * y[i])  # Mengalikan elemen x-ke-i dengan y-ke-i dan menambahkannya ke total
  }
  
  # Mengembalikan hasil total
  return(total)
}

hasilxiyi <- jumlahkan_xi_kali_yi(Variabel_x, Variabel_y)
hasilxiyi
## [1] 164925.7
# 4. Membuat fungsi menghitung kuadrat
# Fungsi menghitung setiap nilai pada variabel dikuadratkan lalu dijumlahkan
kuadrat <- function(data){ #data adalah vektor berisi angka yang akan dihitung nilai kuadratnya
  n <- length(data) #inisialisasi untuk panjang atau banyaknya data
  hasil_kuadrat <- numeric(n) #inisialisasi vektor berukuran n untuk menampung hasil perhitungan kuadrat
  for (i in 1:n){ #pengulangan penjumlahan kuadrat untuk setiap data ke i sampai dengan n
    hasil_kuadrat[i] <- data[i]*data[i] #hasil kuadrat data ke i adalah perkalian data ke i dengan data ke i
  }
  return(hasil_kuadrat) #mengembalikan jumlah kuadrat data setiap data ke i
}

Variabel_xkuadrat <- kuadrat(Variabel_x)
Variabel_xkuadrat 
##  [1] 4908.404 3975.302 4261.478 4567.056 4783.106 5006.978 4951.937 4723.813
##  [9] 5152.368 4849.730 5188.321 5194.085 4814.972 4790.024 4902.800 4414.274
## [17] 5158.112 4790.024 4563.002 4560.301 4546.805 4783.106 4887.408 4886.010
## [25] 4820.525 4867.853 4079.377 5513.062 5082.264 5414.016 5298.384 4877.626
## [33] 5142.324
Variabel_ykuadrat <- kuadrat(Variabel_y)
Variabel_ykuadrat
##  [1] 4056.416 4630.802 5029.646 4943.496 5496.740 5769.922 5317.326 5059.477
##  [9] 5442.013 5264.954 5679.130 5804.916 5163.860 3990.449 4944.902 4740.322
## [17] 5136.589 5070.864 4831.640 5031.065 4841.376 5207.066 5295.473 4064.062
## [25] 3960.185 5586.068 4880.420 6352.090 5801.869 6684.698 5921.303 5783.602
## [33] 4932.253
dataframeVariabel_xkuadrat <- data.frame(Variabel_xkuadrat,Variabel_ykuadrat)
dataframeVariabel_xkuadrat
##    Variabel_xkuadrat Variabel_ykuadrat
## 1           4908.404          4056.416
## 2           3975.302          4630.802
## 3           4261.478          5029.646
## 4           4567.056          4943.496
## 5           4783.106          5496.740
## 6           5006.978          5769.922
## 7           4951.937          5317.326
## 8           4723.813          5059.477
## 9           5152.368          5442.013
## 10          4849.730          5264.954
## 11          5188.321          5679.130
## 12          5194.085          5804.916
## 13          4814.972          5163.860
## 14          4790.024          3990.449
## 15          4902.800          4944.902
## 16          4414.274          4740.322
## 17          5158.112          5136.589
## 18          4790.024          5070.864
## 19          4563.002          4831.640
## 20          4560.301          5031.065
## 21          4546.805          4841.376
## 22          4783.106          5207.066
## 23          4887.408          5295.473
## 24          4886.010          4064.062
## 25          4820.525          3960.185
## 26          4867.853          5586.068
## 27          4079.377          4880.420
## 28          5513.062          6352.090
## 29          5082.264          5801.869
## 30          5414.016          6684.698
## 31          5298.384          5921.303
## 32          4877.626          5783.602
## 33          5142.324          4932.253
# 5. Menghitung jumlah nilai variabel yang telah dikuadratkan
jumlah_Variabel_xikuadrat <- penjumlahan_data(Variabel_xkuadrat)
jumlah_Variabel_xikuadrat
## [1] 159754.8
jumlah_Variabel_yikuadrat <- penjumlahan_data(Variabel_ykuadrat)
jumlah_Variabel_yikuadrat
## [1] 170715
# 6. Membuat fungsi menjumlahkan total nilai variabel lalu dikuadratkan
sumx_kuadrat <- kuadrat(jumlahvariabelx)
sumx_kuadrat
## [1] 5265235
sumy_kuadrat <- kuadrat(jumlahvariabely)
sumy_kuadrat
## [1] 5612966
# 7. Menghitung nilai korelasi menggunakan fungsi yang telah dibuat
rumuskorelasi <- (total_data *hasilxiyi - jumlahvariabelx *jumlahvariabely)/sqrt((total_data * jumlah_Variabel_xikuadrat - sumx_kuadrat)*(total_data *jumlah_Variabel_yikuadrat - sumy_kuadrat))
rumuskorelasi                         
## [1] 0.5308026
# 8.Menghitung kekuatan hubungan koefisien korelasi
kekuatan_korelasi <- function(rumuskorelasi){
  if (rumuskorelasi >= 0.9 && rumuskorelasi <= 1) {
    return("Hubungan sangat kuat positif")
  } else if (rumuskorelasi > 0.7 && rumuskorelasi < 0.9) {
    return("Hubungan kuat positif")
  } else if (rumuskorelasi > 0.5 && rumuskorelasi <= 0.7) {
    return("Hubungan sedang positif")
  } else if (rumuskorelasi > 0.3 && rumuskorelasi <= 0.5) {
    return("Hubungan lemah positif")
  } else if (rumuskorelasi > 0 && rumuskorelasi <= 0.3) {
    return("Tidak ada hubungan positif")
  } else if (rumuskorelasi < 0 && rumuskorelasi >= -0.3) {
    return("Tidak ada hubungan negatif")
  } else if (rumuskorelasi <= -0.3 && rumuskorelasi > -0.5) {
    return("Hubungan lemah negatif")
  } else if (rumuskorelasi <= -0.5 && rumuskorelasi > -0.7) {
    return("Hubungan sedang negatif")
  } else if (rumuskorelasi <= -0.7 && rumuskorelasi > -0.9) {
    return("Hubungan kuat negatif")
  } else if (rumuskorelasi <= -0.9 && rumuskorelasi >= -1) {
    return("Hubungan sangat kuat negatif")
  } else {
    return("Nilai tidak valid")
  }
}
hasil_hubungan_korelasi <- kekuatan_korelasi(rumuskorelasi)
hasil_hubungan_korelasi
## [1] "Hubungan sedang positif"
# Membuat fungsi korelasi menggunakan pipe
# Load library dplyr untuk pipe
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
  # Fungsi korelasi Pearson menggunakan pipe
  rumuskorelasi_dengan_pipe <- function(Variabel_x, Variabel_y) {

  # Buat tibble dan hitung langkah-langkah dengan pipe
  korelasi <- tibble(Variabel_x, Variabel_y) %>%

  # Hitung jumlah data
  summarise( n = n(),
               total_data = banyaknya_data(Variabel_x, Variabel_y),
               jumlahvariabelx = penjumlahan_data(Variabel_x),
               jumlahvariabely = penjumlahan_data(Variabel_y),
               hasilxiyi = jumlahkan_xi_kali_yi(Variabel_x, Variabel_y),
               jumlah_Variabel_xikuadrat = penjumlahan_data(Variabel_xkuadrat),
               jumlah_Variabel_yikuadrat = penjumlahan_data(Variabel_ykuadrat),
               sumx_kuadrat = kuadrat(jumlahvariabelx),
               sumy_kuadrat <- kuadrat(jumlahvariabely)) %>%
    
    # Hitung korelasi menggunakan rumus Pearson
    mutate(korelasi = ((total_data * hasilxiyi) - (jumlahvariabelx * jumlahvariabely)) /
             sqrt((total_data * jumlah_Variabel_xikuadrat - sumx_kuadrat) *
                    (total_data * jumlah_Variabel_yikuadrat - sumy_kuadrat))) %>%
    
    # Ambil hasil korelasi
    pull(korelasi)
  
  return(korelasi)
}

# Menghitung nilai korelasi menggunakan fungsi pipe
korelasi_dengan_pipe <- rumuskorelasi_dengan_pipe(Variabel_x, Variabel_y)
korelasi_dengan_pipe
## [1] 0.5308026
# Analisis korelasi
# 1. Menguji hipotesis 
# H0: r = 0 (tidak ada korelasi antara variabel x dan y)
# H1: r ≠ 0 (ada korelasi antara variabel x dan y)

# 2. Statistik uji t (t = (r * sqrt(n - 2)) / sqrt(1 - r^2))
# Statistik uji t digunakan untuk mengetahui apakah korelasi tersebut signifikan atau tidak
t_statistik <- (rumuskorelasi* sqrt(total_data-2))/sqrt(1-kuadrat(rumuskorelasi))
t_statistik
## [1] 3.487197
# 3. Menentukan derajat bebas (degree of freedom)
df <- total_data-2
df
## [1] 31
# 4. Menghitung t-kritis
alpha <- 0.05
t_kritis <- qt(1-alpha/2, df) #menghitung nilai kritis untuk uji dua arah
t_kritis
## [1] 2.039513
# 5. Keputusan kriteria penolakan
# Tolak H0 jika t_statistik > t_kritis

if (abs(t_statistik) > t_kritis) { #nilai absolut dari statistik t. Karena uji dua arah, kita hanya memperhatikan pada magnitudo (besar) dari nilai𝑡tanpa memperhatikan arah (positif atau negatif).
  keputusan <- "Tolak H0, artinya ada korelasi yang signifikan antara variabel x dan y"
} else {
  keputusan <- "Terima H0, artinya tidak ada korelasi yang signifikan antara variabel x dan y"
}
keputusan
## [1] "Tolak H0, artinya ada korelasi yang signifikan antara variabel x dan y"
# Memuat ggplot2
library(ggplot2)

# Membuat scatter plot antara Indeks Pembangunan Manusia dan Angka Harapan Hidup
# Fungsi aes digunakan untuk membuat  hubungan antara variabel dalam data frame dan visualisasi
ggplot(Data_Project_Komstat_kelompok_8 , aes(x = `Angka Harapan Hidup`, y = `Indeks Pembangunan Manusia`)) +
  geom_point(color = "blue", size = 3, alpha = 0.6) +   
  #geom_point(...): Fungsi ini digunakan untuk menambahkan titik-titik ke dalam scatter plot.
  geom_smooth(method = "lm", se = TRUE, color = "red") + #geom_smooth(...): Menambahkan garis regresi linier ke dalam plot
                                                         #se = TRUE akan menunjukkan bahwa area sekitar garis regresi (confidence interval) juga akan ditampilkan
  labs(title = "Scatter Plot: Indeks Pembangunan Manusia vs Angka Harapan Hidup",
       # fungsi labs digunakan untuk memberi label pada plot
       x = "Angka Harapan Hidup",
       y = "Indeks Pembangunan Manusia") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.