2010-11-10 3 views
11

При выполнении анализа факторов с использованием factanal обычным результатом является некоторая таблица нагрузок плюс несколько других данных. Есть ли прямой способ использовать эти нагрузки для создания матрицы/data.frame факторов? Например, чтобы использовать их в регрессионном анализе позже.Как создать факторы из factanal?

EDIT: целью этого является получение переменных для последующего моделирования. Я знаю только оценки факторов - но предложения/указатели на другую терминологию приветствуются :)

EDIT2: Ответ Joris Meys в основном - это то, о чем я просил. Тем не менее, хотя он поднимает мой вопрос в направлении, которое может быть лучше подходит для statsoverflow, но сейчас я его сохраню, потому что правильная группа людей обсуждает решение:

Какая польза от регрессии основанные баллы? Результат продукта (ML) сильно коррелирует с факторами ... Честно говоря, я удивляюсь, почему разница в том, что большая в моем случае?

fa$scores # the correct solution 
fac <- m1 %*% loadings(fa) # the answer on your question 
diag(cor(fac,fa$scores)) 
#returns: 
Factor1 Factor2 Factor3 
0.8309343 0.8272019 0.8070837 

ответ

21

Вы спросили, как использовать нагрузки для построения баллов. Ваше решение, хотя и верно, не делает этого. Он использует метод регрессии (в качестве альтернативы вы также можете использовать метод Бартлетта), и это использует ограничение, что баллы некоррелированы, с центром в 0 и с дисперсией = 1. Это, следовательно, не те же факторы, что и при использовании F = ML с F фактор-матрица, M - исходная матрица, L - матрица нагружения.

Демонстрация на примере из файлов справки:

v1 <- c(1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,4,5,6) 
v2 <- c(1,2,1,1,1,1,2,1,2,1,3,4,3,3,3,4,6,5) 
v3 <- c(3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,5,4,6) 
v4 <- c(3,3,4,3,3,1,1,2,1,1,1,1,2,1,1,5,6,4) 
v5 <- c(1,1,1,1,1,3,3,3,3,3,1,1,1,1,1,6,4,5) 
v6 <- c(1,1,1,2,1,3,3,3,4,3,1,1,1,2,1,6,5,4) 
m1 <- cbind(v1,v2,v3,v4,v5,v6) 

fa <- factanal(m1, factors=3,scores="regression") 

fa$scores # the correct solution 

fac <- m1 %*% loadings(fa) # the answer on your question 

Это явно разные значения.

Редактировать: Это связано с тем, что оценки регрессии Thomson основаны на масштабированных переменных и учитывают матрицу корреляции. Если бы подсчитать баллы вручную, вы могли бы сделать:

> fac2 <- scale(m1) %*% solve(cor(m1)) %*% loadings(fa) 
> all.equal(fa$scores,as.matrix(fac2)) 
[1] TRUE 

Для получения дополнительной информации см this review

И чтобы показать вам, почему это важно: Если подсчитать баллы «наивный» путь , ваши оценки фактически коррелируют. И это то, чего вы хотели бы избавиться в первую очередь:

> round(cor(fac),2) 
     Factor1 Factor2 Factor3 
Factor1 1.00 0.79 0.81 
Factor2 0.79 1.00 0.82 
Factor3 0.81 0.82 1.00 

> round(cor(fac2),2) 
     Factor1 Factor2 Factor3 
Factor1  1  0  0 
Factor2  0  1  0 
Factor3  0  0  1 
+0

Да, это то, о чем я просил. Является ли стандартизация единственным преимуществом этих оценок, созданных регрессией? Вычисление матрицы ML дает довольно сильно коррелированные переменные (см. Редактирование моего вопроса). –

+3

@ ran2: Нет, эти оценки имеют немного больше математики за ними, что редко объясняется в файле справки factanal. Более подробный обзор можно найти в этой статье: http://www.psy.ed.ac.uk/people/iand/Bartholomew%20%282009%29%20Br%20J%20Math%20Stat%20Psychol%20factor%20scores % 20Thomson% 20Spearman% 20Bartlett.pdf –

+2

acc. Тх за урок, мужик! –

3

Я не проверял его вручную, но here's способ сделать это:

fa <- factanal(mydf,3,rotation="varimax",scores="regression") 
fa$scores 

НТН кто-то другой. Предложения, исправления, улучшения приветствуются!

+5

с использованием всплеска promax нарушает предположение о несоответствующих показателях. Хотя интерпретация «проще», структура данных сильно изменилась. Нужно быть очень осторожным, используя неортогональное вращение. –

+0

Thx! очень ценный ввод. Я просто перепутал это, я только пытался, интерпретация не улучшилась.Я просто проверил надежность моей интерпретации и разместил неверную строку. –

2

Вам не нужен компонент loadings?

loadings(fa) 

См ?loadings и ?factanal, чтобы проверить, что это нагрузки, которые вы хотите. Я нахожу, что используемая терминология так запутанна порой, что с нагрузками, оценками, ...

+0

Действительно, это сбивает с толку. но то, что вы предлагаете, эквивалентно загрузкам fa $, которые похожи на «корреляцию» с коэффициентом. То, что я хочу, является фактором на основе наблюдения. –

+0

Я имел в виду 'mydf% *% загрузок (fa)' это то, что, как я думал, вы хотели ... И я вижу, что Джорис предложил такую ​​вещь в своем ответе. –

+0

Извините, Гэвин - иногда мне просто нужна дополнительная помощь. Я понял, что вы имели в виду с первого взгляда. Thx to Joris и ваш комментарий это понятно, и это ответ на мой вопрос :) –

Смежные вопросы