-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPCA.lambda
More file actions
17 lines (17 loc) · 1.04 KB
/
PCA.lambda
File metadata and controls
17 lines (17 loc) · 1.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
=LAMBDA( array, [warmstart], [tolerance], [centralityCheck], LET
( nCols, COLUMNS(array)
, warmstart_, IF(ISOMITTED(warmstart), MUNIT(nCols), warmstart)
, tolerance_, IF(ISOMITTED(tolerance), 0.0000001, tolerance)
, cCheck_, IF(ISOMITTED(centralityCheck), 0.0000001, centralityCheck)
, worstAvg, MAX(BYCOL(array, LAMBDA(col, AVERAGE(col))))
, IF(AND(TYPE(cCheck_) = 1, cCheck_ >= 0, worstAvg >= cCheck_), (--""), LET
( covMatrix, MAKEARRAY(nCols, nCols, LAMBDA(iRow, iCol, COVARIANCE.P(INDEX(array, 0, iRow), INDEX(array, 0, iCol))))
, system, VSTACK(MMULT(warmstart_, MMULT(covMatrix, TRANSPOSE(warmstart_))), TRANSPOSE(warmstart_))
, fullResult, PCA_INTERNAL(system, tolerance_)
, varVector, INDEX(fullResult, SEQUENCE(nCols), SEQUENCE(nCols))
, idx, SORTBY(SEQUENCE(nCols), varVector, -1)
, uncoeffs, INDEX(fullResult, SEQUENCE(nCols, 1, nCols + 1), SEQUENCE(1, nCols))
, MAKEARRAY(nCols, nCols, LAMBDA(iRow, iCol, INDEX(uncoeffs, INDEX(idx, iRow, 1), iCol)))
))
)
)