Metodolog.pl · praktyczna baza wiedzy

PLS-SEM w R: kompletny przykład w seminr i cSEM

Odtwarzalny przykład PLS-SEM w R: specyfikacja refleksyjna i kompozytowa, PLSc, bootstrap, HTMT, R², f² i ocena predykcyjna w seminr oraz cSEM.

Strona główna / Blog / PLS-SEM w R: kompletny przykład w seminr i cSEM
Kod jest częścią metody, nie dowodem jej poprawności. Przed uruchomieniem przykładu określ kierunek pomiaru, nazwij analizę główną, sprawdź dane i zapisz wersje pakietów. Poniższe wyniki trzeba odtworzyć na własnej bazie — nie wolno przeklejać fikcyjnych liczb.

Schemat przykładu

Model zakłada, że postrzegana jakość wpływa na wartość i satysfakcję, a wartość dodatkowo wpływa na satysfakcję. Wszystkie trzy konstrukty w pierwszym wariancie są wspólnymi czynnikami refleksyjnymi. W seminr używamy więc reflective(), a nie composite(..., mode_A); dokumentacja pakietu wskazuje, że konstrukcja reflective() jest estymowana za pomocą consistent PLS. W cSEM wspólny czynnik oznaczamy operatorem =~, a kompozyt operatorem <~.

Wariant 1: seminr

R
library(seminr)
data(mobi, package = "seminr")

# W przykładzie trzy konstrukty są wspólnymi czynnikami refleksyjnymi.
# reflective() uruchamia w seminr estymację consistent PLS (PLSc).
mm <- constructs(
  reflective("Jakosc", multi_items("PERQ", 1:7)),
  reflective("Wartosc", multi_items("PERV", 1:2)),
  reflective("Satysfakcja", multi_items("CUSA", 1:3))
)
sm <- relationships(
  paths(from = "Jakosc", to = c("Wartosc", "Satysfakcja")),
  paths(from = "Wartosc", to = "Satysfakcja")
)
fit_plsc <- estimate_pls(
  data = mobi,
  measurement_model = mm,
  structural_model = sm,
  inner_weights = path_weighting,
  assess_syntax = TRUE
)
summary(fit_plsc)

set.seed(2026)
boot <- bootstrap_model(fit_plsc, nboot = 5000, cores = 1, seed = 2026)
summary(boot)
rho_A(fit_plsc, fit_plsc$constructs)
rhoC_AVE(fit_plsc)
boot$HTMT_descriptives

# Ocenę predykcyjną wykonuj poza próbą używaną do dopasowania.
pred <- predict_pls(fit_plsc, technique = predict_DA, noFolds = 10, cores = 1)
pred

Po estymacji najpierw sprawdź zbieżność, liczbę obserwacji wykorzystanych w analizie i diagnostykę modelu pomiarowego. Bootstrap służy do wyznaczania empirycznej niepewności, ale nie naprawia błędnej specyfikacji ani zależnych obserwacji. Liczba 5000 replikacji jest rozsądnym punktem startowym do raportu; przy wyniku granicznym warto sprawdzić stabilność przedziałów.

Wariant 2: cSEM

R
library(cSEM)
data("satisfaction", package = "cSEM")

# =~ oznacza common factor; <~ oznacza composite.
model <- "
  Image       =~ imag1 + imag2 + imag3
  Expectation =~ expe1 + expe2 + expe3
  Satisfaction =~ sat1 + sat2 + sat3
  Satisfaction ~ Image + Expectation
"

set.seed(2026)
fit <- csem(
  .data = satisfaction,
  .model = model,
  .approach_weights = "PLS-PM",
  .disattenuate = TRUE,
  .resample_method = "bootstrap",
  .R = 4999,
  .seed = 2026
)

summarize(fit)
assess(fit, .quality_criterion = c(
  "rho_C", "rho_C_weighted_mm", "ave", "htmt", "vif", "r2", "f2"
))

# Dla konstruktu kompozytowego zmień wyłącznie uzasadnioną teorią linię, np.:
# IndeksCyfrowy <~ dostep + umiejetnosci + czestosc
# Wtedy oceniaj wagi, ich niepewność, współliniowość i trafność treściową.

