Получение кадра данных из загрузок факторного анализа (функция fa в психике)

У меня есть кадр данных, например:

x <- c(1, 2, 1, 2)
y <- c(1, 2, 3, 4)
z <- c(4, 3, 2, 1)
df <- data.frame(x, y, z)

Я запускаю факторный анализ с функцией fa из пакета psych:

fit <- fa(df, nfactors = 2)
fit$loadings

Это приводит к следующему результату:

Loadings:
  MR1    MR2   
x  0.448       
y  0.999       
z -0.999       

                 MR1   MR2
SS loadings    2.195 0.000
Proportion Var 0.732 0.000
Cumulative Var 0.732 0.732

Я хотел бы сохранить таблицу с MR1 и MR2 в качестве фрейма данных. Кто-нибудь знает, как это можно сделать? Спасибо.


person Marco Pastor Mayo    schedule 10.11.2018    source источник


Ответы (1)


x <- c(1, 2, 1, 2)
y <- c(1, 2, 3, 4)
z <- c(4, 3, 2, 1)
df <- data.frame(x, y, z)

fit <- psych::fa(df, nfactors = 2)

x <- fit$loadings

через stats:::print.loadings:

Lambda <- unclass(x)
p <- nrow(Lambda)
factors <- ncol(Lambda)

vx <- colSums(x^2)
varex <- rbind(`SS loadings` = vx)

if (is.null(attr(x, "covariance"))) {
  varex <- rbind(varex, `Proportion Var` = vx/p)
  if (factors > 1) 
    varex <- rbind(varex, `Cumulative Var` = cumsum(vx/p))
}

tibble::rownames_to_column(as.data.frame(varex), "x")
##                x       MR1          MR2
## 1    SS loadings 2.1954555 3.000000e-30
## 2 Proportion Var 0.7318185 1.000000e-30
## 3 Cumulative Var 0.7318185 7.318185e-01

И для первой таблицы:

cutoff <- 0.1 # (the default for the `print.loadings()` function)
Lambda <- unclass(x)
p <- nrow(Lambda)
fx <- setNames(Lambda, NULL)
fx[abs(Lambda) < cutoff] <- NA_real_
fx <- as.data.frame(fx)
rownames(fx) <- NULL
fx
##          MR1 MR2
## 1  0.4476761  NA
## 2  0.9987596  NA
## 3 -0.9987596  NA
person hrbrmstr    schedule 10.11.2018
comment
Это хорошо работает. Извините, что я недостаточно конкретен: я хотел бы превратить первую таблицу во фрейм данных (ту, что с MR1, MR2, x, y, z). Можно ли это сделать таким образом, чтобы не требовалось перечислять все переменные из исходного фрейма данных df (x, y, z)? - person Marco Pastor Mayo; 10.11.2018
comment
обновлено, чтобы учесть потребность в первой таблице и использование NA против пробелов для другого столбца. - person hrbrmstr; 10.11.2018