Memuat
Memuat
PLS-SEM (seminr) untuk Pemasaran dan Perilaku Konsumen
0 kali dilihat
Analisis ini bertujuan menguji efek langsung dan mediasi kepercayaan merek pada loyalitas, diilustrasikan dengan data sintetis. PLS-SEM (Partial Least Squares Structural Equation Modeling) menguji model pengukuran konstruk laten dan hubungan struktural antarkonstruk, termasuk efek mediasi, dengan bootstrap. Cocok untuk skripsi, tesis, atau disertasi berbasis kuesioner Likert dengan sampel sedang dan tujuan prediktif atau eksploratif.

Analisis ini bertujuan menguji efek langsung dan mediasi kepercayaan merek pada loyalitas, diilustrasikan dengan data sintetis.
| Peran | Variabel | Satuan |
|---|---|---|
| Utama | Loyalitas merek | Likert 1-5 |
| Pendukung 1 | Citra merek | Likert 1-5 |
| Pendukung 2 | Kepercayaan merek | Likert 1-5 |
Konstruk reliabel dan valid (rhoC minimum 0.865, AVE minimum 0.616, HTMT maksimum 0.544). Citra merek berpengaruh langsung terhadap Loyalitas merek (beta = 0.006, p = 0.934) dan efek tidak langsungnya melalui Kepercayaan merek sebesar 0.176 (IK 95% 0.112 sampai 0.260) signifikan. Model menjelaskan 16.6% variasi Loyalitas merek.
Dihitung dari data sintetis sebagai ilustrasi, bukan dari penelitian nyata.
PLS-SEM (Partial Least Squares Structural Equation Modeling) menguji model pengukuran konstruk laten dan hubungan struktural antarkonstruk, termasuk efek mediasi, dengan bootstrap. Cocok untuk skripsi, tesis, atau disertasi berbasis kuesioner Likert dengan sampel sedang dan tujuan prediktif atau eksploratif.
Laporkan dulu model pengukuran (loading, rhoC, AVE, HTMT), lalu model struktural (koefisien jalur, t, p bootstrap, dan R2). Efek tidak langsung signifikan bila interval kepercayaan bootstrap 95% tidak memuat nol; bandingkan dengan efek langsung untuk menentukan mediasi parsial atau penuh.
Skrip awal singkat dengan nama variabel proyek ini. Versi yang diserahkan disesuaikan dengan data Anda dan diberi komentar lengkap.
# Contoh kode R: PLS-SEM (seminr)
suppressPackageStartupMessages({
library(ggplot2)
library(patchwork)
library(seminr)
})
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: skor butir Likert 1-5 dari tiga konstruk laten ----
n <- 200
a <- runif(1, 0.4, 0.7) # jalur X1 -> X2 (mediator)
b <- runif(1, 0.3, 0.55) # jalur X2 -> Y
cp <- runif(1, 0.1, 0.35) # jalur langsung X1 -> Y
e_x1 <- rnorm(n)
e_x2 <- a * e_x1 + rnorm(n, 0, sqrt(1 - a^2))
e_y <- cp * e_x1 + b * e_x2 + rnorm(n, 0, runif(1, 0.55, 0.75))
e_y <- as.numeric(scale(e_y))
# butir Likert: muatan acak 0.65-0.9, ambang dibuat agar rata-rata butir sekitar 3.4-3.8
likert <- function(eta, k) {
sapply(seq_len(k), function(j) {
l <- runif(1, 0.65, 0.9)
s <- l * eta + rnorm(length(eta), 0, sqrt(1 - l^2))
findInterval(s, sort(c(-2, -1.1, -0.2, 0.9) + runif(1, -0.3, 0.2))) + 1
})
}
k <- c(4, 3, 4) # jumlah butir: X1, X2, Y
d <- data.frame(likert(e_x1, k[1]), likert(e_x2, k[2]), likert(e_y, k[3]))
names(d) <- c(paste0("brand_image", "_", 1:k[1]), paste0("brand_trust", "_", 1:k[2]), paste0("brand_loyalty", "_", 1:k[3]))
write.csv(d, "data_contoh.csv", row.names = FALSE)
# ---- Model pengukuran (reflektif, mode A) dan model struktural ----
mm <- constructs(
composite("brand_image", multi_items("brand_image_", 1:k[1]), weights = mode_A),
composite("brand_trust", multi_items("brand_trust_", 1:k[2]), weights = mode_A),
composite("brand_loyalty", multi_items("brand_loyalty_", 1:k[3]), weights = mode_A))
sm <- relationships(
paths(from = "brand_image", to = c("brand_trust", "brand_loyalty")),
paths(from = "brand_trust", to = "brand_loyalty"))
pls <- estimate_pls(data = d, measurement_model = mm, structural_model = sm)
s <- summary(pls)
print(s$loadings); print(s$reliability); print(s$validity$htmt); print(s$paths)
# ---- Bootstrap untuk signifikansi jalur dan efek tidak langsung ----
bt <- bootstrap_model(seminr_model = pls, nboot = 400, cores = 1, seed = 123)
sb <- summary(bt)
print(sb$bootstrapped_paths)
ind <- specific_effect_significance(bt, from = "brand_image", through = "brand_trust", to = "brand_loyalty", alpha = 0.05)
print(ind)
bp <- sb$bootstrapped_paths
p_jalur <- 2 * pnorm(-abs(bp[, "T Stat."])) # p dua sisi dari statistik t bootstrap
koef <- bp[, "Original Est."]
nm_j <- rownames(bp) # "X1 -> X2" dst.
j_a <- grep("^brand_image .*-> *brand_trust$", nm_j); j_b <- grep("^brand_trust .*-> *brand_loyalty$", nm_j); j_c <- grep("^brand_image .*-> *brand_loyalty$", nm_j)
rel <- s$reliability
ave <- rel[, "AVE"]; rhoc <- rel[, "rhoC"]
r2 <- s$paths["R^2", c("brand_trust", "brand_loyalty")]
htmt_maks <- max(s$validity$htmt, na.rm = TRUE)
ind_est <- unname(ind["Original Est."]); ind_lo <- unname(ind["2.5% CI"]); ind_hi <- unname(ind["97.5% CI"])
# ---- Grafik ----
bintang <- function(p) ifelse(p < 0.001, "***", ifelse(p < 0.01, "**", ifelse(p < 0.05, "*", " ns")))
bungkus <- function(s) paste(head(strwrap(s, 17), 2), collapse = "\n") # nama konstruk maks. 2 baris
nd <- data.frame(x = c(0, 1, 2), y = c(0, 1, 0), lab = c(bungkus("brand_image"), bungkus("brand_trust"), bungkus("brand_loyalty")),
r2 = c("", sprintf("R2 = %.2f", r2[1]), sprintf("R2 = %.2f", r2[2])))
pan <- data.frame(x = c(0.2, 1.2, 0.36), y = c(0.2, 0.8, 0), xend = c(0.8, 1.8, 1.64), yend = c(0.8, 0.2, 0),
lab = sprintf("%.2f%s", koef[c(j_a, j_b, j_c)], bintang(p_jalur[c(j_a, j_b, j_c)])),
lx = c(0.33, 1.67, 1), ly = c(0.6, 0.6, -0.1))
p1 <- ggplot() +
geom_segment(data = pan, aes(x, y, xend = xend, yend = yend), colour = warna$redup, linewidth = 0.9,
arrow = arrow(length = unit(0.14, "inches"), type = "closed")) +
geom_text(data = pan, aes(lx, ly, label = lab), colour = warna$teks, size = 3.4, fontface = "bold") +
geom_tile(data = nd, aes(x, y), width = 0.72, height = 0.38, fill = pal[1:3]) +
geom_text(data = nd, aes(x, y + 0.04, label = lab), colour = warna$panel, fontface = "bold", size = 3.1, lineheight = 0.9) +
geom_text(data = nd, aes(x, y - 0.13, label = r2), colour = warna$panel, size = 2.8) +
annotate("text", x = 1, y = -0.34, label = sprintf("Indirect effect = %.3f [%.3f, %.3f]", ind_est, ind_lo, ind_hi),
colour = warna$teks, size = 3.2) +
coord_cartesian(xlim = c(-0.4, 2.4), ylim = c(-0.42, 1.22)) +
theme_void() + theme(plot.background = element_rect(fill = warna$panel, colour = NA),
plot.title = element_text(face = "bold", colour = warna$teks, margin = margin(4, 0, 4, 6))) +
labs(title = "PLS path model (bootstrap, 400 resamples)")
ld <- s$loadings
dl <- data.frame(butir = rownames(ld), muatan = apply(ld, 1, function(v) v[v != 0][1]))
# nama konstruk pendek (<= 18 huruf): kata sambung dibuang dan kata panjang disingkat bila perlu
singkat <- function(s, w = 18) {
k <- strsplit(s, " ")[[1]]
if (nchar(s) > w) k <- k[!tolower(k) %in% c("of", "to", "the", "and", "for", "in", "on", "with")]
i <- length(k)
while (nchar(paste(k, collapse = " ")) > w && i >= 1) {
if (nchar(k[i]) > 5) k[i] <- paste0(substr(k[i], 1, 4), ".")
i <- i - 1
}
substr(paste(k, collapse = " "), 1, w)
}
nm_k <- make.unique(unname(sapply(c("brand_image", "brand_trust", "brand_loyalty"), singkat)), sep = " ")
dl$konstruk <- rep(nm_k, k)
dl$label <- paste0(dl$konstruk, " #", sub(".*_", "", dl$butir))
dl$label <- factor(dl$label, levels = rev(unique(dl$label)))
dl$konstruk <- factor(dl$konstruk, levels = nm_k)
p2 <- ggplot(dl, aes(muatan, label, fill = konstruk)) +
geom_col(width = 0.7) +
geom_vline(xintercept = 0.7, linetype = "dashed", colour = warna$teks) +
geom_text(aes(label = sprintf("%.2f", muatan)), hjust = -0.15, colour = warna$teks, size = 2.7) +
scale_fill_manual(values = pal[1:3], name = NULL) +
scale_x_continuous(limits = c(0, 1.1), breaks = seq(0, 1, 0.2)) +
labs(title = "Outer loadings (threshold 0.7)", x = "Loading", y = NULL)
dq <- data.frame(konstruk = factor(rep(nm_k, 2), levels = nm_k),
ukuran = rep(c("AVE", "rhoC"), each = 3), nilai = c(ave[c("brand_image", "brand_trust", "brand_loyalty")], rhoc[c("brand_image", "brand_trust", "brand_loyalty")]))
p3 <- ggplot(dq, aes(konstruk, nilai, fill = ukuran)) +
geom_col(position = position_dodge(0.75), width = 0.7) +
geom_hline(yintercept = c(0.5, 0.7), linetype = "dashed", colour = warna$redup) +
scale_fill_manual(values = pal[4:5], name = NULL) +
scale_y_continuous(limits = c(0, 1)) +
labs(title = "Convergent validity and reliability", x = NULL, y = "Value")
p_hasil <- if (tata == 1) p1 / (p2 | p3) + plot_layout(heights = c(1.1, 1)) else (p1 | p2) / p3 + plot_layout(heights = c(1.4, 1))
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.250.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. PLS-SEM (seminr) lazim dipakai pada jenjang ini di bidang Pemasaran dan Perilaku Konsumen. 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.250.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