Memuat
Memuat
Generalized Additive Model (GAM) untuk Pariwisata dan Perhotelan
0 kali dilihat
Menangkap hubungan nonlinear suhu udara dan curah hujan dengan pengunjung harian, dengan data sintetis sebagai ilustrasi. Generalized Additive Model (GAM) memodelkan hubungan nonlinear antara prediktor dan variabel terikat dengan fungsi smooth (spline) yang kelenturannya ditaksir dari data. Cocok untuk skripsi/tesis yang menduga hubungan berbentuk kurva, misalnya pengaruh suhu, umur, atau dosis.

Menangkap hubungan nonlinear suhu udara dan curah hujan dengan pengunjung harian, dengan data sintetis sebagai ilustrasi.
| Peran | Variabel | Satuan |
|---|---|---|
| Utama | Pengunjung harian | people |
| Pendukung 1 | Suhu udara | °C |
| Pendukung 2 | Curah hujan | mm |
Smooth Suhu udara memiliki edf 5.56 (p < 0.001), menandakan hubungan yang jelas nonlinear, dan smooth Curah hujan memiliki edf 4.37 (p < 0.001). GAM menjelaskan 72.4% deviance Pengunjung harian dengan AIC 77.1 poin lebih rendah dibanding model linear.
Dihitung dari data sintetis sebagai ilustrasi, bukan dari penelitian nyata.
Generalized Additive Model (GAM) memodelkan hubungan nonlinear antara prediktor dan variabel terikat dengan fungsi smooth (spline) yang kelenturannya ditaksir dari data. Cocok untuk skripsi/tesis yang menduga hubungan berbentuk kurva, misalnya pengaruh suhu, umur, atau dosis.
edf mendekati 1 berarti hubungan hampir linear, sedangkan edf yang lebih besar menunjukkan kurva yang makin lentur; p-value menguji apakah smooth berbeda dari nol. Laporkan edf, p-value, deviance explained, perbandingan AIC dengan model linear, dan grafik efek parsial.
Skrip awal singkat dengan nama variabel proyek ini. Versi yang diserahkan disesuaikan dengan data Anda dan diberi komentar lengkap.
# Contoh kode R: Generalized Additive Model (GAM)
suppressPackageStartupMessages({
library(ggplot2)
library(patchwork)
library(mgcv)
})
set.seed(42)
# ---- Gaya grafik ----
pal <- c("#1f6feb", "#e8590c", "#2f9e44", "#ae3ec9", "#f59f00")
warna <- list(bg = "#f4f6fa", panel = "#ffffff", teks = "#1f2933", redup = "#5f6b78", grid = "#e3e8ee", bar = "#1d3557")
tata <- 1
theme_set(theme_minimal(base_size = 11) + theme(legend.position = "bottom"))
# ---- Data sintetis: hubungan nonlinear ----
n <- 200
d <- data.frame(air_temperature = runif(n, 50 - 1.9 * 10, 50 + 1.9 * 10),
rainfall = rnorm(n, 30, 6))
z1 <- as.numeric(scale(d$air_temperature))
z2 <- as.numeric(scale(d$rainfall))
# Bentuk kurva dipilih acak: U terbalik, gelombang, atau jenuh (saturasi)
bentuk1 <- sample(1:3, 1)
f1 <- switch(bentuk1, -(z1 - runif(1, -0.4, 0.4))^2, sin(runif(1, 1.2, 1.7) * z1), log1p(exp(2.2 * z1)) - 0.25 * z1^2)
f2 <- if (runif(1) < 0.5) tanh(runif(1, 1, 1.8) * z2) else exp(0.6 * z2)
f1 <- as.numeric(scale(f1)); f2 <- as.numeric(scale(f2))
y <- runif(1, 0.6, 0.85) * f1 + runif(1, 0.3, 0.5) * sample(c(-1, 1), 1) * f2 + rnorm(n, 0, runif(1, 0.45, 0.65))
d$daily_visitors <- round(100 + 15 * y, 3)
write.csv(d, "data_contoh.csv", row.names = FALSE)
# ---- Analisis: Generalized Additive Model (mgcv::gam, REML) ----
fit <- gam(daily_visitors ~ s(air_temperature) + s(rainfall), data = d, method = "REML")
s <- summary(fit)
print(s)
print(k.check(fit)) # cek kecukupan dimensi basis k (k-index)
lin <- gam(daily_visitors ~ air_temperature + rainfall, data = d, method = "REML") # pembanding: model linear
aic <- c(Linear = AIC(lin), GAM = AIC(fit))
print(aic)
uji <- anova(lin, fit, test = "F") # uji F aproksimasi: linear vs GAM
print(uji)
edf <- unname(s$s.table[, "edf"])
p_s <- unname(s$s.table[, "p-value"])
# ---- Grafik ----
# Efek parsial tiap smooth (skala Y, variabel lain pada rata-rata) dengan pita 95% dan residual parsial
efek <- function(v, w, lab) {
g <- data.frame(air_temperature = rep(mean(d$air_temperature), 150), rainfall = rep(mean(d$rainfall), 150))
g[[v]] <- seq(min(d[[v]]), max(d[[v]]), length.out = 150)
pr <- predict(fit, newdata = g, type = "terms", se.fit = TRUE)
j <- match(paste0("s(", v, ")"), colnames(pr$fit))
gg <- data.frame(x = g[[v]], m = pr$fit[, j], lo = pr$fit[, j] - 1.96 * pr$se.fit[, j], hi = pr$fit[, j] + 1.96 * pr$se.fit[, j])
tr <- predict(fit, type = "terms")
dp <- data.frame(x = d[[v]], r = tr[, j] + residuals(fit)) # residual parsial
ggplot() +
geom_hline(yintercept = 0, colour = warna$redup, linewidth = 0.4) +
geom_point(data = dp, aes(x, r), colour = warna$redup, alpha = 0.3, size = 1.1) +
geom_ribbon(data = gg, aes(x, ymin = lo, ymax = hi), fill = w, alpha = 0.25) +
geom_line(data = gg, aes(x, m), colour = w, linewidth = 1.3) +
geom_rug(data = dp, aes(x), sides = "b", colour = w, alpha = 0.3, length = unit(0.02, "npc")) +
labs(title = sprintf("Partial effect s(%s), edf = %.2f", substr(lab, 1, 14), s$s.table[j, "edf"]),
x = if (v == "air_temperature") "air_temperature" else "rainfall", y = "Partial effect")
}
p1 <- efek("air_temperature", pal[1], "air_temperature")
p2 <- efek("rainfall", pal[2], "rainfall")
d$prediksi <- fitted(fit)
p3 <- ggplot(d, aes(prediksi, daily_visitors)) +
geom_abline(slope = 1, intercept = 0, linetype = "dashed", colour = warna$redup) +
geom_point(colour = pal[3], alpha = 0.55, size = 1.5) +
annotate("text", x = min(d$prediksi), y = max(d$daily_visitors), hjust = 0, vjust = 1, colour = warna$teks, size = 3.3,
label = sprintf("Deviance explained = %.1f%%", 100 * summary(fit)$dev.expl)) +
labs(title = "Predicted vs actual", x = "Predicted daily_visitors", y = "daily_visitors")
p_hasil <- if (tata == 1) (p1 | p2) / p3 else p1 | (p2 / p3)
print(p_hasil)
Berkas proyek aslinya tersedia. Bukan sekadar gambar di atas: Anda mendapat proyek R yang siap dijalankan. Berkas bisa diunduh setelah pembayaran, dan kami kirim lewat WhatsApp atau email.
ZIP: analisis.R + data_contoh.csv + BACA-DULU.txt
Pilih seberapa banyak bantuan yang Anda perlukan. Setiap paket yang lebih tinggi sudah mencakup semua item paket di bawahnya. Harga belum termasuk PPN 11%.
Paket 1
Rp 500.000
belum termasuk PPN 11%
Waktu pengerjaan: 7 hari kerja
Output: Berkas R + gambar hasil
Yang Anda terima
Paket 2 · paling dipilih
Rp 1.450.000
belum termasuk PPN 11%
Waktu pengerjaan: 13 hari kerja
Output: Kode + analisis + bahan interpretasi
Termasuk semua item Paket 1, ditambah
Paket 3
Rp 3.200.000
belum termasuk PPN 11%
Waktu pengerjaan: 18-21 hari kerja
Output: Kode + analisis + pendampingan hingga siap dipresentasikan
Termasuk semua item Paket 1 & 2, ditambah
Ya. Berkas proyek aslinya berupa ZIP berisi skrip analisis.R lengkap, data_contoh.csv, dan petunjuk BACA-DULU.txt. Berkas bisa diunduh setelah pembayaran, dan kami kirim lewat WhatsApp atau email. Untuk data Anda sendiri (Paket 2 dan 3), skrip disesuaikan dengan dataset Anda.
Cocok. Generalized Additive Model (GAM) lazim dipakai pada jenjang ini di bidang Pariwisata dan Perhotelan. Analisis kami sesuaikan dengan pertanyaan penelitian, data Anda sendiri, dan ketentuan dosen pembimbing.
Bukan. Lembar hasil dihitung dari data sintetis sebagai ilustrasi jenis keluaran R Studio. Untuk pesanan Anda, metode yang sama dijalankan pada data penelitian Anda sendiri.
Itu tujuan paketnya. Setiap skrip diberi komentar, dan Paket 3 mencakup dua sesi pendampingan serta latihan tanya jawab supaya Anda bisa menjelaskan metode dan hasilnya saat seminar dan sidang.
Tiap proyek punya tiga paket: Paket 1 (kode dan penjelasan) Rp 500.000, Paket 2 (analisis data Anda dan interpretasi) Rp 1.450.000, dan Paket 3 (pendampingan lengkap) Rp 3.200.000, belum termasuk PPN 11%. Data yang besar, metode tambahan, atau tenggat ketat menyesuaikan penawaran setelah konsultasi singkat.
Lembar hasil memakai data sintetis sebagai ilustrasi. R adalah bahasa pemrograman proyek R Foundation; RStudio dan Posit adalah merek dagang Posit PBC.
Kembali ke portofolio R Studio