.disattenuate = TRUE włącza korektę osłabienia, gdy model zawiera wspólne czynniki. Nie jest to opcja, którą zaznacza się mechanicznie dla kompozytów. Wyniki assess() trzeba filtrować zgodnie z typem konstruktu: AVE i ρ odnoszą się do refleksyjnego pomiaru, natomiast dla kompozytu kluczowe są wagi, ich CI, VIF oraz dowody trafności treściowej i nomologicznej.

Jak przygotować własne dane?

  1. Zachowaj niezmieniony eksport źródłowy i utwórz skrypt czyszczenia.
  2. Sprawdź zakres każdej pozycji, braki, pozycje odwrócone i kolumny o zerowej wariancji.
  3. Ustal, czy odpowiedzi porządkowe można sensownie traktować jako przybliżenie ciągłe; dla nielicznych kategorii rozważ metody przeznaczone do danych porządkowych.
  4. Oddziel próbę do rozwoju modelu od próby walidacyjnej albo zastosuj uczciwą walidację krzyżową.
  5. Zapisz sessionInfo(), ziarno losowania, wersję danych i pełny skrypt.

Jak czytać wynik po kolei?

Zestawienie informacji omawianych w tej sekcji
KrokWspólny czynnikKompozyt
1Ładunki i ich przedziały; błędy Heywooda lub niestabilność.Znaki i rozmiary wag, bootstrap CI.
2ρA, ρC, AVE oraz zgodność modelu.VIF i kompletność pokrycia definicji.
3HTMT/korelacje czynników oraz porównanie alternatywnych modeli.Trafność nomologiczna i — jeśli dostępna — redundancyjna.
4Ścieżki z CI, R², f², efekty pośrednie, stabilność i predykcja poza próbą.

Przykład pełnej interpretacji APA 7

Model PLSc oszacowano w R 4.x przy użyciu pakietu seminr 2.5.0. Analizą objęto N = 412 kompletnych obserwacji, a niepewność parametrów oceniono na podstawie 5000 prób bootstrapowych. Dla czynnika satysfakcji ładunki wyniosły .71–.86, ρA = .84, ρC = .87 i AVE = .63. HTMT dla jakości i satysfakcji wyniósł .79, 95% bootstrap CI [.73, .84]. Jakość przewidywała wartość, β = .51, 95% CI [.42, .59], oraz satysfakcję, β = .29, 95% CI [.18, .40]. Model wyjaśniał 46% wariancji satysfakcji. W dziesięciokrotnej walidacji krzyżowej uzyskał niższy błąd niż benchmark liniowy dla dwóch z trzech wskaźników, dlatego dowody predykcyjne oceniono jako częściowe, a nie jednoznaczne.

Dlaczego dwa pakiety mogą zwrócić inne liczby?

Różnica nie musi oznaczać błędu. Najpierw porównaj, czy oba modele wykorzystują identyczne obserwacje, kodowanie braków, standaryzację i znaki pozycji. Następnie sprawdź, czy konstrukt w jednym pakiecie jest wspólnym czynnikiem, a w drugim kompozytem Mode A. Różnić mogą się schemat wag wewnętrznych, korekta znaku, tolerancja zbieżności, sposób disattenuation oraz domyślna obsługa przypadków niedopuszczalnych. Dopiero po ujednoliceniu tych elementów ma sens porównanie ścieżek.

Najlepszą diagnostyką jest mały model testowy. Zacznij od jednego predyktora i jednego wyniku, porównaj macierz korelacji, wagi i wyniki konstruktów, a potem dodawaj elementy. Taki proces często ujawnia, że różnica pochodzi z pojedynczej pozycji odwróconej albo z tego, że w jednym modelu zastosowano PLSc, a w drugim klasyczny PLS.

Bootstrap: co zapisać i jak sprawdzić stabilność?

Zapisz liczbę replikacji, sposób losowania, ziarno oraz metodę konstruowania przedziałów. Przy małej próbie rozkład bootstrapowy może być nieregularny, a część replikacji może prowadzić do niedopuszczalnych rozwiązań. Nie wolno po cichu zmieniać opcji, aż przedział przestanie obejmować zero. Sprawdź, czy zwiększenie liczby replikacji z 2000 do 5000 albo 10 000 nie zmienia wniosku oraz ile prób zostało odrzuconych.

