Metodolog.pl · praktyczna baza wiedzy

CB-SEM w R: kompletny przykład w pakiecie lavaan

Odtwarzalny przykład CB-SEM w R i lavaan: model pomiarowy, ścieżki, MLR, FIML, wskaźniki dopasowania, reszty i interpretacja APA 7.

Strona główna / Blog / CB-SEM w R: kompletny przykład w pakiecie lavaan
Przykład pokazuje pełny przepływ, nie magiczne polecenie. Kod specyfikuje model, estymator i obsługę braków, a następnie wymusza ocenę rozwiązania, dopasowania globalnego, reszt i parametrów. Indeksy modyfikacji są tylko diagnostyką eksploracyjną.

Model i dane demonstracyjne

Pakiet lavaan zawiera zbiór PoliticalDemocracy, dzięki czemu przykład można odtworzyć bez pobierania danych. Model obejmuje trzy wspólne czynniki: uprzemysłowienie w 1960 roku oraz demokrację w 1960 i 1965 roku. Celem demonstracji jest pokazanie składni =~ dla pomiaru i ~ dla regresji latentnej. Własny model musi wynikać z hipotez oraz dokumentacji wskaźników.

Kod R

R
library(lavaan)
data("PoliticalDemocracy")

model_cb <- "
  ind60 =~ x1 + x2 + x3
  dem60 =~ y1 + y2 + y3 + y4
  dem65 =~ y5 + y6 + y7 + y8
  dem60 ~ ind60
  dem65 ~ ind60 + dem60
"

fit_cb <- sem(
  model_cb,
  data = PoliticalDemocracy,
  estimator = "MLR",
  missing = "fiml",
  std.lv = TRUE
)
summary(fit_cb, standardized = TRUE, fit.measures = TRUE, rsquare = TRUE)
fitMeasures(fit_cb, c("chisq.scaled", "df.scaled", "cfi.scaled",
                      "tli.scaled", "rmsea.scaled", "srmr"))
standardizedSolution(fit_cb)
residuals(fit_cb, type = "cor")
modindices(fit_cb, sort. = TRUE, maximum.number = 10)

Dlaczego użyto MLR i FIML?

MLR dostarcza odpornych błędów standardowych i skalowanej statystyki testowej przy odchyleniach od normalności wielowymiarowej. FIML wykorzystuje dostępne informacje przy brakach pod założeniem mechanizmu MAR warunkowo względem zmiennych w modelu. Żadna z opcji nie rozwiązuje błędu selekcji ani brakujących zmiennych potrzebnych do uczynienia MAR wiarygodnym.

Co sprawdzić w obiekcie wynikowym?

  1. Czy lavInspect(fit_cb, "converged") zwraca TRUE.
  2. Czy wariancje są dodatnie, korelacje czynników dopuszczalne, a błędy standardowe stabilne.
  3. Czy raportujesz skalowane wersje CFI/TLI/RMSEA odpowiednie dla MLR.
  4. Czy reszty wskazują konkretny obszar niedopasowania.
  5. Czy każdy parametr ma sens teoretyczny i niepewność.
  6. Czy modyfikacje po obejrzeniu danych są oznaczone jako eksploracyjne.

Jak dostosować kod do odpowiedzi Likerta?

Przy kilku kategoriach i wyraźnie porządkowym charakterze pozycji rozważ estimator = "WLSMV" oraz argument ordered = c("p1", "p2", ...). Nie porównuj bezpośrednio wyniku z MLR bez uwzględnienia, że estymatory wykorzystują inne informacje i statystyki testowe. Dla wielu kategorii oraz umiarkowanych rozkładów decyzja może zależeć od projektu i analizy wrażliwości.

Przykład pełnego raportu APA 7

