knitr::opts_chunk$set(echo = TRUE)
#Analisis Korelasi
# Membuat Fungsi Analisis Korelasi (rxy) secara manual
# Memanggil data
library(readxl)
Data_Project_Komstat_kelompok_8 <- read_excel("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. Membuat data frame semua nilai
dataframeperhitungan <- data.frame(Variabel_x, Variabel_y, total_data,jumlahvariabelx, jumlahvariabely,hasilxiyi,
Variabel_xkuadrat, Variabel_ykuadrat,jumlah_Variabel_xikuadrat, jumlah_Variabel_yikuadrat,sumx_kuadrat,sumy_kuadrat)
dataframeperhitungan
## Variabel_x Variabel_y total_data jumlahvariabelx jumlahvariabely hasilxiyi
## 1 70.06 63.69 33 2294.61 2369.17 164925.7
## 2 63.05 68.05 33 2294.61 2369.17 164925.7
## 3 65.28 70.92 33 2294.61 2369.17 164925.7
## 4 67.58 70.31 33 2294.61 2369.17 164925.7
## 5 69.16 74.14 33 2294.61 2369.17 164925.7
## 6 70.76 75.96 33 2294.61 2369.17 164925.7
## 7 70.37 72.92 33 2294.61 2369.17 164925.7
## 8 68.73 71.13 33 2294.61 2369.17 164925.7
## 9 71.78 73.77 33 2294.61 2369.17 164925.7
## 10 69.64 72.56 33 2294.61 2369.17 164925.7
## 11 72.03 75.36 33 2294.61 2369.17 164925.7
## 12 72.07 76.19 33 2294.61 2369.17 164925.7
## 13 69.39 71.86 33 2294.61 2369.17 164925.7
## 14 69.21 63.17 33 2294.61 2369.17 164925.7
## 15 70.02 70.32 33 2294.61 2369.17 164925.7
## 16 66.44 68.85 33 2294.61 2369.17 164925.7
## 17 71.82 71.67 33 2294.61 2369.17 164925.7
## 18 69.21 71.21 33 2294.61 2369.17 164925.7
## 19 67.55 69.51 33 2294.61 2369.17 164925.7
## 20 67.53 70.93 33 2294.61 2369.17 164925.7
## 21 67.43 69.58 33 2294.61 2369.17 164925.7
## 22 69.16 72.16 33 2294.61 2369.17 164925.7
## 23 69.91 72.77 33 2294.61 2369.17 164925.7
## 24 69.90 63.75 33 2294.61 2369.17 164925.7
## 25 69.43 62.93 33 2294.61 2369.17 164925.7
## 26 69.77 74.74 33 2294.61 2369.17 164925.7
## 27 63.87 69.86 33 2294.61 2369.17 164925.7
## 28 74.25 79.70 33 2294.61 2369.17 164925.7
## 29 71.29 76.17 33 2294.61 2369.17 164925.7
## 30 73.58 81.76 33 2294.61 2369.17 164925.7
## 31 72.79 76.95 33 2294.61 2369.17 164925.7
## 32 69.84 76.05 33 2294.61 2369.17 164925.7
## 33 71.71 70.23 33 2294.61 2369.17 164925.7
## Variabel_xkuadrat Variabel_ykuadrat jumlah_Variabel_xikuadrat
## 1 4908.404 4056.416 159754.8
## 2 3975.302 4630.802 159754.8
## 3 4261.478 5029.646 159754.8
## 4 4567.056 4943.496 159754.8
## 5 4783.106 5496.740 159754.8
## 6 5006.978 5769.922 159754.8
## 7 4951.937 5317.326 159754.8
## 8 4723.813 5059.477 159754.8
## 9 5152.368 5442.013 159754.8
## 10 4849.730 5264.954 159754.8
## 11 5188.321 5679.130 159754.8
## 12 5194.085 5804.916 159754.8
## 13 4814.972 5163.860 159754.8
## 14 4790.024 3990.449 159754.8
## 15 4902.800 4944.902 159754.8
## 16 4414.274 4740.322 159754.8
## 17 5158.112 5136.589 159754.8
## 18 4790.024 5070.864 159754.8
## 19 4563.002 4831.640 159754.8
## 20 4560.301 5031.065 159754.8
## 21 4546.805 4841.376 159754.8
## 22 4783.106 5207.066 159754.8
## 23 4887.408 5295.473 159754.8
## 24 4886.010 4064.062 159754.8
## 25 4820.525 3960.185 159754.8
## 26 4867.853 5586.068 159754.8
## 27 4079.377 4880.420 159754.8
## 28 5513.062 6352.090 159754.8
## 29 5082.264 5801.869 159754.8
## 30 5414.016 6684.698 159754.8
## 31 5298.384 5921.303 159754.8
## 32 4877.626 5783.602 159754.8
## 33 5142.324 4932.253 159754.8
## jumlah_Variabel_yikuadrat sumx_kuadrat sumy_kuadrat
## 1 170715 5265235 5612966
## 2 170715 5265235 5612966
## 3 170715 5265235 5612966
## 4 170715 5265235 5612966
## 5 170715 5265235 5612966
## 6 170715 5265235 5612966
## 7 170715 5265235 5612966
## 8 170715 5265235 5612966
## 9 170715 5265235 5612966
## 10 170715 5265235 5612966
## 11 170715 5265235 5612966
## 12 170715 5265235 5612966
## 13 170715 5265235 5612966
## 14 170715 5265235 5612966
## 15 170715 5265235 5612966
## 16 170715 5265235 5612966
## 17 170715 5265235 5612966
## 18 170715 5265235 5612966
## 19 170715 5265235 5612966
## 20 170715 5265235 5612966
## 21 170715 5265235 5612966
## 22 170715 5265235 5612966
## 23 170715 5265235 5612966
## 24 170715 5265235 5612966
## 25 170715 5265235 5612966
## 26 170715 5265235 5612966
## 27 170715 5265235 5612966
## 28 170715 5265235 5612966
## 29 170715 5265235 5612966
## 30 170715 5265235 5612966
## 31 170715 5265235 5612966
## 32 170715 5265235 5612966
## 33 170715 5265235 5612966
# 8. 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
# 9.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)
## Warning: package 'dplyr' was built under R version 4.3.3
##
## 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)
## Warning: package 'ggplot2' was built under R version 4.3.3
# 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'