--- a +++ b/R/calc_pcareduceres.R @@ -0,0 +1,22 @@ +calc_pcareduceres <- function(obj, reduce) { + if (!reduce) { + return(t(obj)) + } + df <- data.frame(x = 1:20) + df$sdev <- prcomp(t(obj), scale = TRUE)$sdev[1:20] + optpoint <- which.min( + vapply( + 2:10, + function(i) { + data$x2 <- pmax(0, data$x - i) + sum(lm(sdev ~ x + x2, df)$residuals^2) + }, + 0 + ) + ) + pcadim <- optpoint + 1 + tmpdata <- t(apply(obj, 1, scale)) + colnames(tmpdata) <- colnames(obj) + tmppc <- prcomp(t(tmpdata), scale = TRUE) + return(t(tmpdata) %*% tmppc$rotation[, 1:pcadim]) +}