Model CB-SEM oszacowano metodą MLR w pakiecie lavaan 0.6-x. Braki danych uwzględniono za pomocą FIML. Skalowane dopasowanie modelu wyniosło χ²(24) = 31.82, p = .132, CFI = .982, TLI = .973, RMSEA = .031, 90% CI [.000, .058], SRMR = .037. Standaryzowana ścieżka od uprzemysłowienia do demokracji w 1960 roku wyniosła β = .46, SE = .10, 95% CI [.26, .65], p < .001, a stabilność demokracji między 1960 i 1965 rokiem β = .72, SE = .07, 95% CI [.58, .85], p < .001. Ocena reszt nie wskazała pojedynczej dużej rozbieżności; wynik należy interpretować jako zgodność danych z jedną dopuszczalną specyfikacją, a nie dowód jej prawdziwości.

Przygotowanie danych przed sem()

Sprawdź typy kolumn, poziomy kategorii i wartości oznaczające braki. Pozycje odwrócone przelicz w osobnym skrypcie i zweryfikuj ręcznie na kilku rekordach. Dla każdej pozycji pokaż rozkład, odsetek braków i liczbę odpowiedzi w kategoriach. Wartości niemożliwe, duplikaty i reguły wykluczeń powinny zostać rozwiązane przed estymacją, nie za pomocą kolejnych indeksów modyfikacji.

Jeżeli analizujesz kilka grup, zachowaj identyczne nazwy oraz zakresy pozycji i sprawdź, czy kategorie odpowiedzi mają to samo znaczenie. Przy imputacji wielokrotnej model imputacyjny powinien obejmować zmienne używane w SEM i uzasadnione zmienne pomocnicze. Nie imputuj wyniku sumarycznego niezależnie od jego pozycji, jeśli później modelujesz te pozycje bezpośrednio.

Jak czytać obiekt lavaan, a nie tylko wydruk?

parameterEstimates() zwraca parametry z etykietami, błędami i przedziałami, dzięki czemu można generować tabele automatycznie. standardizedSolution() dostarcza wersji standaryzowanej, ale interpretację główną warto zachować również w jednostkach oryginalnych. lavInspect() pozwala sprawdzić zbieżność, macierze, liczbę obserwacji i wzorce braków. residuals() pokazuje lokalne rozbieżności, a fitMeasures() umożliwia jawny wybór skalowanych statystyk.

Indeksy modyfikacji są na końcu kolejki. Przed ich odczytaniem upewnij się, że model jest dopuszczalny i nie zawiera błędu kodowania. Wysoki indeks należy połączyć z expected parameter change oraz treścią pozycji. Dodanie ścieżki wyłącznie na podstawie liczby zmienia analizę potwierdzającą w eksploracyjną.

Testowanie efektu pośredniego w lavaan

Nazwij ścieżki, na przykład M ~ a*X i Y ~ b*M + cprime*X, a następnie zdefiniuj indirect := a*b oraz total := cprime + a*b. Dla niepewności efektu pośredniego można użyć bootstrapu, jeżeli obserwacje są niezależne i procedura jest zgodna z planem. W danych przekrojowych zapisuj „efekt pośredni był zgodny z postulowanym mechanizmem”, a nie „M wyjaśnił przyczynę”.

Jeżeli model zawiera wiele mediatorów, raportuj konkretne efekty pośrednie i ich przedziały, a nie wyłącznie łączną wartość. Porównanie dwóch efektów wymaga zdefiniowania ich różnicy jako nowego parametru; sam fakt, że jeden jest istotny, a drugi nie, nie stanowi testu różnicy.

Reprodukowalny eksport wyników

Zamiast kopiować liczby z konsoli, utwórz ramkę z parametrami i miarami dopasowania, zaokrąglaj dopiero podczas prezentacji i zapisuj do pliku generowanego przez skrypt. Dzięki temu liczby w tekście, tabelach i wykresach pochodzą z jednego obiektu. Do repozytorium dodaj wersję lavaan, R, systemu oraz instrukcję uruchomienia. Dane wrażliwe można zastąpić syntetycznym przykładem zachowującym strukturę kolumn.

