knitr::opts_chunk$set(echo = TRUE)
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.