Построение более чем 2 факторов - PullRequest
2 голосов
/ 27 июля 2011

Предположим, я провел факторный анализ и получил 5 соответствующих факторов. Теперь я хочу графически представить нагрузку этих факторов на переменные. Может кто-нибудь, пожалуйста, скажите мне, как это сделать. Я могу сделать, используя 2 фактора. Но не может сделать, когда число факторов больше 2.

Двухфакторный график приведен в разделе «Современная прикладная статистика с S», рис. 11.13. Я хочу создать аналогичный график, но с более чем 2 факторами. Пожалуйста, найдите снимок с рисом, упомянутым выше: enter image description here

Оси X и Y являются двумя факторами.

С уважением, Ари

Ответы [ 3 ]

2 голосов
/ 28 июля 2011

Похоже, есть пакет для этого: http://factominer.free.fr/advanced-methods/multiple-factor-analysis.html

Поставляется с примером кода и несколькими факторами. Загрузите пакет FactoMineR и поиграйте.

Хороший обзор здесь: http://factominer.free.fr/docs/article_FactoMineR.pdf

График с их веб-страницы: FactoMineR graph


Вы также можете посмотреть на объект факторного анализа и посмотреть, не можете ли вы извлечь значения и построить их вручную, используя ggplot2 или базовую графику.

2 голосов
/ 28 июля 2011

Как упоминает Дароциг, каждый набор факторных нагрузок получает свое собственное измерение. Таким образом, построение графиков в пяти измерениях не только сложно, но и часто нежелательно.

Тем не менее, вы можете использовать матрицу диаграммы рассеяния для отображения каждой пары факторных нагрузок. Используя пример, который вы привели из Venables & Ripley:

#Reproducing factor analysis from Venables & Ripley
#Note I'm only doing three factors, not five
data(ability.cov)
ability.FA <- factanal(covmat = ability.cov,factor = 3, rotation = "promax")
load <- loadings(ability.FA)
rot <- ability.FA$rot

#Pairs of factor loadings to plot
ind <- combn(1:3,2)
par(mfrow = c(2,2))
nms <- row.names(load)
#Loop over pairs of factors and draw each plot
for (i in 1:3){
    eqscplot(load[,ind[1,i]],load[,ind[2,i]],xlim = c(-1,1),
        ylim = c(-0.5,1.5),type = "n",
        xlab = paste("Factor",as.character(ind[1,i])),
        ylab = paste("Factor",as.character(ind[2,i])))
    text(load[,ind[1,i]],load[,ind[2,i]],labels = nms)

    arrows(c(0,0),c(0,0),rot[ind[,i],ind[,i]][,1],
        rot[ind[,i],ind[,i]][,2],length = 0.1)
}

, что для меня приводит к следующему сюжету:

enter image description here

Обратите внимание, что мне пришлось немного поиграть с ограничениями x и y, а также с другими остальными битами. Ваши данные будут другими и потребуют различных корректировок. Кроме того, построение каждой пары факторных нагрузок с пятью факторами приведет к довольно загруженному набору диаграмм рассеяния.

2 голосов
/ 28 июля 2011

Осторожно : это не тот ответ, который вы ищете, и, возможно, он неправильный, это моя субъективная мысль.

Я думаю, что вы столкнулись с проблемой создания эскизов нескольких измерений на двухразмерный экран / бумага.Я бы сказал, что нет смысла отображать больше факторов или нагрузок ПК, но если вы действительно настаиваете: отобразите первые два (на основе собственных значений) или создайте только 2 фактора.Или вы могли бы уменьшить размерность и другими методами (например, MDS).

Отображение загрузок 3-х факторов в 3-мерном графике было бы едва ли ясным, если не думать о других факторах.


ОБНОВЛЕНИЕ : мне приснилось, что я пытаюсь быть более онтопическим:)

Вы можете легко показать проекции каждого pairs факторов, на которые @joran указал (я нездесь речь идет о ротации):

f <- factanal(mtcars, factors=3)
pairs(f$loadings)

enter image description here

Таким образом, вы можете показать еще больше факторов и сможете изменить сюжет, например:

f <- factanal(mtcars, factors=5)
pairs(f$loadings, col=1:ncol(mtcars), upper.panel=NULL, main="Factor loadings")
par(xpd=TRUE) 
legend('topright', bty='n', pch='o', col=1:ncol(mtcars), attr(f$loadings, 'dimnames')[[1]], title="Variables")

enter image description here

Конечно, вы также можете добавить векторы вращения, также настроив нижний треугольник или отобразив его в верхнем и добавив условные обозначения справа / снизу и т. Д.

Или просто укажите переменные на трехмерной диаграмме рассеяния, если у вас есть не более 3 факторов:

library(scatterplot3d)
f <- factanal(mtcars, factors=3)
scatterplot3d(as.data.frame(unclass(f$loadings)), main="3D factor loadings", color=1:ncol(mtcars), pch=20)

enter image description here

Примечание: имена переменных не следует наносить на графики как метки,но может пойти к другой легенде, по моему скромному мнению,союзник с 3D-графиками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...