Получить t-статистику для коэффициентов регрессии объекта "mlm", возвращаемого функцией "lm()"
Я used lm()
чтобы соответствовать множественным регрессионным моделям, для множественных (~1 миллиона) переменных отклика в R. Например.
allModels <- lm(t(responseVariablesMatrix) ~ modelMatrix)
Это возвращает объект класса "mlm", который похож на огромный объект, содержащий все модели. Я хочу получить t-статистику для первого коэффициента в каждой модели, что я могу сделать, используя summary(allModels)
функция, но это очень медленно на этих больших данных и возвращает много нежелательной информации тоже.
Есть ли более быстрый способ расчета t-statistic
вручную, это может быть быстрее, чем с помощью summary()
функция
Спасибо!
1 ответ
Вы можете взломать функцию summary.lm(), чтобы получить только нужные биты и оставить все остальное.
Если у вас есть
nVariables <- 5
nObs <- 15
y <- rnorm(nObs)
x <- matrix(rnorm(nVariables*nObs),nrow=nObs)
allModels <-lm(y~x)
Затем это код из функции lm.summary(), но со всем удаленным сверхнормативным багажом (обратите внимание, что вся обработка ошибок также была удалена).
p <- allModels$rank
rdf <- allModels$df.residual
Qr <- allModels$qr
n <- NROW(Qr$qr)
p1 <- 1L:p
r <- allModels$residuals
f <- allModels$fitted.values
w <- allModels$weights
mss <- if (attr(allModels$terms, "intercept"))
sum((f - mean(f))^2) else sum(f^2)
rss <- sum(r^2)
resvar <- rss/rdf
R <- chol2inv(Qr$qr[p1, p1, drop = FALSE])
se <- sqrt(diag(R) * resvar)
est <- allModels$coefficients[Qr$pivot[p1]]
tval <- est/se
tval
теперь вектор статистики т, а также дать
summary(allModels)$coefficients[,3]
Если у вас есть проблемы с большой моделью, вы можете захотеть переписать код, чтобы он содержал меньше объектов путем объединения нескольких строк / назначений в меньшее количество строк.
Счастливое решение, которое я знаю. Но это будет как можно быстрее. Я полагаю, было бы лучше поместить все строки кода в функцию.