R Under development (unstable) (2024-07-28 r86931 ucrt) -- "Unsuffered Consequences" Copyright (C) 2024 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > require(CLA) Loading required package: CLA > > source(system.file("xtraR", "platform-sessionInfo.R", # <<- ../inst/xtraR/platform-sessionInfo.R + package = "CLA", mustWork=TRUE)) # moreSessionInfo(), withAutoprint() .. > mS <- moreSessionInfo(print. = TRUE) List of 5 $ sizeof.long : int 4 $ sizeof.longlong : int 8 $ sizeof.longdouble: int 16 $ sizeof.pointer : int 8 $ sizeof.time_t : int 8 64 bit platform type 'windows' ==> onWindows: TRUE arch: x86-64 osVersion (0): Windows Server 2022 x64 (build 20348) osVersion: 'Windows Server 2022 x64 (build 20348)' + BLAS "is" Lapack: TRUE | BLAS=OpenBLAS: FALSE | Lapack=OpenBLAS: FALSE strictR: FALSE > > data(muS.sp500)# not 500, but 476 assets <--> ../man/muS.sp500.Rd <<< > > if(requireNamespace("FRAPO")) { + data(SP500, package = "FRAPO") + print(dim(SP500)) # 265 * 476 + } Loading required namespace: FRAPO [1] 265 476 > > (n <- length(muS.sp500$mu)) # 476 [1] 476 > system.time(# ~ 9 sec (64-bit); 13.8 sec (32-b florence); seen 27.44 sec on Winb.32 + CLs5c.0.120 <- CLA(muS.sp500$mu, muS.sp500$covar, lB=0, uB=1/20) + ) user system elapsed 12.39 5.14 17.57 Warning message: In CLA(muS.sp500$mu, muS.sp500$covar, lB = 0, uB = 1/20) : covariance matrix 'covar' has negative eigenvalues > CLs5c.0.120 # -> print() method Call: CLA(mu = muS.sp500$mu, covar = muS.sp500$covar, lB = 0, uB = 1/20) Critical Line Algorithm for n = 476 assets, resulting in 161 turning points Overview of result parts: List of 5 $ weights_set : num [1:476, 1:161] 0 0 0.05 0 0 0 0 0 0 0 ... $ free_indices:List of 161 $ gammas : num [1:161] -0.0845 -0.0845 -0.0134 -0.013 -0.0126 ... $ lambdas : num [1:161] 10.5 10.5 1.83 1.78 1.72 ... $ emptyLambdas: list() > ws <- CLs5c.0.120$weights_set > table(rowSums(ws) > 0) FALSE TRUE 397 79 > ## FALSE TRUE > ## 397 79 == we check below that indeed 79 assets have some non-0 wts > > > uncall <- function(x) `$<-`(x, call, NULL) > > doExtras <- TRUE # for experiments, not normally > doExtras <- FALSE > > if(doExtras) { + system.time({ + tols <- 10^-c(1,3,5:9,11,14) + names(tols) <- paste0("10^", round(log10(tols))) + CLs5c.ls <- lapply(tols, function(tol) + CLA(muS.sp500$mu, muS.sp500$covar, lB=0, uB=1/20, tol.lambda = tol)) + }) # 78.101 elapsed [nb-mm4] ; 46.108 [lynne 2018-10] + + identical(uncall(CLs5c.ls[["10^-7"]]), uncall(CLs5c.0.120)) + for(i in seq_along(tols)[-1]) { + cat("--=--=--=--=--\n", (n1 <- names(tols[i-1])), " vs. ", (n2 <- names(tols[i])), ": ") + ae <- all.equal(uncall(CLs5c.ls[[i-1]]), + uncall(CLs5c.ls[[ i ]])) + if(isTRUE(ae)) cat(" are all.equal()\n") + else { + CLA.i. <- uncall(CLs5c.ls[[i-1]]) ; wgt <- CLA.i.$weights_set + cat("are different [all.equal()]: dim(..[[",n1,"]]$weights_set) =", + dim(wgt)[1],"x", dim(wgt)[2],"\n") + } + } + } > ## 2018-10 lynne, 64b Fedora 28 > ## 10^-1 vs. 10^-3 : are different [all.equal()]: dim(..[[ 10^-1 ]]$weights_set) = 476 x 47 > ## 10^-3 vs. 10^-5 : are different [all.equal()]: dim(..[[ 10^-3 ]]$weights_set) = 476 x 156 > ## 10^-5 vs. 10^-6 : are all.equal() > ## ................ " " " > > op <- options(width = max(500, getOption("width"))) # then it actually fits > > ## Mostly keep the 79 assets with non-zero weights: > ## ---> wts.non0 { 79 x 161 } matrix > if(require(Matrix)) withAutoprint(local = FALSE, { + ## visualize how weights change "along turning points" + spWts <- Matrix(CLs5c.0.120$weights_set, sparse=TRUE) + image(spWts, xlab = "turning point", ylab = "asset number") + ## + dim(spWts.non0 <- spWts[rowSums(spWts) > 0 , ]) + round(1000 * spWts.non0) ##-> e.g. ./Solaris_wts_non0.txt ==> readWn0() + ## ~~~~~~~~~~~~~~~~~ + image(spWts.non0, xlab = "turning point", ylab = "asset number") + wts.non0 <- as(spWts.non0, "matrix") + }) else { + warning("'Matrix' package not available -- should not happen!") + wts.non0 <- CLs5c.0.120$weights_set[rowSums(CLs5c.0.120$weights_set) > 0 , ] + if(is.null(colnames(wts.non0))) ## empty column names for nice printing: + colnames(wts.non0) <- rep("", ncol(wts.non0)) + print.table(round(1000 * wts.non0), zero.print=".") + } Loading required package: Matrix > spWts <- Matrix(CLs5c.0.120$weights_set, sparse = TRUE) > image(spWts, xlab = "turning point", ylab = "asset number") > dim(spWts.non0 <- spWts[rowSums(spWts) > 0, ]) [1] 79 161 > round(1000 * spWts.non0) 79 x 161 sparse Matrix of class "dgCMatrix" AAPL 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 47 46 44 44 42 42 39 36 35 34 33 32 31 26 24 23 21 21 21 21 18 16 16 13 12 10 10 10 8 7 6 6 6 5 5 4 2 . . . . . . . . . . . . . . . . . . . . . . . . . . ADSK . . . . . . 0 0 0 49 50 50 50 50 50 50 50 47 47 41 41 48 49 49 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 49 48 46 45 45 43 39 38 38 37 36 36 35 30 29 24 23 19 16 14 13 13 13 12 12 12 11 10 7 7 5 5 5 4 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AET . . . 0 8 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 49 43 41 40 38 38 38 38 35 33 33 32 31 29 29 29 27 26 26 25 25 25 25 23 21 19 18 17 17 15 13 12 12 11 11 10 10 4 1 0 . . . . . . . . . . . AMGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 0 4 ATI 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 44 43 41 37 36 25 24 19 18 18 15 11 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AYE . . . . . . . . . . . . 0 3 7 3 3 1 3 9 10 38 42 42 45 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 49 48 48 48 48 48 47 43 42 38 37 31 26 22 21 21 20 18 18 17 14 13 5 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AZO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 2 2 3 3 4 5 5 5 5 5 6 6 7 7 7 7 8 8 8 8 8 8 8 8 8 6 BAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 16 18 24 24 25 27 30 34 36 38 39 40 41 43 45 46 46 48 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 49 49 49 49 49 48 48 48 47 46 46 46 45 43 43 42 42 42 42 42 42 41 BCR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 2 3 4 4 5 5 6 7 7 7 7 7 7 6 6 6 5 5 5 5 4 4 4 4 4 4 4 4 4 2 1 1 1 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . BDX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 3 6 7 8 8 8 8 8 9 9 9 9 9 8 8 8 8 8 8 8 8 9 10 10 11 11 14 14 15 15 15 15 15 15 16 BIIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 5 11 14 14 16 19 19 20 23 24 26 26 28 28 30 30 30 31 33 33 33 33 33 32 32 31 31 31 31 30 27 26 24 24 24 23 22 21 20 19 19 18 18 18 18 18 18 18 18 18 18 18 18 18 18 19 19 19 19 19 19 20 20 20 20 21 21 22 22 23 23 23 23 23 24 25 25 26 26 26 27 27 27 27 27 27 27 27 27 27 26 26 25 25 25 24 24 23 23 23 23 22 22 20 19 18 18 18 15 15 15 15 15 14 14 14 12 BNI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 10 10 18 23 34 37 38 42 48 49 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 48 45 43 43 40 37 37 37 36 36 35 35 35 35 33 33 31 30 29 28 27 26 25 25 22 21 20 19 18 18 17 13 11 10 9 8 8 8 5 3 3 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . BRL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 0 2 4 4 4 4 5 6 6 9 10 11 11 11 13 13 14 14 14 14 14 15 15 BTU 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 31 12 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . BUD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 1 1 4 4 4 9 CCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 2 3 7 9 10 11 12 12 12 14 16 16 18 19 21 21 21 22 22 23 23 23 23 23 24 25 26 26 26 27 27 28 29 29 29 29 29 29 30 30 31 31 31 31 31 31 31 31 31 31 31 32 CELG 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 49 49 46 46 43 43 42 41 40 40 39 38 36 34 34 32 31 31 30 24 22 21 19 18 18 18 14 11 11 8 7 5 4 4 3 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 7 11 11 19 21 24 25 30 33 40 42 42 44 48 49 49 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 49 48 42 40 37 36 35 34 32 29 27 26 20 16 16 15 14 14 12 12 11 11 8 7 4 4 2 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 4 11 22 28 29 40 48 49 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 CLX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 3 4 6 19 24 27 31 33 33 33 40 45 45 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 CME 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 47 47 45 43 43 41 35 32 31 29 29 29 28 25 22 22 20 18 16 16 16 14 12 11 11 11 11 10 9 7 5 4 3 3 2 . . . . . . . . . . . . . . . . . . . . . CNX 50 50 50 50 50 50 50 50 50 50 49 49 42 39 32 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . COST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 3 3 4 4 5 5 5 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 5 5 5 5 5 4 4 4 4 CTL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 1 1 1 3 CVS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 7 14 17 17 19 27 27 29 33 33 38 39 41 41 41 42 43 44 44 44 44 44 44 45 45 45 45 44 43 43 43 43 43 42 42 42 42 40 40 38 38 37 37 36 36 35 35 34 33 33 32 32 32 32 33 33 33 33 33 33 33 35 35 35 36 36 37 37 37 37 36 36 36 36 36 36 35 34 32 31 31 31 29 27 27 27 27 26 25 25 17 14 13 12 11 5 4 3 3 3 1 0 . . DF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 0 1 2 2 2 2 2 2 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 DGX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 2 2 3 4 7 10 11 12 12 14 16 17 17 17 18 19 19 25 28 29 29 30 35 35 36 36 36 37 38 38 40 DVN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 1 1 1 0 . . . 0 1 1 1 1 1 1 1 1 1 ED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 0 1 2 7 12 20 23 25 25 30 37 39 39 39 40 41 41 47 49 50 50 50 50 50 50 50 50 50 50 50 50 EIX . . . . . . . . . . . . . . 0 37 40 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 47 45 43 43 42 41 38 37 36 36 36 34 30 25 18 16 13 13 8 2 . . . . . . . . . . . . . . . . . . . . ESRX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 1 2 3 5 5 6 8 9 10 10 14 15 16 16 16 17 17 17 17 17 17 16 16 16 16 15 15 15 13 12 12 12 11 11 10 9 9 8 7 5 5 5 5 5 3 3 3 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FCX 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 47 47 40 31 27 26 24 21 21 20 12 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 0 2 6 7 9 10 14 18 22 24 24 26 32 32 33 36 36 39 39 40 40 40 39 38 34 33 31 31 31 30 29 26 24 23 21 19 19 19 19 19 18 18 18 18 16 16 15 15 13 13 11 11 9 9 7 4 4 3 1 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . GILD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 18 21 23 23 22 21 19 19 20 20 21 21 21 20 20 19 19 19 19 19 19 18 17 15 14 12 11 9 9 9 8 8 8 8 6 6 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . HAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 0 1 2 4 7 8 8 8 10 11 12 12 12 12 13 13 14 14 14 14 14 15 15 15 15 15 15 15 15 14 HES 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 37 33 33 33 32 32 32 26 26 25 17 13 11 10 7 6 3 3 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . HST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 3 14 14 28 39 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 47 46 46 46 45 43 43 35 30 29 28 27 19 19 18 17 17 14 14 14 8 HUM . . . . . . . . . . . . . . . . . . . . . 0 8 8 17 28 30 37 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 49 49 49 49 46 44 40 40 34 29 25 24 24 24 23 23 22 21 20 16 15 13 13 13 12 11 9 8 7 7 6 6 5 4 3 3 2 1 1 1 1 1 0 0 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . INTU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 4 5 5 5 9 12 12 15 17 19 19 20 21 23 24 24 24 24 24 25 26 28 28 28 28 29 30 30 30 30 30 31 31 34 35 35 35 36 38 38 39 39 39 40 40 40 40 JNJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 7 8 8 9 9 12 16 21 22 24 24 27 30 31 31 32 32 33 33 38 41 42 42 43 50 50 50 50 50 50 50 50 50 K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 5 6 9 10 17 22 23 26 29 29 31 40 44 47 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 LH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 9 9 15 20 21 21 22 22 24 24 25 25 28 28 30 30 30 31 31 31 31 31 33 34 34 35 35 36 36 40 41 42 43 43 43 43 45 46 46 46 47 47 47 47 47 47 47 46 46 46 46 45 44 42 41 40 40 39 37 37 37 37 36 36 36 31 29 29 28 28 24 23 23 23 23 22 22 22 20 LLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 10 26 28 34 34 35 37 40 43 44 46 47 47 47 47 46 45 45 46 47 47 46 46 46 44 44 44 44 42 42 42 42 42 42 42 42 42 41 42 44 44 45 46 46 46 49 49 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 49 48 47 46 46 46 45 43 43 43 42 42 41 41 37 35 34 34 33 28 27 27 26 26 25 24 24 21 LMT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 4 7 13 19 23 24 33 40 41 41 42 42 44 44 45 45 47 47 48 48 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 LUK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 4 4 5 5 8 9 9 10 10 11 15 16 17 18 18 21 22 23 23 23 23 23 22 21 20 20 19 19 20 19 19 19 21 22 22 22 22 22 22 22 21 21 20 20 19 19 19 18 18 17 17 17 16 15 15 14 14 13 13 10 8 8 7 6 6 6 4 3 3 1 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 2 2 2 1 1 2 2 1 1 0 0 2 4 4 4 5 5 6 6 6 6 7 7 7 8 9 9 10 10 11 11 12 12 12 12 11 11 11 9 9 8 8 8 8 8 6 5 5 4 4 4 4 4 3 2 2 1 1 1 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . MDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 5 8 8 11 13 16 17 18 20 21 22 22 22 23 23 24 25 27 27 28 28 29 30 31 31 31 31 32 32 35 37 37 37 38 41 41 41 41 42 42 42 42 42 MMC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 1 1 2 3 3 5 MON 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 48 47 39 36 30 30 26 24 18 17 17 14 10 9 9 8 6 6 5 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MRO 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 46 45 41 41 38 38 36 36 34 34 31 30 30 28 27 27 27 23 22 21 20 20 20 20 17 15 15 13 12 11 11 10 9 8 7 7 7 7 7 5 3 1 . . . . . . . . . . . . . . . . . . . . . . . . . MTW 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 35 23 14 11 10 9 5 5 4 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MUR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 3 8 8 9 9 9 9 9 6 5 4 4 4 3 3 2 2 2 4 7 7 7 8 8 9 9 9 9 12 12 14 14 15 16 17 17 17 17 19 20 20 21 21 21 21 21 21 21 21 21 21 21 21 20 20 20 21 21 21 21 21 22 22 22 22 22 22 23 23 24 24 24 24 24 24 23 23 23 23 22 22 19 17 16 16 15 11 10 10 9 9 8 8 8 6 NEM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 0 3 6 6 8 10 12 12 12 14 15 16 16 17 17 17 18 19 21 22 22 22 23 24 25 25 25 25 26 26 27 28 29 29 29 31 31 31 32 32 32 32 32 34 NOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 2 5 6 12 12 15 15 25 27 34 35 40 41 46 47 49 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 NUE 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 49 27 19 19 12 5 3 3 0 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . NVDA 50 50 50 50 50 50 50 50 50 1 1 1 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PBG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 0 3 3 4 4 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 8 8 8 8 8 9 9 9 10 11 12 12 12 12 12 12 12 12 12 12 12 12 13 13 13 13 14 15 15 15 15 15 15 15 15 14 14 14 14 13 13 12 12 12 12 12 12 9 PCP 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 49 40 32 31 29 27 27 23 23 21 21 14 13 8 8 5 4 2 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PDCO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 PEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 3 3 14 16 24 24 29 30 32 33 34 34 37 41 41 43 44 44 45 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 PG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 28 37 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 RAI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 14 17 27 28 41 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 49 44 42 40 38 38 38 38 34 32 32 30 29 28 28 28 27 26 25 25 25 25 25 24 22 20 20 19 19 18 17 17 17 17 17 16 16 13 12 11 11 11 9 8 8 8 8 7 7 7 7 RIG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 3 8 9 10 12 15 16 16 17 18 18 18 19 19 19 19 18 18 18 18 18 19 22 22 23 24 24 25 25 24 25 25 25 25 27 27 27 27 27 26 26 25 24 24 26 27 27 27 27 27 28 28 28 28 30 30 31 31 31 31 32 32 32 32 33 32 32 32 32 32 32 32 32 32 32 32 32 32 31 30 30 28 28 26 26 26 25 24 24 24 24 24 23 22 20 18 18 17 17 15 13 13 13 12 12 12 12 9 8 7 7 7 4 4 4 3 3 3 2 2 2 RRC 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 42 36 35 34 33 32 29 29 27 27 23 22 17 17 13 12 10 9 8 7 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RTN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 1 4 7 13 15 16 17 17 16 16 16 15 15 16 17 17 17 16 16 16 16 16 16 16 16 16 16 16 16 16 15 15 15 15 15 15 16 17 17 18 21 22 23 23 24 24 24 25 26 26 28 29 29 30 30 30 29 29 29 29 29 29 29 29 29 29 29 30 30 31 31 31 31 31 31 31 31 31 31 31 31 30 29 29 29 29 28 28 28 27 SII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 1 1 2 2 3 3 3 3 3 4 4 4 4 4 3 3 2 2 2 2 1 1 1 1 1 1 . . . . . . . . . . . . . . . . SSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 7 10 11 12 12 20 21 21 22 22 23 23 23 25 SYK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 1 2 4 4 7 7 8 8 8 9 9 7 7 5 4 4 3 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SYMC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 1 1 1 1 3 3 3 4 4 4 4 4 5 TEX 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 44 32 31 30 17 11 9 8 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . TIE 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 48 44 43 42 39 39 32 32 29 29 28 27 25 21 19 16 15 13 12 9 6 3 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . TSO 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 49 45 45 43 41 41 36 36 34 33 33 32 30 27 26 23 23 21 20 18 16 15 14 13 12 12 11 11 11 10 10 10 10 10 9 9 9 9 9 8 8 8 8 7 7 7 6 6 6 5 3 2 1 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . TYC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 1 1 2 3 3 4 5 5 5 7 8 8 9 9 9 9 10 11 11 12 13 14 14 14 14 15 15 15 15 15 16 16 16 17 17 17 17 18 18 18 18 18 18 19 19 20 21 21 21 21 23 23 23 23 23 23 23 23 23 UST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 28 36 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 49 46 WAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 0 2 2 6 9 10 10 11 15 16 16 17 17 18 18 18 18 WFR 50 50 50 47 42 . 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . WMT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 0 3 3 3 7 X 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 39 35 25 25 18 13 3 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XTO . . 0 3 . . . . . . . 0 7 9 11 7 7 2 . . . . . 0 11 24 26 34 42 43 43 48 48 49 48 44 42 38 38 37 35 30 30 30 29 29 29 29 29 29 29 28 26 25 24 23 18 12 8 7 7 7 6 6 6 5 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 3 3 5 6 8 8 9 10 12 14 14 14 14 14 14 14 14 14 14 14 14 14 13 12 12 11 11 10 10 10 9 9 8 8 8 8 8 7 6 5 5 4 4 3 2 1 1 1 . . . . . . . . . . . . . . . . . > image(spWts.non0, xlab = "turning point", ylab = "asset number") > wts.non0 <- as(spWts.non0, "matrix") > > ##' To read the output from the above round(1000*spWts.non) into a (non-sparse) matrix: > readWn0 <- function(txtfile) { + stopifnot(file.exists(txtfile)) + lns <- strsplit((ln <- readLines(txtfile)), split = " +") + n <- unique(lengths(lns)) + if(length(n) != 1) + stop("number of 'words' in each line differ:", paste(n, collapse=", ")) + nms <- lapply(lns, `[[`, 1) + rnls <- lapply(lns, `[`, -1L) # the non-names, i.e. round(1000 * wts[]) + w1000 <- setNames(rnls, nms) + nr_non0 <- vapply(w1000, function(ch) sum(ch != "."), 1L) + list(nr_non0=nr_non0, w1000=w1000) + } > if(FALSE) { # private file + rr <- readWn0(txtfile = "./SP5c_Solaris_wts_non0.txt") + rr <- readWn0(txtfile = "./SP5c_Win32_wts_non0.txt") + rr <- readWn0(txtfile = "./SP5c_M1mac_wts_non0.txt") # this is really special + nr_non0 <- rr$nr_non0 + ## compare with b64.n0, to construct 'S10.b32.n0' : + ## same length (== 79) *and* same names : + stopifnot(identical(names(nr_non0), names(b64.n0))) + d <- nr_non0 - b64.n0 + d[d != 0] # Solaris: the first, ADSK is 2, all others are 1 .. + all((d1 <- d[d != 0][-1]) == 1) # TRUE (FALSE for M1mac) + dput(names(d1)) # the names for the '1' .. + ## Win 32: 1 2 -1 1 ... 1 2 1 1 -- win 32 is really "big" differing: + ## table(d) .. only 23 do *not* differ + ## -1 0 1 2 + ## 5 23 49 2 majority (49 of 79): "+1" + } > > table(w.pos <- wts.non0 > 0) FALSE TRUE 7808 4911 > ## FALSE TRUE > ## 7808 4911 > summary(log10(c(wts.non0[w.pos]))) Min. 1st Qu. Median Mean 3rd Qu. Max. -18.363 -1.816 -1.405 -1.688 -1.301 -1.301 > ## Lnx F34: > ## Min. 1st Qu. Median Mean 3rd Qu. Max. > ## -18.363 -1.816 -1.405 -1.688 -1.301 -1.301 > > plot(ecdf(l10w <- log10(c(wts.non0[w.pos])))) > abline(v = log10(1/20), col=2, lwd=2, lty=2) # weights upper boundary = 1/20 (here) > rug(l10w) # wow, that's revealing! > mtext(paste(sfsmisc::shortRversion(), osVersion, sep=" -- ")) > table(l10w < -10) FALSE TRUE 4889 22 > ## FALSE TRUE > ## 4889 22 <-- get 23 (and different ones), for Lnx(64b) --no-long-double > sum(l10w < -5) # the *same* 22 | 23 [1] 22 > round(sort(l10w[l10w < -10]), 1) [1] -18.4 -18.1 -17.8 -17.6 -17.5 -17.5 -17.5 -17.2 -17.2 -16.9 -16.9 -16.9 -16.6 -16.3 -16.3 -16.0 -16.0 -15.7 -15.4 -15.1 -15.1 -14.8 > ## -18.4 ..... Lnx&Win64/32: -15.4 -15.1 -15.1 -14.8 // Lnx_noLD: -15.8 -15.4 -14.8 // M1: .. -16.0 -15.4 -15.4 > smll.e_10 <- 0 < wts.non0 & wts.non0 < 1e-10 > iSml <- which(smll.e_10, arr.ind = TRUE) > iSml <- iSml[order(iSml[,1], iSml[,2]),] > data.frame(iSml, wt = wts.non0[smll.e_10]) row col wt ADSK 2 7 8.881784e-16 AET 3 4 1.776357e-15 AMGN 4 159 4.440892e-16 BCR 9 98 2.220446e-16 BDX 10 126 8.881784e-16 BUD 15 155 1.110223e-16 CI 18 32 5.551115e-17 CL 19 79 1.110223e-16 CTL 24 157 1.387779e-17 ED 29 130 1.387779e-17 EIX 30 15 5.551115e-17 FE 33 50 3.469447e-18 HAL 35 131 1.127570e-17 MCD 46 73 3.469447e-18 NEM 53 117 1.734723e-18 RAI 62 52 6.938894e-18 SII 66 119 2.775558e-17 SYK 68 63 6.938894e-18 WMT 77 156 3.469447e-18 XTO 79 3 2.602085e-18 XTO.1 79 12 4.336809e-19 XTO.2 79 96 8.673617e-19 > ## row col wt > ## ADSK 2 7 8.881784e-16 > ## AET 3 4 1.776357e-15 > ## AMGN 4 159 4.440892e-16 > ## BCR 9 98 2.220446e-16 > ## BDX 10 126 8.881784e-16 > ## BUD 15 155 1.110223e-16 > ## CI 18 32 5.551115e-17 > ## CL 19 79 1.110223e-16 > ## CTL 24 157 1.387779e-17 > ## ED 29 130 1.387779e-17 > ## EIX 30 15 5.551115e-17 > ## FE 33 50 3.469447e-18 > ## HAL 35 131 1.127570e-17 > ## MCD 46 73 3.469447e-18 > ## NEM 53 117 1.734723e-18 > ## RAI 62 52 6.938894e-18 > ## SII 66 119 2.775558e-17 > ## SYK 68 63 6.938894e-18 > ## WMT 77 156 3.469447e-18 > ## XTO 79 3 2.602085e-18 > ## XTO.1 79 12 4.336809e-19 > ## XTO.2 79 96 8.673617e-19 > > ## NEW:: set all really small wts to zero ==> I expect everything will be platform independent! > wts.non0[smll.e_10] <- 0 # !! > ## === > > ## from the 4911, now have 22 less: > stopifnot(sum(w.pos <- wts.non0 > 0) == 4889) > > options(op) > stopifnot(nrow(wts.non0) == 79) > if(FALSE) # once, manually (into tests/ directory + saveRDS(wts.non0, "wtsn0.rds") > file.info("wtsn0.rds")$size # 26926 [1] 26926 > wtsn0.ref <- readRDS("wtsn0.rds") > > ## see on all platforms what we get -- on OpenBLAS, the dim() differs ! > all.equal(target = wtsn0.ref, current = wts.non0, tol=0) [1] TRUE > # expect TRUE only on 64bit (Lnx, R's BLAS) > # 3.10416e-15 and 1.366427e-15 on other BLAS > differWts <- ncol(wtsn0.ref) != ncol(wts.non0) > if(differWts) { + cat("Got",ncol(wts.non0), "weights from CLA() -- different than ref with", + ncol(wtsn0.ref), "\n") + strict <- FALSE # ! + } else { + strict <- mS$strictR + stopifnot(all.equal(target = wtsn0.ref, current = wts.non0, + tol = 1e-13)) + } > non.0.assets <- Filter(function(.) . > 0, apply(wts.non0, 1, function(c) sum(c > 0))) > > ## New (after zapping 22 very small weights): > > b64.n0 <- + c(AAPL = 135L, ADSK = 65L, AET = 146L, AMGN = 2L, ATI = 75L, + AYE = 56L, AZO = 26L, BAX = 95L, BCR = 34L, BDX = 35L, BIIB = 118L, + BNI = 86L, BRL = 23L, BTU = 27L, BUD = 6L, CCE = 54L, CELG = 128L, + CI = 68L, CL = 82L, CLX = 53L, CME = 140L, CNX = 16L, COST = 40L, + CTL = 4L, CVS = 102L, DF = 36L, DGX = 33L, DVN = 14L, ED = 31L, + EIX = 126L, ESRX = 48L, FCX = 54L, FE = 60L, GILD = 38L, HAL = 30L, + HES = 40L, HST = 108L, HUM = 71L, INTU = 48L, JNJ = 34L, K = 61L, + LH = 80L, LLL = 96L, LMT = 83L, LUK = 72L, MCD = 60L, MDT = 43L, + MMC = 7L, MON = 53L, MRO = 136L, MTW = 66L, MUR = 97L, NEM = 44L, + NOC = 74L, NUE = 30L, NVDA = 13L, PBG = 72L, PCP = 102L, PDCO = 71L, + PEP = 69L, PG = 87L, RAI = 109L, RIG = 121L, RRC = 105L, RTN = 90L, + SII = 26L, SSP = 14L, SYK = 18L, SYMC = 13L, TEX = 36L, TIE = 84L, + TSO = 115L, TYC = 59L, UST = 127L, WAG = 17L, WFR = 5L, WMT = 5L, + X = 43L, XTO = 99L) > > > non.0.TARG <- if(mS$ b64) { + if(mS$ b64nLD) + if(mS$arch == "arm64" && grepl("darwin", R.version$os)) # since Feb.2021 also for 'M1mac' + b64.n0 # M1.b64.n0 + else + b64.n0 # b64nLD.n0 + else + b64.n0 + } else { # 32 bit + if(mS$ osVersion == "Solaris 10") + b64.n0 # S10.b32.n0 + else if(.Platform$OS.type == "windows") + b64.n0 # win.b32.n0 + else # notably 32-bit Linux + b64.n0 # b32.n0 + } > > ## see on all platforms what we get; typically no diff on 64bit *and* using R's BLAS/Lapack > if(all(non.0.assets == non.0.TARG)) { ## show differences: + cat("Asset results == non.0.TARG\n") + } else { ## (not seen anymore, since "zap < 1e-10"): + cat("\n'non.0.assets' differing from non.0.TARG:\n") + cat("+1:\n"); dput(names(b64.n0)[non.0.assets - non.0.TARG == +1]) + cat("-1:\n"); dput(names(b64.n0)[non.0.assets - non.0.TARG == -1]) + + if(any(isB <- abs(non.0.assets - non.0.TARG) > 1)) { + cat("more different (than just +/- 1), showing differences:\n") + dput((non.0.assets - non.0.TARG)[isB]) + } + } Asset results == non.0.TARG > > ## They have the same names and only differ by +/- 1: > stopifnot(exprs = { + !strict || identical(non.0.assets, non.0.TARG) + + differWts || identical(head(CLs5c.0.120$free_indices, 12), + list(c(295L, 453L), 453L, c(453L, 472L), c(19L, 453L, 472L), + c(19L, 453L), 453L, c(15L, 453L), 15L, c(15L, 320L), + c(15L, 105L, 320L), c(105L, 320L), c(105L, 320L, 472L))) + }) > > ## Check some of the 'Env' versions: --------- > > ##' Transform CLA() result to old style (= Env8 / Env9 results): > claStrip <- function(res) { + class(res) <- NULL + res$call <- NULL + res$emptyLambdas <- NULL + res$weights_set <- unname(res$weights_set) + names(res)[[match("MS_weights", names(res))]] <- "MS_weight" # "MS_weights" w/ final "s" + res + } > > rCLA <- claStrip(CLs5c.0.120) > > ##' Drop "first turning point" from old, pre-0.95, CLA() result: > claDrop1st <- function(res) { + res$weights_set <- res$weights_set[, -1L , drop=FALSE] # drop 1st column + if(is.matrix(res$MS_weight)) + res$MS_weight <- res$MS_weight[ -1L, , drop=FALSE] # drop 1st row + for(nm in c("free_indices", "gammas", "lambdas")) + res[[nm]] <- res[[nm]][-1L] + res + } > > ## back compatibility to "old" Env8 results: > nsCLA <- asNamespace("CLA") > if(is.environment(e8 <- nsCLA$Env8)) local(withAutoprint({ + system.time(r8 <- e8$cla.solve(muS.sp500$mu, muS.sp500$covar, + lB = rep(0,n), uB= rep(1/20, n))) + ## lynne (2017): 9.6--9.8 sec; 2018: 6.1 sec + if(ncol(claDrop1st(r8)$weights_set) == ncol(rCLA$weights_set)) + stopifnot(all.equal(claDrop1st(r8), rCLA, tol = 1e-14)) # they are the same! + else cat("#{columns} differ in r8\n") + })) > system.time(r8 <- e8$cla.solve(muS.sp500$mu, muS.sp500$covar, lB = rep(0, + n), uB = rep(1/20, n))) user system elapsed 13.07 3.08 16.19 > if (ncol(claDrop1st(r8)$weights_set) == ncol(rCLA$weights_set)) stopifnot(all.equal(claDrop1st(r8), + rCLA, tol = 1e-14)) else cat("#{columns} differ in r8\n") > > if(is.environment(e9 <- nsCLA$Env9)) local(withAutoprint({ + system.time(r9 <- e9$cla.solve(muS.sp500$mu, muS.sp500$covar, + lB = rep(0,n), uB= rep(1/20, n))) + ## lynne(2017): 10.0 sec; 2018: 6.6 sec + if(ncol(claDrop1st(r9)$weights_set) == ncol(rCLA$weights_set)) + stopifnot(all.equal(claDrop1st(r9), rCLA, tol = 1e-14)) # they are the same! + else cat("#{columns} differ in r9\n") + })) > system.time(r9 <- e9$cla.solve(muS.sp500$mu, muS.sp500$covar, lB = rep(0, + n), uB = rep(1/20, n))) user system elapsed 14.12 2.66 16.83 > if (ncol(claDrop1st(r9)$weights_set) == ncol(rCLA$weights_set)) stopifnot(all.equal(claDrop1st(r9), + rCLA, tol = 1e-14)) else cat("#{columns} differ in r9\n") > > proc.time() user system elapsed 43.09 11.28 54.50