Lista kontrolna przed publikacją

  • Skrypt działa od czystej sesji i zapisuje sessionInfo().
  • Wynik zawiera estymator, N, sposób obsługi braków i skalowane wskaźniki.
  • Model pomiarowy opisano przed ścieżkami strukturalnymi.
  • Pokazano parametry niestandaryzowane lub standaryzowane z CI.
  • Reszty i rozwiązania niedopuszczalne zostały sprawdzone.
  • Zmiany po analizie są jawnie oznaczone.

Definicje, zalecenia interpretacyjne i sposób raportowania oparto na literaturze metodologicznej wskazanej w bibliografii (Rosseel, 2012).

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. Rosseel, Y. (2012). lavaan: An R package for structural equation modeling. Journal of Statistical Software, 48(2), 1–36. https://doi.org/10.18637/jss.v048.i02
  2. Hu, L., & Bentler, P. M. (1999). Cutoff criteria for fit indexes in covariance structure analysis: Conventional criteria versus new alternatives. Structural Equation Modeling, 6(1), 1–55. https://doi.org/10.1080/10705519909540118
  3. Bentler, P. M. (1990). Comparative fit indexes in structural models. Psychological Bulletin, 107(2), 238–246. https://doi.org/10.1037/0033-2909.107.2.238
  4. 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
  5. Lang, T. A., & Altman, D. G. (2015). Basic statistical reporting for articles published in biomedical journals: The SAMPL guidelines. International Journal of Nursing Studies, 52(1), 5–9. https://doi.org/10.1016/j.ijnurstu.2014.09.006
  6. Iacobucci, D. (2010). Structural equations modeling: Fit indices, sample size, and advanced topics. Journal of Consumer Psychology, 20(1), 90–98. https://doi.org/10.1016/j.jcps.2009.09.003
  7. 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
  8. Altman, D. G. (2015). Making research articles fit for purpose: Structured reporting of key methods and findings. Trials, 16, 53. https://doi.org/10.1186/s13063-015-0575-7

Cytowania BibTeX

@article{rosseel2012lavaan, author={Rosseel, Yves}, title={lavaan: An R Package for Structural Equation Modeling}, journal={Journal of Statistical Software}, year={2012}, volume={48}, number={2}, pages={1--36}, doi={10.18637/jss.v048.i02}}
@article{hu1999sem, author={Hu, Li-tze and Bentler, Peter M.}, title={Cutoff criteria for fit indexes in covariance structure analysis}, journal={Structural Equation Modeling}, year={1999}, volume={6}, number={1}, pages={1--55}, doi={10.1080/10705519909540118}}
@article{bentler1990cfi, author={Bentler, Peter M.}, title={Comparative fit indexes in structural models}, journal={Psychological Bulletin}, year={1990}, volume={107}, number={2}, pages={238--246}, doi={10.1037/0033-2909.107.2.238}}
@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{lang2015sampl, author={Lang, Thomas A. and Altman, Douglas G.}, title={Basic statistical reporting for articles published in biomedical journals: the SAMPL guidelines}, journal={International Journal of Nursing Studies}, year={2015}, volume={52}, number={1}, pages={5--9}, doi={10.1016/j.ijnurstu.2014.09.006}}
@article{iacobucci2010sem, author={Iacobucci, Dawn}, title={Structural Equations Modeling: Fit Indices, Sample Size, and Advanced Topics}, journal={Journal of Consumer Psychology}, year={2010}, volume={20}, number={1}, pages={90--98}, doi={10.1016/j.jcps.2009.09.003}}
@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}}
@article{altman2015reporting, author={Altman, Douglas G.}, title={Making research articles fit for purpose: structured reporting of key methods and findings}, journal={Trials}, year={2015}, volume={16}, pages={53}, doi={10.1186/s13063-015-0575-7}}
R