Gibt es eine schnelle Schätzung der einfachen Regression (eine Regressionsgerade mit nur Achsenabschnitt und Steigung)?
Diese Frage bezieht sich auf ein Auswahlverfahren für maschinelles Lernen.
Ich habe eine große Merkmalsmatrix - Spalten sind die Merkmale der Themen (Zeilen):
set.seed(1)
features.mat <- matrix(rnorm(10*100),ncol=100)
colnames(features.mat) <- paste("F",1:100,sep="")
rownames(features.mat) <- paste("S",1:10,sep="")
Die Reaktion wurde für jedes Subjekt gemessen S
) unter verschiedenen Bedingungen C
) und sieht daher so aus:
response.df <-
data.frame(S = c(sapply(1:10, function(x) rep(paste("S", x, sep = ""),100))),
C = rep(paste("C", 1:100, sep = ""), 10),
response = rnorm(1000), stringsAsFactors = F)
So passe ich die Themen inresponse.df
:
match.idx <- match(response.df$S, rownames(features.mat))
Ich suche nach einer schnellen Methode, um die univariate Regression jedes Features und der Antwort zu berechnen.
Alles schneller als das?:
fun <- function(f){
fit <- lm(response.df$response ~ features.mat[match.idx,f])
beta <- coef(summary(fit))
data.frame(feature = colnames(features.mat)[f], effect = beta[2,1],
p.val = beta[2,4], stringsAsFactors = F))
}
res <- do.call(rbind, lapply(1:ncol(features.mat), fun))
Ich bin an einer geringfügigen Steigerung interessiert, d. H. Anderen Methoden als der Verwendung von Parallel-Computing über mclapply
odermclapply2
.