Dla wag kompozytu warto oglądać cały rozkład i stabilność znaku. Dla HTMT przedział powinien odpowiadać jawnie określonej hipotezie o rozróżnialności konstruktu, ale nie zastępuje porównania teoretycznego. Dla efektu pośredniego używaj przedziału iloczynu ścieżek, ponieważ jego rozkład zwykle nie jest symetryczny.

Proponowana struktura projektu R

projekt-sem/
├── data-raw/ — niezmieniony eksport
├── data/ — baza analityczna bez identyfikatorów
├── R/01-clean.R — czyszczenie i kodowanie
├── R/02-model.R — specyfikacja konstruktów i ścieżek
├── R/03-estimate.R — estymacja, bootstrap i diagnostyka
├── R/04-report.R — tabele i wykresy
├── output/ — wyniki generowane automatycznie
└── README.md — wersje, źródła danych i instrukcja uruchomienia

Skrypt czyszczenia nie powinien nadpisywać surowego pliku. Tabele do pracy najlepiej generować z obiektów wynikowych, aby poprawa danych lub modelu nie wymagała ręcznego przepisywania liczb. Po zakończeniu zapisz sessionInfo() i — jeśli projekt ma być odtwarzany po latach — migawkę zależności za pomocą narzędzia takiego jak renv.

Kontrola reprodukowalności

  • Kod rozróżnia reflective()/=~ od kompozytu.
  • Raport podaje obsługę braków i faktyczne N.
  • Bootstrap ma zapisane ziarno i liczbę replikacji.
  • Wersje R, seminr i cSEM są zarchiwizowane.
  • Predykcja jest oceniona na niewykorzystanych danych.
  • Wyniki pakietów porównuje się dopiero po ujednoliceniu specyfikacji, skalowania i ustawień.

Definicje, zalecenia interpretacyjne i sposób raportowania oparto na literaturze metodologicznej wskazanej w bibliografii (Dijkstra i Henseler, 2015).

Planujesz artykuł lub projekt naukowy?

Możemy przygotować plan analityczny, reprodukowalny kod, modele, raport publication-ready i odpowiedź na uwagi recenzentów.

Analizy statystyczne dla badaczyOmów projekt

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Ray, S., Danks, N. P., & Calero Valdez, A. (2026). seminr: Building and estimating structural equation models (Version 2.5.0) [R package]. https://cran.r-project.org/package=seminr
  2. Rademaker, M. E., & Schuberth, F. (2020). cSEM: Composite-based structural equation modeling (Version 0.6.1) [R package]. https://floschuberth.github.io/cSEM/
  3. Dijkstra, T. K., & Henseler, J. (2015). Consistent partial least squares path modeling. MIS Quarterly, 39(2), 297–316. https://doi.org/10.25300/MISQ/2015/39.2.02
  4. Schuberth, F., Henseler, J., & Dijkstra, T. K. (2018). Confirmatory composite analysis. Frontiers in Psychology, 9, 2541. https://doi.org/10.3389/fpsyg.2018.02541
  5. Henseler, J., Ringle, C. M., & Sarstedt, M. (2015). A new criterion for assessing discriminant validity in variance-based structural equation modeling. Journal of the Academy of Marketing Science, 43, 115–135. https://doi.org/10.1007/s11747-014-0403-8
  6. Rönkkö, M., & Cho, E. (2022). An updated guideline for assessing discriminant validity. Organizational Research Methods, 25(1), 6–14. https://doi.org/10.1177/1094428120968614
  7. Liengaard, B. D., Sharma, P. N., Hult, G. T. M., Jensen, M. B., Sarstedt, M., Hair, J. F., & Ringle, C. M. (2021). Prediction: Coveted, yet forsaken? Introducing a cross-validated predictive ability test in partial least squares path modeling. Decision Sciences, 52(2), 362–392. https://doi.org/10.1111/deci.12329
  8. Schuberth, F., Henseler, J., & Dijkstra, T. K. (2018). Partial least squares path modeling using ordinal categorical indicators. Quality & Quantity, 52, 9–35. https://doi.org/10.1007/s11135-016-0401-7
  9. Appelbaum, M., Cooper, H., Kline, R. B., Mayo-Wilson, E., Nezu, A. M., & Rao, S. M. (2018). Journal article reporting standards for quantitative research in psychology: The APA Publications and Communications Board task force report. American Psychologist, 73(1), 3–25. https://doi.org/10.1037/amp0000191
  10. Wilkinson, L., & Task Force on Statistical Inference. (1999). Statistical methods in psychology journals: Guidelines and explanations. American Psychologist, 54(8), 594–604. https://doi.org/10.1037/0003-066X.54.8.594

