Pytanie:
Jak wykonać prostą konfirmacyjną analizę czynnikową / SEM w R?
Henrik
2014-01-04 00:25:09 UTC
view on stackexchange narkive permalink

Mam zestaw danych składający się ze 166 obserwacji na 24 zmiennych ( a1 , a2 , a3 , a4 , b1 , ..., b4 , ..., f4 ). Odpowiedzi zostały sporządzone w 6-punktowej skali od 1 do 6:

  d <- read.table ("http://pastebin.com/raw.php?i=m1ZJuKLH") str d) ## 'data.frame': 166 obs. z 24 zmiennych: ## $ a1: int 7 7 7 1 1 7 7 7 7 1 ... ## $ a2: int 7 7 4 7 5 5 1 7 7 4 ... ## $ a3: int 7 7 5 1 1 7 7 3 7 1 ... ## $ a4: int 7 7 6 7 1 7 1 7 7 1 ... ## $ b1: int 1 2 5 7 1 4 1 7 4 2 ... # # [...] ## $ f4: int 6 6 4 1 7 7 7 7 7 1 ...  

Zmienne ze wspólną literą (tj. wszystkie a s, wszystkie b s, ..., wszystkie f s) są tego samego typu.

Chciałbym sprawdzić, czy ukryte czynniki stojące za typami zmiennych są ze sobą skorelowane (lub czy można ustawić korelację na 0). Dodatkową komplikacją jest to, że ukryte zmienne c do f mają wspólną inną ukrytą zmienną (określaną jako c.to.f ) i chcę tylko przetestuj korelację między a , b i c.to.f.

Chciałbym uruchomić czynnik potwierdzający analiza (która zasadniczo jest modelem równań strukturalnych) w R testuje to. Istnieją co najmniej dwa dojrzałe pakiety sem i openMX .
Interesują mnie opinie / kod na temat tego, który pakiet byłby najlepszy, a może najłatwiej określić taki model.


Edycja: chciałbym zaakceptować odpowiedź, która zawiera przykłady kodu.

Czy wypróbowałeś pakiet `sem` Johna Foxa? Jest w stanie zrobić dość okrojony model. Alternatywnie, istnieje pakiet OpenMX, którego nauka jest znacznie bardziej wymagająca.
@Henrik wypróbuj lavaan https://github.com/yrosseel/lavaan, który jest obecnie najbardziej wszechstronnym pakietem SEM dla R. Umożliwia ustalenie / zrównanie współczynników, dzięki czemu można również uwzględnić współczynnik wyższego rzędu. Składnia jest również bardzo intuicyjna.
Jeden odpowiedź:
dmartin
2014-01-04 05:02:19 UTC
view on stackexchange narkive permalink

CFA jest dość łatwe do zrobienia w R z OpenMx, sem lub lavaan. Ponieważ CFA jest takim waniliowym przypadkiem SEM, wszystkie trzy są dość łatwe do wdrożenia i oferują pomocne instrukcje w ich odpowiednich dokumentacjach. Osobiście używam OpenMx lub lavaan. Jedną rzeczą, o której należy pamiętać, jeśli używasz OpenMx, jest to, że domyślnie nie daje on statystyk dopasowania, musisz najpierw określić nasycony model (lub użyć pakietu semTools, aby zrobić to za Ciebie).

Ponieważ OpenMx nie został jeszcze zaktualizowany do wersji R 3 (chyba że kompilujesz ze źródeł), oto przykład zaczerpnięty z przejścia po lavaan. Jest to CFA z trzema zmiennymi latentnymi z trzema wskaźnikami, z kowariancjami wśród wszystkich trzech latentnych. Więcej informacji na temat wykorzystanego zbioru danych można znaleźć w powyższym linku.

  # załaduj żądanie pakietu lavaan (lavaan) # określ model HS.model <- "visual = ~ x1 + x2 + x3 tekstowy = ~ x4 + x5 + x6 speed = ~ x7 + x8 + x9 "# pasuje do pełnego modelu CFA <- cfa (HS.model, data = HolzingerSwineford1939) # pasuje do ortogonalnego modelu CFA modelfitOrth <- cfa (HS.model, data = HolzingerSwineford1939, ortogonal = PRAWDA) modelanova (fit, fitOrth) # wyświetl podsumowanie wyników dla pełnego modelu Summary (fit, fit.measures = TRUE)  

Tutaj widzimy, że model ortogonalny (wszystkie trzy kowariancje ustawione na zero) pasuje znacznie gorsze niż pełne CFA. Dwie rzeczy, o których należy pamiętać przy tym kodzie:

1) W tej specyfikacji ładunki dla x1, x4, x7 są domyślnie ustalone na 1, aby ustawić skalę CFA. Można to zmienić, przenosząc zmienne.

2) Ponownie, domyślnie, odchylenia resztowe są dodawane automatycznie. Można to zmienić, dodając resztowe wagi regresji w składni modelu.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...