ISforPCAwithSparseWeights: Index of sparseness (IS) for sparse weight based PCA methods

Description Usage Arguments Value Examples

View source: R/ISforPCAwithSparseWeights.R

Description

A function that returns the IS given a set of tuning parameters and a sparse weight based PCA method

Usage

1

Arguments

X

A data matrix of class matrix

ncomp

An integer specifying the number of components

FUN

A pointer to a function (i.e. the function name with no brackets) that performs sparse weight based PCA. it should return a list containing a matrix object called W that contains the component weights

...

specify all the arguments the function in FUN needs

Value

The following items in a list
IS The IS given the tuning parameters
nNonZeroCoef The number of non-zero coefficients in the model

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 

J  <- 10
ncomp <- 3
X <- matrix(rnorm(100 * J), 100, J)

ISforPCAwithSparseWeights(X = X, ncom = ncomp, FUN = scads, ncomp, ridge = 0, lasso = rep(0.1, ncomp),
                constraints = matrix(1, J, ncomp), Wstart = matrix(0, J, ncomp),
                itr = 100000, nStarts = 1, printLoss = FALSE, tol = 10^-5)


#Extended example: select LASSO parameter using ISforPCAwithSparseWeights with scads()
#create sammple data
ncomp <- 3 
J <- 30
comdis <- matrix(1, J, ncomp)
comdis <- sparsify(comdis, 0.7) #set 70 percent of the 1's to zero
variances <- makeVariance(varianceOfComps = c(100, 80, 90), J = J, error = 0.05) #create realistic eigenvalues
dat <- makeDat(n = 100, comdis = comdis, variances = variances)
X <- dat$X


#Use cross-validation to look for the data generating structure 
lasso <- seq(0, 1, length.out = 500)
IS <- rep(NA, length(lasso))
nNonZeroCoef <- rep(NA, length(lasso))
for (i in 1:length(lasso)) {
    print(i)
    res <- ISforPCAwithSparseWeights(X = X, ncomp = ncomp, FUN = scads, ncomp, ridge = 0, lasso = rep(lasso[i], ncomp),
                    constraints = matrix(1, J, ncomp), Wstart = matrix(0, J, ncomp),
                    itr = 100000, nStarts = 1, printLoss = FALSE, tol = 10^-5)
    IS[i]  <- res$IS #store IS for each lasso
}

#make a plot of all the IS's choose the maximal IS or a model that is less sparse around the maximal IS
#IS tends to select very sparse models
x <- 1:length(IS)
plot(x, IS)

#select the maximal IS (alternative select a model that is around the maximum, but results in less non-zero weights)
best <- which.max(IS)
best

#Do the analysis with the "winning" structure
results <- scads(X = X, ncomp = ncomp, ridge = 0, lasso = rep(lasso[best], ncomp),
                constraints = matrix(1, J, ncomp), Wstart = matrix(0, J, ncomp),
                itr = 100000, nStarts = 1, printLoss = TRUE , tol = 10^-8)

results$W #inspect results of the estimation
dat$P[, 1:ncomp] #inspect data generating model

trbKnl/sparseWeightBasedPCA documentation built on July 22, 2020, 10:29 p.m.