Analisis regresi linier berganda merupakan metode statistika untuk menganalisis hubungan antara satu variabel dependen dan beberapa variabel independen. Analisis ini digunakan untuk mengetahui hubungan variabel-variabel independen terhadap variabel dependen serta membentuk model yang dapat digunakan untuk menjelaskan perubahan variabel dependen.
Bagaimana melakukan analisis regresi linier berganda yang meliputi eksplorasi data, statistik deskriptif, estimasi model, pengujian asumsi klasik, uji signifikansi parameter, serta identifikasi dan pengujian outlier menggunakan program R?
Melakukan analisis regresi linier berganda, menguji asumsi klasik dan signifikansi parameter, serta mengidentifikasi outlier menggunakan Influence Plot dan uji Bonferroni.
Analisis menggunakan data sekunder tahun 2024 dari 38 provinsi di Indonesia. Variabel dependen yang digunakan adalah PDRB per kapita (Y), sedangkan variabel independen terdiri atas PMTB (X1), rata-rata upah/gaji bersih (X2), persentase akses internet (X3), Tingkat Pengangguran Terbuka (X4), dan jumlah usaha kecil (X5). Tahapan analisis mengikuti batasan masalah Komstat Pertemuan 9, yaitu eksplorasi data, statistik deskriptif, pembentukan model regresi, pengujian asumsi klasik, uji F dan uji t, serta deteksi outlier menggunakan Influence Plot dan uji Bonferroni.
Regresi linier berganda digunakan untuk mengetahui hubungan satu variabel dependen dengan dua atau lebih variabel independen. Model yang digunakan dalam analisis ini adalah:
\[ Y_i = \beta_0+\beta_1X_{1i}+\beta_2X_{2i}+\beta_3X_{3i} +\beta_4X_{4i}+\beta_5X_{5i}+\varepsilon_i \]
Pengujian asumsi klasik meliputi uji normalitas residual, multikolinieritas, heteroskedastisitas, dan autokorelasi. Pengujian dilakukan untuk memeriksa kelayakan model regresi berdasarkan asumsi yang digunakan.
Uji F digunakan untuk mengetahui pengaruh variabel independen secara simultan terhadap variabel dependen. Uji t digunakan untuk mengetahui pengaruh setiap variabel independen secara parsial.
Outlier merupakan pengamatan yang memiliki karakteristik berbeda atau menyimpang dari pola umum data. Identifikasi dilakukan melalui Influence Plot dan uji Bonferroni. Pengamatan yang terindikasi pada plot perlu diperiksa lebih lanjut melalui pengujian statistik.
Model regresi linier berganda dengan lima variabel independen dapat dituliskan sebagai berikut:
\[ Y_i=\beta_0+\beta_1X_{1i}+\beta_2X_{2i} +\beta_3X_{3i}+\beta_4X_{4i}+\beta_5X_{5i}+\varepsilon_i \]
Keterangan: \(Y_i\) merupakan PDRB per kapita, \(\beta_0\) merupakan konstanta, \(\beta_j\) merupakan koefisien regresi, \(X_{ji}\) merupakan variabel independen, dan \(\varepsilon_i\) merupakan galat.
Taraf signifikansi yang digunakan dalam pengujian adalah \(\alpha=0,05\). Keputusan pengujian didasarkan pada nilai p-value dengan ketentuan: - Jika p-value < 0,05, maka \(H_0\) ditolak. - Jika p-value ≥ 0,05, maka \(H_0\) gagal ditolak.
Data yang digunakan merupakan data kuantitatif sekunder tahun 2024 yang mencakup 38 provinsi di Indonesia. Data variabel penelitian disusun berdasarkan data yang digunakan pada laporan praktikum sebelumnya.
| Variabel | Keterangan |
|---|---|
| Y | PDRB per kapita |
| X1 | Pembentukan Modal Tetap Bruto (PMTB) |
| X2 | Rata-rata upah/gaji bersih |
| X3 | Persentase akses internet |
| X4 | Tingkat Pengangguran Terbuka (TPT) |
| X5 | Jumlah usaha kecil |
Tahapan analisis dilakukan dengan memasukkan data, mengeksplorasi data, menghitung statistik deskriptif, membentuk model regresi linier berganda, menguji asumsi klasik, melakukan uji F dan uji t, serta mengidentifikasi outlier menggunakan Influence Plot dan uji Bonferroni.
Analisis dilakukan menggunakan perangkat lunak R melalui RStudio dan
disusun dalam dokumen R Markdown. Paket car digunakan untuk
menghitung VIF, Influence Plot, dan uji Bonferroni, sedangkan
paket lmtest digunakan untuk uji Breusch-Pagan dan
Durbin-Watson.
Data dimasukkan langsung ke dalam R Markdown agar dokumen dapat dijalankan tanpa bergantung pada clipboard atau lokasi file di komputer.
data <- data.frame(
Provinsi = c(
"Aceh", "Sumatera Utara", "Sumatera Barat", "Riau", "Jambi",
"Sumatera Selatan", "Bengkulu", "Lampung", "Kepulauan Bangka Belitung",
"Kepulauan Riau", "DKI Jakarta", "Jawa Barat", "Jawa Tengah",
"DI Yogyakarta", "Jawa Timur", "Banten", "Bali",
"Nusa Tenggara Barat", "Nusa Tenggara Timur", "Kalimantan Barat",
"Kalimantan Tengah", "Kalimantan Selatan", "Kalimantan Timur",
"Kalimantan Utara", "Sulawesi Utara", "Sulawesi Tengah",
"Sulawesi Selatan", "Sulawesi Tenggara", "Gorontalo", "Sulawesi Barat",
"Maluku", "Maluku Utara", "Papua Barat", "Papua Barat Daya",
"Papua", "Papua Selatan", "Papua Tengah", "Papua Pegunungan"
),
Y = c(
43782, 73575, 57083, 165350, 86775, 75132, 49233, 51387, 70193,
161424, 344383, 56082, 47970, 51486, 75770, 70276, 67318, 32282,
24303, 52703, 79320, 67122, 212117, 198677, 69352, 120750, 73573,
67840, 44437, 42718, 32199, 71517, 131636, 59064, 81009, 61622,
118774, 18105
),
X1 = c(
243202.09, 1146919.75, 332936.44, 1112481.62, 322975.53,
663961.72, 103991.92, 483882.92, 107504.82, 352436.43,
3679358.60, 2823338.73, 1817776.96, 193514.56, 3168295.58,
873626.25, 298441.51, 182265.19, 137282.48, 300166.89,
222864.50, 286818.87, 858430.74, 146793.48, 187374.29,
376950.32, 696252.76, 189481.75, 54554.50, 64214.88,
62646.24, 95787.67, 76177.48, 37040.34, 85914.33, 33382.85,
174942.95, 26561.43
),
X2 = c(
2624922, 2760361, 2772393, 3139242, 2831081, 2886117, 2839093,
2517788, 3264692, 4911036, 5806940, 3774498, 2405447, 2829890,
2713383, 4392768, 3403265, 2365102, 2370111, 2904061, 3384610,
3239646, 4400771, 3748909, 3453051, 2863721, 2992571, 2954690,
2605876, 2443110, 2925208, 3456786, 3392758, 3739328, 4151674,
3639485, 5071157, 4089877
),
X3 = c(
88.95, 92.30, 91.89, 94.16, 90.59, 90.94, 90.62, 91.57, 92.14,
97.57, 98.18, 90.58, 88.89, 89.50, 86.90, 93.02, 92.16, 86.54,
82.45, 92.65, 92.13, 89.22, 95.45, 94.58, 89.31, 87.94, 92.18,
91.70, 90.17, 89.67, 87.27, 87.28, 85.51, 88.49, 81.99, 65.71,
36.08, 12.15
),
X4 = c(
5.75, 5.60, 5.75, 3.70, 4.48, 3.86, 3.11, 4.19, 4.63, 6.39,
6.21, 6.75, 4.78, 3.48, 4.19, 6.68, 1.79, 2.73, 3.02, 4.86,
4.01, 4.20, 5.14, 3.90, 5.85, 2.94, 4.19, 3.09, 3.13, 2.68,
6.11, 4.03, 4.13, 6.48, 6.48, 4.05, 2.75, 1.32
),
X5 = c(
2360, 7005, 2859, 1586, 1692, 3723, 911, 4080, 583, 331, 11142,
56959, 52944, 5555, 101512, 5892, 3273, 14854, 1148, 596, 628,
2195, 2111, 170, 911, 9267, 3911, 1065, 1482, 375, 2169, 2407,
31, 39, 129, 20, 96, 35
)
)
head(data)
#> Provinsi Y X1 X2 X3 X4 X5
#> 1 Aceh 43782 243202.1 2624922 88.95 5.75 2360
#> 2 Sumatera Utara 73575 1146919.8 2760361 92.30 5.60 7005
#> 3 Sumatera Barat 57083 332936.4 2772393 91.89 5.75 2859
#> 4 Riau 165350 1112481.6 3139242 94.16 3.70 1586
#> 5 Jambi 86775 322975.5 2831081 90.59 4.48 1692
#> 6 Sumatera Selatan 75132 663961.7 2886117 90.94 3.86 3723
dim(data)
#> [1] 38 7
str(data)
#> 'data.frame': 38 obs. of 7 variables:
#> $ Provinsi: chr "Aceh" "Sumatera Utara" "Sumatera Barat" "Riau" ...
#> $ Y : num 43782 73575 57083 165350 86775 ...
#> $ X1 : num 243202 1146920 332936 1112482 322976 ...
#> $ X2 : num 2624922 2760361 2772393 3139242 2831081 ...
#> $ X3 : num 89 92.3 91.9 94.2 90.6 ...
#> $ X4 : num 5.75 5.6 5.75 3.7 4.48 3.86 3.11 4.19 4.63 6.39 ...
#> $ X5 : num 2360 7005 2859 1586 1692 ...
# Memeriksa struktur dan tipe data
str(data)
#> 'data.frame': 38 obs. of 7 variables:
#> $ Provinsi: chr "Aceh" "Sumatera Utara" "Sumatera Barat" "Riau" ...
#> $ Y : num 43782 73575 57083 165350 86775 ...
#> $ X1 : num 243202 1146920 332936 1112482 322976 ...
#> $ X2 : num 2624922 2760361 2772393 3139242 2831081 ...
#> $ X3 : num 89 92.3 91.9 94.2 90.6 ...
#> $ X4 : num 5.75 5.6 5.75 3.7 4.48 3.86 3.11 4.19 4.63 6.39 ...
#> $ X5 : num 2360 7005 2859 1586 1692 ...
# Memeriksa jumlah observasi dan variabel
cat("Jumlah observasi:", nrow(data), "\n")
#> Jumlah observasi: 38
cat("Jumlah variabel:", ncol(data), "\n")
#> Jumlah variabel: 7
# Memeriksa data kosong
colSums(is.na(data))
#> Provinsi Y X1 X2 X3 X4 X5
#> 0 0 0 0 0 0 0
# Memeriksa baris data
head(data)
#> Provinsi Y X1 X2 X3 X4 X5
#> 1 Aceh 43782 243202.1 2624922 88.95 5.75 2360
#> 2 Sumatera Utara 73575 1146919.8 2760361 92.30 5.60 7005
#> 3 Sumatera Barat 57083 332936.4 2772393 91.89 5.75 2859
#> 4 Riau 165350 1112481.6 3139242 94.16 3.70 1586
#> 5 Jambi 86775 322975.5 2831081 90.59 4.48 1692
#> 6 Sumatera Selatan 75132 663961.7 2886117 90.94 3.86 3723
tail(data)
#> Provinsi Y X1 X2 X3 X4 X5
#> 33 Papua Barat 131636 76177.48 3392758 85.51 4.13 31
#> 34 Papua Barat Daya 59064 37040.34 3739328 88.49 6.48 39
#> 35 Papua 81009 85914.33 4151674 81.99 6.48 129
#> 36 Papua Selatan 61622 33382.85 3639485 65.71 4.05 20
#> 37 Papua Tengah 118774 174942.95 5071157 36.08 2.75 96
#> 38 Papua Pegunungan 18105 26561.43 4089877 12.15 1.32 35
# Statistik deskriptif
summary(data[, c("Y", "X1", "X2", "X3", "X4", "X5")])
#> Y X1 X2 X3
#> Min. : 18105 Min. : 26561 Min. :2365102 Min. :12.15
#> 1st Qu.: 51412 1st Qu.: 104870 1st Qu.:2786767 1st Qu.:87.44
#> Median : 68596 Median : 233033 Median :3065907 Median :90.38
#> Mean : 84377 Mean : 579488 Mean :3317511 Mean :86.27
#> 3rd Qu.: 80587 3rd Qu.: 618942 3rd Qu.:3714367 3rd Qu.:92.16
#> Max. :344383 Max. :3679359 Max. :5806940 Max. :98.18
#> X4 X5
#> Min. :1.320 Min. : 20.0
#> 1st Qu.:3.217 1st Qu.: 586.2
#> Median :4.190 Median : 1901.5
#> Mean :4.380 Mean : 8053.8
#> 3rd Qu.:5.713 3rd Qu.: 4037.8
#> Max. :6.750 Max. :101512.0
# Rata-rata dan standar deviasi
sapply(data[, c("Y", "X1", "X2", "X3", "X4", "X5")],
function(x) c(Mean = mean(x), SD = sd(x)))
#> Y X1 X2 X3 X4 X5
#> Mean 84377.34 579488.1 3317511.0 86.27447 4.379737 8053.842
#> SD 62202.93 876524.9 803084.8 15.99130 1.414222 19820.586
regresi <- lm(Y ~ X1 + X2 + X3 + X4 + X5, data = data)
# Ringkasan model
summary(regresi)
#>
#> Call:
#> lm(formula = Y ~ X1 + X2 + X3 + X4 + X5, data = data)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -65224 -13727 -2101 15313 76930
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.992e+05 5.252e+04 -3.793 0.000625 ***
#> X1 3.982e-02 1.192e-02 3.339 0.002147 **
#> X2 5.446e-02 9.758e-03 5.581 3.67e-06 ***
#> X3 1.790e+03 4.428e+02 4.044 0.000310 ***
#> X4 -1.492e+04 4.770e+03 -3.128 0.003735 **
#> X5 -1.151e+00 4.975e-01 -2.314 0.027230 *
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 31530 on 32 degrees of freedom
#> Multiple R-squared: 0.7778, Adjusted R-squared: 0.7431
#> F-statistic: 22.41 on 5 and 32 DF, p-value: 1.334e-09
# Koefisien regresi
coef(regresi)
#> (Intercept) X1 X2 X3 X4
#> -1.991879e+05 3.981483e-02 5.445552e-02 1.790356e+03 -1.492178e+04
#> X5
#> -1.151296e+00
# Persamaan regresi
cat("Y =", round(coef(regresi)[1], 4),
"+", round(coef(regresi)[2], 6), "X1",
"+", round(coef(regresi)[3], 6), "X2",
"+", round(coef(regresi)[4], 4), "X3",
"+", round(coef(regresi)[5], 4), "X4",
"+", round(coef(regresi)[6], 4), "X5\n")
#> Y = -199187.9 + 0.039815 X1 + 0.054456 X2 + 1790.356 X3 + -14921.78 X4 + -1.1513 X5
# Memuat paket yang diperlukan
library(car)
library(lmtest)
shapiro.test(residuals(regresi))
#>
#> Shapiro-Wilk normality test
#>
#> data: residuals(regresi)
#> W = 0.94448, p-value = 0.05865
# Q-Q Plot
qqnorm(residuals(regresi),
main = "Normal Q-Q Plot Residual")
qqline(residuals(regresi), col = "red", lwd = 2)
Kriteria keputusan: jika p-value lebih besar dari 0,05, maka tidak terdapat cukup bukti untuk menyatakan residual tidak berdistribusi normal.
vif(regresi)
#> X1 X2 X3 X4 X5
#> 4.067504 2.286085 1.866252 1.694248 3.619687
Kriteria keputusan: nilai VIF di bawah 10 menunjukkan tidak terdapat indikasi multikolinieritas yang serius.
bptest(regresi)
#>
#> studentized Breusch-Pagan test
#>
#> data: regresi
#> BP = 8.4351, df = 5, p-value = 0.1338
Kriteria keputusan: jika p-value lebih besar dari 0,05, maka tidak terdapat cukup bukti adanya heteroskedastisitas.
dwtest(regresi)
#>
#> Durbin-Watson test
#>
#> data: regresi
#> DW = 1.7017, p-value = 0.09625
#> alternative hypothesis: true autocorrelation is greater than 0
Kriteria keputusan: jika p-value lebih besar dari 0,05, maka tidak terdapat cukup bukti adanya autokorelasi. Karena data ini merupakan data lintas provinsi, urutan observasi perlu diperhatikan dalam menafsirkan uji Durbin-Watson.
hasil_model <- summary(regresi)
hasil_model$fstatistic
#> value numdf dendf
#> 22.4091 5.0000 32.0000
p_value_f <- pf(
hasil_model$fstatistic[1],
hasil_model$fstatistic[2],
hasil_model$fstatistic[3],
lower.tail = FALSE
)
cat("P-value Uji F =", p_value_f, "\n")
#> P-value Uji F = 1.333744e-09
if (p_value_f < 0.05) {
cat("Keputusan: Tolak H0. Variabel independen secara simultan berpengaruh signifikan terhadap Y.")
} else {
cat("Keputusan: Gagal menolak H0. Belum terdapat bukti pengaruh simultan yang signifikan.")
}
#> Keputusan: Tolak H0. Variabel independen secara simultan berpengaruh signifikan terhadap Y.
koefisien <- coef(summary(regresi))
koefisien
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.991879e+05 5.251905e+04 -3.792679 6.247083e-04
#> X1 3.981483e-02 1.192506e-02 3.338752 2.146644e-03
#> X2 5.445552e-02 9.757662e-03 5.580796 3.665130e-06
#> X3 1.790356e+03 4.427537e+02 4.043684 3.097294e-04
#> X4 -1.492178e+04 4.770148e+03 -3.128158 3.734604e-03
#> X5 -1.151296e+00 4.974850e-01 -2.314233 2.722950e-02
# Keputusan uji t untuk setiap variabel independen
hasil_uji_t <- data.frame(
Variabel = rownames(koefisien),
Koefisien = koefisien[, "Estimate"],
t_hitung = koefisien[, "t value"],
p_value = koefisien[, "Pr(>|t|)"],
Keputusan = ifelse(
koefisien[, "Pr(>|t|)"] < 0.05,
"Tolak H0",
"Gagal menolak H0"
)
)
hasil_uji_t
#> Variabel Koefisien t_hitung p_value Keputusan
#> (Intercept) (Intercept) -1.991879e+05 -3.792679 6.247083e-04 Tolak H0
#> X1 X1 3.981483e-02 3.338752 2.146644e-03 Tolak H0
#> X2 X2 5.445552e-02 5.580796 3.665130e-06 Tolak H0
#> X3 X3 1.790356e+03 4.043684 3.097294e-04 Tolak H0
#> X4 X4 -1.492178e+04 -3.128158 3.734604e-03 Tolak H0
#> X5 X5 -1.151296e+00 -2.314233 2.722950e-02 Tolak H0
Kriteria keputusan: jika p-value lebih kecil dari 0,05, maka H0 ditolak. Artinya, variabel independen yang diuji berpengaruh signifikan secara parsial terhadap Y.
influencePlot(
regresi,
id.method = "noteworthy",
main = "Influence Plot",
sub = "Ukuran lingkaran menunjukkan Cook's Distance"
)
#> StudRes Hat CookD
#> 11 0.6732332 0.7560880 0.2382338
#> 15 1.3853737 0.6665663 0.6216077
#> 17 -2.5636951 0.2353185 0.2871021
#> 24 2.8744898 0.1157403 0.1469078
# Menghitung ukuran pengaruh setiap pengamatan
pengaruh <- data.frame(
Provinsi = data$Provinsi,
StudRes = rstudent(regresi),
Hat = hatvalues(regresi),
CookD = cooks.distance(regresi)
)
# Menampilkan pengamatan dengan Cook's Distance terbesar
pengaruh[order(-pengaruh$CookD), ][1:10, ]
#> Provinsi StudRes Hat CookD
#> 15 Jawa Timur 1.3853737 0.66656629 0.62160769
#> 17 Bali -2.5636951 0.23531846 0.28710212
#> 12 Jawa Barat -2.3056683 0.26352386 0.27935367
#> 11 DKI Jakarta 0.6732332 0.75608795 0.23823381
#> 24 Kalimantan Utara 2.8744898 0.11574027 0.14690780
#> 16 Banten -2.3397361 0.12551691 0.11489353
#> 38 Papua Pegunungan -0.4390718 0.63269773 0.05677907
#> 23 Kalimantan Timur 1.5723162 0.11012894 0.04874936
#> 4 Riau 1.2950212 0.12682853 0.03975819
#> 26 Sulawesi Tengah 1.5447989 0.06595834 0.02692009
# Pengamatan dengan |studentized residual| > 3
subset(pengaruh, abs(StudRes) > 3)
#> [1] Provinsi StudRes Hat CookD
#> <0 rows> (or 0-length row.names)
# Pengamatan dengan leverage di atas 2p/n
n <- nobs(regresi)
p <- length(coef(regresi))
batas_leverage <- 2 * p / n
batas_leverage
#> [1] 0.3157895
subset(pengaruh, Hat > batas_leverage)
#> Provinsi StudRes Hat CookD
#> 11 DKI Jakarta 0.6732332 0.7560880 0.23823381
#> 15 Jawa Timur 1.3853737 0.6665663 0.62160769
#> 37 Papua Tengah 0.4487560 0.3676061 0.02000969
#> 38 Papua Pegunungan -0.4390718 0.6326977 0.05677907
outlierTest(regresi, cutoff = 0.05, n.max = 10)
#> No Studentized residuals with Bonferroni p < 0.05
#> Largest |rstudent|:
#> rstudent unadjusted p-value Bonferroni p
#> 24 2.87449 0.0072496 0.27548
Hipotesis pengujian:
Kriteria keputusan: jika Bonferroni p-value lebih kecil dari 0,05, maka H0 ditolak sehingga pengamatan tersebut teridentifikasi sebagai outlier secara statistik.
cat("Jumlah observasi =", nobs(regresi), "\n")
#> Jumlah observasi = 38
cat("R-squared =", summary(regresi)$r.squared, "\n")
#> R-squared = 0.777848
cat("Adjusted R-squared =", summary(regresi)$adj.r.squared, "\n")
#> Adjusted R-squared = 0.7431367
cat("P-value uji F =", p_value_f, "\n")
#> P-value uji F = 1.333744e-09
cat("\nP-value uji t:\n")
#>
#> P-value uji t:
print(coef(summary(regresi))[, "Pr(>|t|)"])
#> (Intercept) X1 X2 X3 X4 X5
#> 6.247083e-04 2.146644e-03 3.665130e-06 3.097294e-04 3.734604e-03 2.722950e-02
Kesimpulan disusun berdasarkan hasil analisis yang diperoleh setelah seluruh bagian R Markdown dijalankan. Kesimpulan mencakup gambaran data, persamaan regresi linier berganda, hasil pengujian asumsi klasik, hasil uji F dan uji t, serta hasil identifikasi dan pengujian outlier menggunakan Influence Plot dan uji Bonferroni.
Penelitian selanjutnya diharapkan dapat menggunakan data yang lebih lengkap dan memperhatikan karakteristik data sebelum membentuk model regresi. Pengamatan yang terindikasi sebagai outlier perlu diperiksa lebih lanjut berdasarkan konteks data dan hasil pengujian statistik, bukan langsung dihapus dari analisis.
Azizah, R. J., dan Wachidah, L. (2022). Regresi robust estimasi-M dengan pembobot Huber dan Tukey bisquare pada data tingkat pengangguran di Indonesia menurut provinsi tahun 2020. Jurnal Ilmiah Matematika dan Pendidikan Matematika, 14(1).
Effendi, A., Sugiyanto, D., dan Wulandari, R. (2020). Analisis Regresi. Malang: UB Press.
Ningrum, C. S., dan Rahardjo, S. (2023). Kajian penaksiran parameter regresi robust untuk data outlier (pencilan) dengan estimasi-MM. Jurnal MIPA dan Pembelajarannya, 2(10).
Rini, D. S. (2026). Modul Praktikum Analisis Regresi dan Korelasi. Bengkulu: Laboratorium Matematika FMIPA Universitas Bengkulu.