Praktikan mampu memahami prinsip-prinsip dasar analisis statistik asosiasi
Praktikan mampu melakukan uji asosiasi untuk data nominal, data ordinal, data interval rasio pada pemrograman R di RStudio.
Metode Analisis Asosiasi merupakan teknik statistik yang membantu untuk menilai adanya hubungan antara dua atau lebih karakteristik objek atau yang disebut sebagai variabel, dengan menjawab beberapa pertanyaan tentang:
Keberadaan hubungan, yang berkaitan dengan ada atau tidaknya hubungan antara dua variabel yang diuji.
Keeratan hubungan, yang berkaitan dengan derajat hubungan antar variabel (apakah hubungan sangat erat, cukup erat, atau lemah)
Arah hubungan, yang berkaitan dengan arah hubungan yang sama atau berbeda antara satu variabel dengan variabel lainnya yang ditunjukan dengan positif atau negatifnya nilai koefisien
Sifat hubungan, berkaitan dengan pola hubungan yang dapat ditunjukan dengan hubungan matematis antar varaibel. (Kachigan, 1986; Healey, 2010)
Selain itu menurut Kachigan (1986), hubungan yang ada antar dua variabel memiliki dua tipe dasar yaitu hubungan eksperimental dan hubungan korelasional. Hubungan bersifat eksperimen didasarkan pada percobaan serta menunjukan hubungan sebab akibat, sedangkan hubungan bersifat korelasi didasarkan pada lingkungan alamiah serta tidak menunjukan hubungan sebab akibat. Terdapat beberapa metode yang dapat digunakan dalam analisis asosiasi yang bergantung pada skala pengukuran datanya, yaitu (Healey,2012): Metode Analisis Asosiasi Variabel Nominal, Metode Asosiasi Variabel Ordinal, dan Metode Asosiasi Variabel Interval Rasio. Jenis-jenis analisis yang berada dalam lingkup analisis statistik asosiasi dapat terlihat pada tabel berikut ini:
| Penerapan | Nominal | Ordinal | Interval/Rasio |
|---|---|---|---|
| Asosiasi Bersifat Korelatif | Ukuran Korelasi Berbasis Chi-Square Koefisien Phi Koefisien V Creamer Koefisien Kontingensi C Ukuran Korelasi Berbasis Proportional Reduction Error (PRE) Koefisien Lambda |
Ukuran Korelasi Variabel Ordinal Kontinyu Koefisien Korelasi Tau Kendal Koefisien Korelasi Rho Spearmen Ukuran Korelasi Variabel Ordinal Collapsed Koefisien Gamma Koefisien d Sommer Koefisien Tau-b Kendal |
Koefisien Korelasi r Pearson (Product Moment) |
| Asosiasi Bersifat Eksperimental | Analisis Variansi (ANOVA) Analisis Regresi |
Pada praktikum ini akan dilakukan analisis statistik asosiasi dengan melakukan uji asosiasi untuk data nominal yaitu Cramer’s V, untuk data ordinal collapse dengan gamma dan Kendall’s tau-b, dan untuk interval rasio dengan R-Pearson, ANOVA, serta regresi linier 1 variabel.
Selain itu, fokus pendekatan statistik pada praktikum ini adalah statistik klasik (Frequentist). Cari tahu lebih lanjut apa itu frequentist (dan juga bayesian).
Pada bagian ini akan dibahas contoh kasus, tujuan dari pengolahan, dan tahapan analisis.
Contoh Kasus:
Pemerintah Kabupaten A merencanakan sebuah program yang akan dilaksanakan di Desa B. Sebelum menerapkan program tersebut pemerintah terlebih dahulu ingin mengetahui karakteristik dari Desa B dilihat dari hubungan antara variabel pekerjaan dan jenis kelamin, variabel pendidikan terakhir dan tingkat pendapatan, kondisi jalan dan kondisi drainase, total pendapatan dan total pengeluaran, total pendapatan dan pekerjaan serta total pengeluaran dan total pendapatan. Untuk mengetahui karakteristik dari masyarakat Desa B tersebut pemerintah melakukan survei terhadap 110 masyarakat Desa B.
Berdasarkan contoh kasus tersebut, maka penyelesaian dapat dilakukan dengan beberapa tahapan yaitu: (1) merumuskan pertanyaan penelitian; (2) memasukkan data pada Stata; (3) mengolah data menggunakan Stata; (4) menganalisis hasil pengolahan data dan melakukan interpretasi.
Dari contoh kasus tersebut maka didapat beberapa pertanyaan penelitian yaitu: * Bagaimanakah hubungan antara variabel pekerjaan dan jenis kelamin? * Bagaimanakah hubungan antara variabel pendidikan terakhir dan tingkat pendapatan? * Bagaimanakah hubungan antara variabel kondisi jalan dan kondisi drainase? * Bagaimanakah hubungan antara variabel total pendapatan dan total pengeluaran? * Bagaimanakah hubungan antara variabel total pendapatan dan pekerjaan? * Bagaimanakah hubungan antara variabel total pengeluaran dan total pendapatan?
Data kali ini menggunakan data jenis .dta (data hasil olahan STATA)
library(haven) # lakukan instalasi terlebih dahulu dengan `install.packages("haven")` bila belum terpasang
data <- read_dta("data/data05.dta")
data
## # A tibble: 110 × 8
## Jenis_Kelamin Pekerjaan Pendidikan_Terakhir tkt_pendapatn Kondisi_Jalan
## <dbl+lbl> <dbl+lbl> <dbl+lbl> <dbl+lbl> <dbl+lbl>
## 1 2 [Perempuan] 9 [Pegawai Sw… 5 [Diploma] 3 [tinggi] 2 [Sedang]
## 2 1 [Laki-laki] 5 [Karyawan/B… 4 [SLTA Sederajat] 3 [tinggi] 3 [Baik]
## 3 1 [Laki-laki] 11 [Lainnya] 4 [SLTA Sederajat] 3 [tinggi] 2 [Sedang]
## 4 2 [Perempuan] 2 [IRT] 4 [SLTA Sederajat] 3 [tinggi] 2 [Sedang]
## 5 2 [Perempuan] 4 [Wiraswasta] 2 [SD Sederajat] 1 [sangat re… 3 [Baik]
## 6 2 [Perempuan] 2 [IRT] 2 [SD Sederajat] 2 [rendah] 2 [Sedang]
## 7 2 [Perempuan] 5 [Karyawan/B… 5 [Diploma] 3 [tinggi] 1 [Buruk]
## 8 1 [Laki-laki] 10 [Tidak Beke… 5 [Diploma] 3 [tinggi] 3 [Baik]
## 9 2 [Perempuan] 2 [IRT] 6 [Sarjana] 2 [rendah] 1 [Buruk]
## 10 2 [Perempuan] 2 [IRT] 3 [SLTP Sederajat] 4 [sangat ti… 3 [Baik]
## # ℹ 100 more rows
## # ℹ 3 more variables: Kondisi_Drainase <dbl+lbl>, Total_Pendapatan <dbl>,
## # Total_Pengeluaran <dbl>
Analisis data akan dilakukan sesuai dengan jenis variabel yang ada pada pertanyaan penelitian.
Cramér’s V adalah ukuran kekuatan asosiasi antara dua variabel nominal. Nilainya berkisar antara 0 hingga 1:
0: Tidak ada hubungan.
1: Hubungan sempurna.
Cramér’s V dihitung dengan formula berikut:
\[Cramer's \ V = \sqrt{\frac{\chi^2 / n}{\text{min}((r-1), (c-1))}} \]
\(\chi^2\): Statistik uji chi-square.
\(n\): Total sampel.
\(r\): Jumlah baris dalam tabel kontingensi.
\(c\): Jumlah kolom dalam tabel kontingensi.
Interpretasi melalui degree of freedom
\[ df = \text{min}((r - 1), (c - 1)) \]
Di mana:
Contoh: Jika tabel kontingensi memiliki 4 baris dan 3 kolom: \[ df = \text{min}((4 - 1), (3 - 1)) = \text{min}(3, 2) = 2 \]
Gunakan fungsi dim() untuk melihat jumlah baris dan
kolom pada tabel kontingensi.
# install.packages("DescTools") # Untuk uji Cramér's V
library(DescTools)
# Buat tabel kontingensi
tabel <- table(data$Pekerjaan, data$Jenis_Kelamin)
tabel
##
## 1 2
## 1 1 0
## 2 0 34
## 3 2 1
## 4 9 5
## 5 8 6
## 6 6 3
## 8 5 6
## 9 5 2
## 10 6 3
## 11 7 1
# Perform Cramér's V test
hasil_cramers_v <- CramerV(tabel)
# Print the result
print(hasil_cramers_v)
## [1] 0.631386
# Degree of Freedom
dimensi <- dim(tabel)
df <- min(dimensi[1] - 1, dimensi[2] - 1)
print(paste("Degree of Freedom (df):", df))
## [1] "Degree of Freedom (df): 1"
Nilai Cramér’s V = 0.631386 untuk df = 1 menunjukkan hubungan kuat.
# Instalasi jika belum terinstal
# install.packages("vcdExtra")
# Muat paket
library(vcdExtra)
## Loading required package: vcd
## Loading required package: grid
## Loading required package: gnm
# Membuat tabel kontingensi
tabel <- table(data$Pendidikan_Terakhir, data$tkt_pendapatn)
tabel # Lihat tabel kontingensi
##
## 1 2 3 4
## 1 0 1 2 3
## 2 4 5 5 6
## 3 6 7 1 9
## 4 9 7 14 4
## 5 1 2 4 2
## 6 2 3 5 4
## 7 1 0 0 1
## 8 0 2 0 0
# Hitung Gamma
gamma_result <- GKgamma(tabel)
gamma_result
## gamma : -0.068
## std. error : 0.098
## CI : -0.26 0.125
Pada hasil tersebut terlihat bahwa nilai gamma yang didapat adalah -0.068. Karena nilai gamma ≠ 0 maka terdapat hubungan antara Pendidikan terakhir dan tingkat pendapatan serta semua kasus dari dua variabel tersebut diurutkan dalam urutan yang berkebalikan (karena nilai gamma negative).
Untuk melihat kekuatan hubungan dari uji Gamma dapat dilihat pada tabel berikut:
| Nilai Gamma | Kekuatan |
|---|---|
| 0.0-0.3 | Lemah |
| 0.31-0.6 | Moderat |
| >0.6 | Kuat |
# Uji Kendall Tau-b
kendall_result <- cor.test(data$Kondisi_Jalan, data$Kondisi_Drainase, method = "kendall")
# Tampilkan hasil
print(kendall_result)
##
## Kendall's rank correlation tau
##
## data: data$Kondisi_Jalan and data$Kondisi_Drainase
## z = 0.55372, p-value = 0.5798
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
## tau
## 0.05089782
Nilai Tau-b (0.0509):
Nilai tau sangat kecil (0.05), menunjukkan hubungan sangat lemah antara Kondisi_Jalan dan Kondisi_Drainase.
Positif: Hubungan yang sangat lemah ini bersifat positif, artinya jika salah satu variabel meningkat, variabel lain sedikit cenderung meningkat.
p-value (0.5798):
Karena p-value > 0.05, kita gagal menolak hipotesis nol (\(H_0\)).
Kesimpulan: Tidak ada cukup bukti untuk menyatakan hubungan yang signifikan antara Kondisi_Jalan dan Kondisi_Drainase.
z-value (0.55372):
Jika ingin melihat Kendall Correlation Plot
# Load required library, install.packages("ggpubr")
library(ggpubr)
## Loading required package: ggplot2
# Scatter plot with Kendall correlation coefficient
ggscatter(data, x = "Kondisi_Jalan", y = "Kondisi_Drainase",
add = "reg.line", conf.int = TRUE,
cor.coef = TRUE, cor.method = "kendall",
xlab = "Kondisi_Jalan", ylab = "Kondisi_Drainase",
title = "Kendall Correlation Plot")
# Uji Korelasi Pearson dengan p-value
pearson_test <- cor.test(data$Total_Pendapatan, data$Total_Pengeluaran, method = "pearson")
# Tampilkan hasil
print(pearson_test)
##
## Pearson's product-moment correlation
##
## data: data$Total_Pendapatan and data$Total_Pengeluaran
## t = 2.165, df = 108, p-value = 0.03259
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.01736655 0.37679756
## sample estimates:
## cor
## 0.2039448
Nilai korelasi Pearson (\(r = 0.2039\)) menunjukkan hubungan yang positif lemah antara Total_Pendapatan dan Total_Pengeluaran.
Karena $$p < 0.05$$ , hubungan ini signifikan secara statistik pada tingkat kepercayaan 95%.
Artinya, ada cukup bukti untuk menyimpulkan bahwa hubungan antara pendapatan dan pengeluaran tidak terjadi secara kebetulan.
Interval kepercayaan 95% untuk korelasi adalah [0.0174, 0.3768].
Nilai ini menunjukkan bahwa korelasi sejati antara kedua variabel kemungkinan berada dalam rentang ini.
Karena interval ini tidak mencakup nol, hubungan antara kedua variabel signifikan.
# Model ANOVA
anova_model <- aov(Total_Pendapatan ~ Pekerjaan, data = data)
# Lihat hasil ANOVA
summary(anova_model)
## Df Sum Sq Mean Sq F value Pr(>F)
## Pekerjaan 1 1.591e+13 1.591e+13 0.758 0.386
## Residuals 108 2.266e+15 2.098e+13
Nilai F = 0.758:
Nilai p = 0.386:
Karena $$p > 0.05$$, kita gagal menolak hipotesis nol ($$H_0$$).
Kesimpulan: Tidak ada bukti yang cukup untuk menyimpulkan bahwa rata-rata Total_Pendapatan berbeda secara signifikan antara kelompok Pekerjaan.
Sum Sq (Pekerjaan): Variasi dalam Total_Pendapatan yang dapat dijelaskan oleh Pekerjaan adalah \(1.591 \times 10^{13}\) dingkan dengan Sum Sq (Residuals) sebesar \(2.266 \times 10^{15}\).
Tidak ada hubungan signifikan antara Pekerjaan dan rata-rata Total_Pendapatan.
Dengan \(p = 0.386\), perbedaan rata-rata antara kelompok Pekerjaan bisa jadi hanya terjadi secara kebetulan.
# Model regresi linier
reg_model <- lm(Total_Pengeluaran ~ Total_Pendapatan, data = data)
# Lihat ringkasan hasil regresi
summary(reg_model)
##
## Call:
## lm(formula = Total_Pengeluaran ~ Total_Pendapatan, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4824708 -1329629 -716836 530043 15423572
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.080e+06 3.477e+05 5.981 2.92e-08 ***
## Total_Pendapatan 1.248e-01 5.766e-02 2.165 0.0326 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2754000 on 108 degrees of freedom
## Multiple R-squared: 0.04159, Adjusted R-squared: 0.03272
## F-statistic: 4.687 on 1 and 108 DF, p-value: 0.03259
Persamaan regresi linier dari output ini adalah: \[ \text{Total_Pengeluaran} = 2,080,000 + 0.1248 \cdot \text{Total_Pendapatan} \]
Jika ingin melakukan prediksi
Notes: Idealnya dalam melakukan prediksi harus melakukan train-test split data. Baca lebih lanjut: https://builtin.com/data-science/train-test-split
# Install paket jika belum
# install.packages("caTools")
library(caTools)
# Set seed untuk hasil yang konsisten, cari lebih lanjut terkait set.seed()
set.seed(123)
# Bagi data (80% train, 20% test)
split <- sample.split(data$Total_Pengeluaran, SplitRatio = 0.8)
train_data <- subset(data, split == TRUE)
test_data <- subset(data, split == FALSE)
# Periksa ukuran dataset
cat("Train data:", nrow(train_data), "baris\n")
## Train data: 92 baris
cat("Test data:", nrow(test_data), "baris\n")
## Test data: 18 baris
Buat model regresi pada data training
# Model regresi pada data train
reg_model <- lm(Total_Pengeluaran ~ Total_Pendapatan, data = train_data)
# Ringkasan hasil regresi
summary(reg_model)
##
## Call:
## lm(formula = Total_Pengeluaran ~ Total_Pendapatan, data = train_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4765152 -1424840 -780930 423010 15430494
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.178e+06 4.049e+05 5.380 5.86e-07 ***
## Total_Pendapatan 1.196e-01 6.374e-02 1.876 0.0639 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2966000 on 90 degrees of freedom
## Multiple R-squared: 0.03762, Adjusted R-squared: 0.02693
## F-statistic: 3.518 on 1 and 90 DF, p-value: 0.06393
Prediksi dengan data test
# Prediksi Total_Pengeluaran pada data test
test_data$prediksi_pengeluaran <- predict(reg_model, newdata = test_data)
# Lihat hasil prediksi
head(test_data[, c("Total_Pendapatan", "Total_Pengeluaran", "prediksi_pengeluaran")])
## # A tibble: 6 × 3
## Total_Pendapatan Total_Pengeluaran prediksi_pengeluaran
## <dbl> <dbl> <dbl>
## 1 1000000 1000000 2297779.
## 2 3500000 1500000 2596690.
## 3 3814443 1000000 2634287.
## 4 1300000 4000000 2333648.
## 5 300000 1200000 2214084.
## 6 4500000 1000000 2716255.
Evaluasi Model (MSE dan R-Squared pada data test)
# Hitung Mean Squared Error (MSE)
mse <- mean((test_data$Total_Pengeluaran - test_data$prediksi_pengeluaran)^2)
cat("Mean Squared Error (MSE):", mse, "\n")
## Mean Squared Error (MSE): 1.558971e+12
# Hitung R-squared
rss <- sum((test_data$Total_Pengeluaran - test_data$prediksi_pengeluaran)^2) # Residual Sum of Squares
tss <- sum((test_data$Total_Pengeluaran - mean(test_data$Total_Pengeluaran))^2) # Total Sum of Squares
r_squared <- 1 - (rss / tss)
cat("R-squared (Test Data):", r_squared, "\n")
## R-squared (Test Data): -0.0450739
Visualisasi
# Install ggplot2 jika belum
# install.packages("ggplot2")
library(ggplot2)
# Scatter plot dan garis prediksi pada data test
ggplot(test_data, aes(x = Total_Pendapatan)) +
geom_point(aes(y = Total_Pengeluaran), color = "blue", size = 2) + # Data asli
geom_line(aes(y = prediksi_pengeluaran), color = "red", size = 1) + # Garis prediksi
labs(title = "Scatter Plot dan Prediksi pada Data Test",
x = "Total Pendapatan", y = "Total Pengeluaran") +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.