Skip to contents

Compute factor scores

Usage

compute_fscore(
  y,
  lambda,
  theta,
  psi = NULL,
  nu = NULL,
  alpha = NULL,
  method = c("regression", "Bartlett"),
  center_y = TRUE,
  acov = FALSE,
  fs_matrices = FALSE
)

Arguments

y

An N x p matrix where each row is a response vector. If there is only one observation, it should be a matrix of one row.

lambda

A p x q matrix of factor loadings.

theta

A p x p matrix of unique variance-covariances.

psi

A q x q matrix of latent factor variance-covariances.

nu

A vector of length p of measurement intercepts.

alpha

A vector of length q of latent means.

method

A character string indicating the method for computing factor scores. Currently, only "regression" is supported.

center_y

Logical indicating whether y should be mean-centered. Default to TRUE.

acov

Logical indicating whether the asymptotic covariance matrix of factor scores should be returned as an attribute.

fs_matrices

Logical indicating whether covariances of the error portion of factor scores (fsT), factor score loading matrix (\(L\); fsL) and intercept vector (\(b\); fsb) should be returned. The loading and intercept matrices are the implied loadings and intercepts by the model when using the factor scores as indicators of the latent variables. If TRUE, these matrices will be added as attributes.

Value

An N x p matrix of factor scores.

Examples

library(lavaan)
fit <- cfa(" ind60 =~ x1 + x2 + x3
             dem60 =~ y1 + y2 + y3 + y4 ",
           data = PoliticalDemocracy)
fs_lavaan <- lavPredict(fit, method = "Bartlett")
# Using R2spa::compute_fscore()
est <- lavInspect(fit, what = "est")
fs_hand <- compute_fscore(lavInspect(fit, what = "data"),
                          lambda = est$lambda,
                          theta = est$theta,
                          psi = est$psi,
                          method = "Bartlett")
fs_hand - fs_lavaan  # same scores
#>       ind60 dem60
#>  [1,]     0     0
#>  [2,]     0     0
#>  [3,]     0     0
#>  [4,]     0     0
#>  [5,]     0     0
#>  [6,]     0     0
#>  [7,]     0     0
#>  [8,]     0     0
#>  [9,]     0     0
#> [10,]     0     0
#> [11,]     0     0
#> [12,]     0     0
#> [13,]     0     0
#> [14,]     0     0
#> [15,]     0     0
#> [16,]     0     0
#> [17,]     0     0
#> [18,]     0     0
#> [19,]     0     0
#> [20,]     0     0
#> [21,]     0     0
#> [22,]     0     0
#> [23,]     0     0
#> [24,]     0     0
#> [25,]     0     0
#> [26,]     0     0
#> [27,]     0     0
#> [28,]     0     0
#> [29,]     0     0
#> [30,]     0     0
#> [31,]     0     0
#> [32,]     0     0
#> [33,]     0     0
#> [34,]     0     0
#> [35,]     0     0
#> [36,]     0     0
#> [37,]     0     0
#> [38,]     0     0
#> [39,]     0     0
#> [40,]     0     0
#> [41,]     0     0
#> [42,]     0     0
#> [43,]     0     0
#> [44,]     0     0
#> [45,]     0     0
#> [46,]     0     0
#> [47,]     0     0
#> [48,]     0     0
#> [49,]     0     0
#> [50,]     0     0
#> [51,]     0     0
#> [52,]     0     0
#> [53,]     0     0
#> [54,]     0     0
#> [55,]     0     0
#> [56,]     0     0
#> [57,]     0     0
#> [58,]     0     0
#> [59,]     0     0
#> [60,]     0     0
#> [61,]     0     0
#> [62,]     0     0
#> [63,]     0     0
#> [64,]     0     0
#> [65,]     0     0
#> [66,]     0     0
#> [67,]     0     0
#> [68,]     0     0
#> [69,]     0     0
#> [70,]     0     0
#> [71,]     0     0
#> [72,]     0     0
#> [73,]     0     0
#> [74,]     0     0
#> [75,]     0     0