Skip to contents

Extract n principal components from the matrix mx using irlba, then rotate the solution using varimax

Usage

varimax_irlba(
  mx,
  n,
  prcomp_fn = irlba::prcomp_irlba,
  prcomp_opts = NULL,
  varimax_fn = stats::varimax,
  varimax_opts = NULL,
  retx = TRUE
)

Arguments

mx

Matrix of interest

n

Number of principal components / varimax factors to return; can take a vector of values

prcomp_fn

Function to use to extract principal components

prcomp_opts

List of options to pass to prcomp_fn

varimax_fn

Function to use for varimax rotation

varimax_opts

List of options to pass to varimax_fn

retx

Whether to return the input matrix mx

Value

A list of class varimaxes, with elements

  • totalvar: Total variance, from PCA

  • sdev: Standard deviations of the extracted principal components

  • x: If retx is TRUE, the input matrix mx

  • rotation: Rotation matrix (variable loadings) from PCA

  • varimaxes: A list of class varimaxes, containing one fitted varimax model for each value of n, with further elements

    • loadings: Varimax-rotated standardized loadings

    • rotmat: Varimax rotation matrix

    • scores: Varimax-rotated observation scores

Examples

# \donttest{
set.seed(42)
theta  = rdirichlet(50, 1, k = 3)
phi    = rdirichlet(3, 0.1, k = 20)
corpus = draw_corpus(rep(50L, 50), theta, phi)
dtm    = tidytext::cast_sparse(corpus, doc, word, n)
varimax_irlba(dtm, n = 3)
#> $totalvar
#> [1] 186.4147
#> 
#> $sdev
#> [1] 10.154387  7.941126  2.711402
#> 
#> $rows
#>  [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11" "12" "13" "14" "15"
#> [16] "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30"
#> [31] "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45"
#> [46] "46" "47" "48" "49" "50"
#> 
#> $cols
#>  [1] "2"  "5"  "8"  "11" "12" "17" "20" "1"  "10" "4"  "16" "18" "7"  "15" "6" 
#> 
#> $center
#>     2     5     8    11    12    17    20     1    10     4    16    18     7 
#>  4.90  0.26 18.66  7.68  1.86  6.36  5.02  2.40  1.98  0.46  0.14  0.18  0.06 
#>    15     6 
#>  0.02  0.02 
#> 
#> $scale
#> [1] FALSE
#> 
#> $x
#> 50 x 15 sparse Matrix of class "dgCMatrix"
#>   [[ suppressing 15 column names ‘2’, ‘5’, ‘8’ ... ]]
#>                                      
#> 1   2 1 19 23 2  2  1 . . . . . . . .
#> 2  16 . 10  . . 11  7 2 4 . . . . . .
#> 3   1 . 20 16 3  5  2 . 2 1 . . . . .
#> 4   6 . 12 11 2 10  3 2 3 1 . . . . .
#> 5   2 . 17 15 3  4  2 5 . 2 . . . . .
#> 6   5 . 11 11 2  4  7 3 6 1 . . . . .
#> 7   2 . 34  2 1  4  1 5 . 1 . . . . .
#> 8   5 .  9 20 4  4  5 1 . 2 . . . . .
#> 9   9 1 18  1 .  7  9 3 2 . . . . . .
#> 10  1 1 14 13 6  8  . 5 . . 1 1 . . .
#> 11  6 1 15  1 .  6 15 1 4 . . . 1 . .
#> 12  1 . 31 11 1  3  . 2 . 1 . . . . .
#> 13  3 . 23  7 2  8  2 3 2 . . . . . .
#> 14  3 . 20 15 2  1  . 4 4 . 1 . . . .
#> 15  4 . 27  2 1  7  2 6 1 . . . . . .
#> 16  5 1 28  . .  6  5 2 2 . 1 . . . .
#> 17  2 . 18 16 8  3  1 2 . . . . . . .
#> 18  4 . 20  5 1  3  8 6 3 . . . . . .
#> 19  6 . 13  . .  7 12 3 7 . . 2 . . .
#> 20  9 1 17  1 . 10 10 . 2 . . . . . .
#> 21  9 .  4  4 2 10 17 . 3 . . 1 . . .
#> 22  6 1 29  4 .  4  . 5 . . . . 1 . .
#> 23  . . 24 16 6  1  1 1 . 1 . . . . .
#> 24  1 1 33  4 2  1  1 6 . 1 . . . . .
#> 25  7 .  5  5 . 14 10 1 6 . 1 . 1 . .
#> 26  6 1 17  3 . 10  7 . 6 . . . . . .
#> 27  3 1 36  . .  6  2 1 1 . . . . . .
#> 28  1 . 19 16 3  5  2 1 . 3 . . . . .
#> 29  8 .  9  2 . 10 13 2 5 . 1 . . . .
#> 30  6 . 27  . .  5  6 4 1 . . 1 . . .
#> 31  1 . 11 25 5  3  1 2 . 2 . . . . .
#> 32  9 . 10  8 2  8 10 1 1 . . 1 . . .
#> 33  5 1 12 14 5  4  2 3 1 2 . 1 . . .
#> 34  2 . 39  . .  2  2 4 . 1 . . . . .
#> 35  3 . 37  . .  2  3 5 . . . . . . .
#> 36  4 . 10  7 3  9 11 2 4 . . . . . .
#> 37  3 . 19  8 2  8  6 . 2 1 1 . . . .
#> 38  6 . 10 18 5  5  4 1 1 . . . . . .
#> 39  4 . 11 16 2  7  4 2 1 1 1 1 . . .
#> 40 14 1  9  2 .  6 10 3 4 . . . . 1 .
#> 41  8 .  7  7 1 18  6 . 3 . . . . . .
#> 42  3 . 34  6 3  3  1 . . . . . . . .
#> 43  2 . 26 14 2  3  1 2 . . . . . . .
#> 44  5 1 25  2 1  5  4 4 2 . . 1 . . .
#> 45 10 . 11  2 . 17  9 1 . . . . . . .
#> 46  7 . 24  3 1  5  3 4 3 . . . . . .
#> 47  6 . 16  1 . 11  8 5 3 . . . . . .
#> 48  5 . 23  8 3  3  3 1 2 1 . . . . 1
#> 49  2 . 10 11 6  9  7 2 2 1 . . . . .
#> 50  7 . 10  8 1 11  5 2 6 . . . . . .
#> 
#> $rotation
#>                 PC1           PC2           PC3
#>  [1,] -0.1761182059 -0.2662541622 -0.0347453066
#>  [2,]  0.0062744364 -0.0102091448  0.0133078668
#>  [3,]  0.8946919236 -0.0856574374 -0.0451636941
#>  [4,] -0.1441409458  0.8368366358  0.0001138277
#>  [5,] -0.0262630077  0.1977968342  0.0232756001
#>  [6,] -0.2439675211 -0.2358486608 -0.8017393256
#>  [7,] -0.2662115885 -0.3304375982  0.5712360162
#>  [8,]  0.0746444645 -0.0301464776  0.0795314250
#>  [9,] -0.1045749959 -0.1167392533  0.1377858179
#> [10,]  0.0019779091  0.0531497675  0.0137886470
#> [11,] -0.0051439905  0.0010452120 -0.0112031179
#> [12,] -0.0082003962 -0.0056034321  0.0340876682
#> [13,] -0.0018329284 -0.0056873524  0.0063875917
#> [14,] -0.0021332671 -0.0027717356  0.0098372711
#> [15,]  0.0009981133  0.0005268048  0.0034997125
#> 
#> $n
#> [1] 3
#> 
#> $varimax
#> $varimax$`3`
#> $varimax$`3`$loadings
#>             [,1]          [,2]          [,3]
#> 2  -1.543494e+00 -1.519224e+00 -1.7283648049
#> 5   6.571852e-02 -8.608355e-02 -0.0143080031
#> 8   6.641125e+00 -3.139326e+00  5.3903500385
#> 11 -6.242402e-01  6.643635e+00  1.3328232630
#> 12 -4.667281e-02  1.561741e+00  0.3179324781
#> 17 -3.419079e+00 -1.534457e+00 -0.5708738590
#> 20 -1.171382e+00 -1.409401e+00 -3.6377716827
#> 1   6.910355e-01 -3.868725e-01  0.2261162142
#> 10 -6.086037e-01 -5.046854e-01 -1.2253537497
#> 4   6.937302e-02  3.988841e-01  0.1265788554
#> 16 -5.848587e-02  1.575057e-02 -0.0071641039
#> 18 -3.881459e-03 -3.016794e-05 -0.1320655380
#> 7  -5.553028e-03 -3.379211e-02 -0.0389026695
#> 15  1.612053e-06 -9.270514e-03 -0.0397392701
#> 6   1.413891e-02  3.131571e-03  0.0007428317
#> 
#> $varimax$`3`$rotmat
#>            [,1]       [,2]       [,3]
#> [1,] 0.74518686 -0.2724038  0.6086811
#> [2,] 0.07016217  0.9397238  0.3346587
#> [3,] 0.66315445  0.2066769 -0.7193823
#> 
#> $varimax$`3`$scores
#>             [,1]        [,2]        [,3]
#> 1   0.4014702826  1.96161454  0.51109747
#> 2  -1.4499729503 -1.20424553 -0.45410837
#> 3   0.0260839173  1.02981145  0.68988311
#> 4  -1.4021662421  0.24256522  0.67327639
#> 5   0.1372938758  1.10345694  0.28127126
#> 6   0.4328891619  0.84973922 -1.39198030
#> 7   0.9615852015 -0.94379276  1.17114669
#> 8  -0.1220185520  1.88898146 -0.59160200
#> 9   0.2212553936 -0.84174835 -0.88505775
#> 10 -1.0762369874  0.75103141  1.16383027
#> 11  1.0526753880 -0.49088357 -2.37193316
#> 12  0.8202189048  0.19393072  1.28404116
#> 13 -0.4152359092 -0.34705225  1.12288963
#> 14  0.7475156973  1.14198405  0.08478722
#> 15  0.0517492396 -0.98274672  1.03067891
#> 16  0.5773347046 -1.16766035  0.31683409
#> 17  0.2324127062  1.35305057  0.42238105
#> 18  1.2831361813 -0.01259053 -1.26030471
#> 19  0.5149512775 -0.63157266 -1.98300194
#> 20 -0.4375624542 -1.04149646 -0.51035484
#> 21 -0.2862608206 -0.10939326 -2.55946022
#> 22  0.4691444281 -0.71306322  1.04061326
#> 23  1.0035422607  1.30641156  0.45863898
#> 24  1.6072248037 -0.39752603  0.58954203
#> 25 -1.7939181960 -0.45186674 -0.57491091
#> 26 -0.6243461886 -0.78416417 -0.06614102
#> 27  0.6574014411 -1.44357643  1.44523685
#> 28 -0.0451209455  1.08347196  0.70287329
#> 29 -0.3784345463 -0.57454084 -1.68428696
#> 30  0.8645408591 -1.06085215 -0.12426603
#> 31 -0.1577667303  2.50859519  0.23592421
#> 32 -0.3897296308  0.16213173 -1.10967611
#> 33 -0.2021437342  1.15223250 -0.11715326
#> 34  1.7564058594 -1.18734272  0.88753552
#> 35  1.7628548695 -1.13682764  0.55293121
#> 36 -0.2690457887  0.15819227 -1.21754134
#> 37 -0.2378929763 -0.04228513  0.23080548
#> 38 -0.3964277010  1.53290782 -0.27031529
#> 39 -0.7041751160  1.11511552  0.11189972
#> 40  0.0000789906 -0.45425520 -1.94722424
#> 41 -3.1420341023 -0.69924440  1.22915873
#> 42  1.0249841504 -0.43711148  1.16877688
#> 43  0.6364846266  0.69129009  0.86169846
#> 44  0.5739114053 -0.74859865  0.12961814
#> 45 -2.4463666514 -1.32959877  0.71134819
#> 46  0.3657761414 -0.68085847  0.21614615
#> 47 -0.7259982408 -1.01894397 -0.11729096
#> 48  0.6928067772  0.15344697  0.03639876
#> 49 -0.7326116991  0.66830099 -0.26432392
#> 50 -1.4402623823 -0.11442370  0.13967019
#> 
#> 
#> 
#> attr(,"class")
#> [1] "varimaxes" "list"     
# }