Cytowania BibTeX

@manual{ray2026seminr, author={Ray, Soumya and Danks, Nicholas Patrick and Calero Valdez, André}, title={seminr: Building and Estimating Structural Equation Models}, year={2026}, note={R package version 2.5.0}, url={https://cran.r-project.org/package=seminr}}
@manual{rademaker2020csem, author={Rademaker, Manuel E. and Schuberth, Florian}, title={cSEM: Composite-Based Structural Equation Modeling}, year={2020}, note={R package version 0.6.1}, url={https://floschuberth.github.io/cSEM/}}
@article{dijkstra2015plsc, author={Dijkstra, Theo K. and Henseler, Jörg}, title={Consistent Partial Least Squares Path Modeling}, journal={MIS Quarterly}, year={2015}, volume={39}, number={2}, pages={297--316}, doi={10.25300/MISQ/2015/39.2.02}}
@article{schuberth2018cca, author={Schuberth, Florian and Henseler, Jörg and Dijkstra, Theo K.}, title={Confirmatory Composite Analysis}, journal={Frontiers in Psychology}, year={2018}, volume={9}, pages={2541}, doi={10.3389/fpsyg.2018.02541}}
@article{henseler2015htmt, author={Henseler, Jörg and Ringle, Christian M. and Sarstedt, Marko}, title={A New Criterion for Assessing Discriminant Validity in Variance-Based Structural Equation Modeling}, journal={Journal of the Academy of Marketing Science}, year={2015}, volume={43}, pages={115--135}, doi={10.1007/s11747-014-0403-8}}
@article{ronkko2022discriminant, author={Rönkkö, Mikko and Cho, Eunseong}, title={An Updated Guideline for Assessing Discriminant Validity}, journal={Organizational Research Methods}, year={2022}, volume={25}, number={1}, pages={6--14}, doi={10.1177/1094428120968614}}
@article{liengaard2021cvpat, author={Liengaard, Benjamin D. and Sharma, Pratyush N. and Hult, G. Tomas M. and Jensen, Martin B. and Sarstedt, Marko and Hair, Joseph F. and Ringle, Christian M.}, title={Prediction: Coveted, Yet Forsaken? Introducing a Cross-Validated Predictive Ability Test in Partial Least Squares Path Modeling}, journal={Decision Sciences}, year={2021}, volume={52}, number={2}, pages={362--392}, doi={10.1111/deci.12329}}
@article{schuberth2018ordinal, author={Schuberth, Florian and Henseler, Jörg and Dijkstra, Theo K.}, title={Partial Least Squares Path Modeling Using Ordinal Categorical Indicators}, journal={Quality and Quantity}, year={2018}, volume={52}, pages={9--35}, doi={10.1007/s11135-016-0401-7}}
@article{appelbaum2018jars, author={Appelbaum, Mark and Cooper, Harris and Kline, Rex B. and Mayo-Wilson, Evan and Nezu, Arthur M. and Rao, Stephen M.}, title={Journal article reporting standards for quantitative research in psychology}, journal={American Psychologist}, year={2018}, volume={73}, number={1}, pages={3--25}, doi={10.1037/amp0000191}}
@article{wilkinson1999statistical, author={Wilkinson, Leland and {Task Force on Statistical Inference}}, title={Statistical methods in psychology journals: Guidelines and explanations}, journal={American Psychologist}, year={1999}, volume={54}, number={8}, pages={594--604}, doi={10.1037/0003-066X.54.8.594}}
R