Получить 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]

Если у вас есть проблемы с большой моделью, вы можете захотеть переписать код, чтобы он содержал меньше объектов путем объединения нескольких строк / назначений в меньшее количество строк.

Счастливое решение, которое я знаю. Но это будет как можно быстрее. Я полагаю, было бы лучше поместить все строки кода в функцию.

Другие вопросы по тегам