Zalecana procedura analizy czynnikowej danych dychotomicznych z R

10

Muszę przeprowadzić analizę czynnikową dla zestawu danych złożonego ze zmiennych dychotomicznych (0 = tak, 1 = nie) i nie wiem, czy jestem na dobrej drodze.

Za pomocą tetrachoric()tworzę macierz korelacji, na której działam fa(data,factors=1). Wynik jest bardzo zbliżony do wyników, które otrzymuję podczas korzystania z MixFactor , ale to nie to samo.

  1. Czy to w porządku, czy poleciłbyś inną procedurę?
  2. Dlaczego fa()działa i factanal()powoduje błąd? ( Fehler in solve.default(cv) : System ist für den Rechner singulär: reziproke Konditionszahl = 4.22612e-18)
cada
źródło
1
Nie mówię po niemiecku, ale wygląda na to, że błąd wynika z tego, że macierz tetrachoryczna jest pojedyncza (nieodwracalna). Nawet przy dobrej wielkości próbce niektóre szacunki polichorycznych macierzy korelacji mogą nie być prawidłowymi macierzami korelacji. Mam przeczucie, że fa () używa głównych komponentów, a factanal () ma maksymalne prawdopodobieństwo FA, ale nie jest to dla mnie oczywiste z dokumentacji fa ().
JMS
@cada Ile masz przedmiotów / przedmiotów? Jaka metoda jest zaimplementowana w MixFactor?
chl
1
@cada dlaczego przeprowadzasz analizę czynnikową? Jeśli chcesz oszacować zdolność uczestnika, IRT może być lepszym podejściem. w kwestiach fa kontra factanal fa domyślnie używa minimalnej pozostałości, podczas gdy factanal stosuje metodę ML.
richiemorrisroe
@chl: zdecydowanie za mało! Właśnie rozpocząłem ankietę i do tej pory jest tylko 45 tematów. Nie mogę zbierać nowych danych w tej chwili i dlatego staram się zrobić jak najwięcej kodu r ...
cada
1
@cada AFA z 45 przedmiotami byłaby surrealistyczna :-) Postaram się później dodać moje przemyślenia.
chl

Odpowiedzi:

12

Podsumowując, przy n = 45 osobach pozostaje ci podejście oparte na korelacji i wielowymiarowe. Ponieważ jednak kwestionariusz ma być jednowymiarowy, zawsze jest to dobry początek.

Co bym zrobił:

  • Oblicz korelacje par dla swoich 22 pozycji; zgłoś zakres i medianę - da to wskazanie względnej spójności odpowiedzi zaobserwowanych pozycji (korelacje powyżej 0,3 są ogólnie uważane za wskazujące na dobrą zbieżną trafność, ale oczywiście dokładność tego oszacowania zależy od wielkości próby) ; alternatywnym sposobem badania wewnętrznej spójności kwestionariusza byłoby obliczenie alfa Cronbacha , chociaż przy n = 45 związany z tym przedział ufności (do tego użyj bootstrap) będzie stosunkowo duży.
  • Obliczyć korelację punktowo-biserialną między pozycjami a zsumowanym wynikiem skali; da ci wyobrażenie o mocy dyskryminacyjnej każdego elementu (np. ładunki w FA), gdzie wartości powyżej 0,3 wskazują na zadowalający związek między każdym przedmiotem a odpowiadającą mu skalą.
  • Użyj PCA, aby podsumować macierz korelacji (daje to interpretację równoważną do tego, co można by uzyskać z analizy wielokrotnej korespondencji w przypadku pozycji dychotomicznie punktowanych). Jeśli twój instrument zachowuje się jak jednowymiarowa skala dla twojej próbki, powinieneś obserwować dominującą oś zmienności (odzwierciedloną w pierwszej wartości własnej).

Jeśli chcesz użyć R, znajdziesz w lm użyteczną funkcję2)(1-r2))/(n)

chl
źródło
Dziękuję Ci bardzo! Twoja odpowiedź jest tak szczegółowa i naprawdę bardzo pomocna! Dziękuję Ci!
cada
3

Wątek ten ma dobrą pozycję Google pod kątem błędu „System ist für den Rechner singulär: reziproke Konditionszahl” przy użyciu factanal (w języku angielskim: „system jest obliczeniowy w liczbie pojedynczej: numer warunku wzajemnego”) - dlatego dodam komentarz:

Kiedy macierz korelacji jest obliczana a priori (np. W celu parowego usunięcia brakujących wartości), upewnij się, że factanal () nie uważa, że ​​macierz jest danymi do analizy (https://stat.ethz.ch/pipermail/r- help / 2007-October / 142567.html).

PREVIOUS: matrix = cor(data, use="pairwise.complete.obs")  # For example
WRONG: factanal(matrix, 3, rotation="varimax")
RIGHT: factanal(covmat=matrix, factors=3, rotation="varimax")

BurninLeo

BurninLeo
źródło