我想在R中使用lm()
来拟合一系列(实际上是93个)单独的线性回归。根据R lm()
帮助手册:
“如果响应是矩阵,则线性模型通过矩阵的每列最小二乘法分别拟合。”
只要Y响应矩阵中没有丢失的数据点,这就可以正常工作。当存在缺失点时,不是使用可用数据拟合每个回归,而是丢弃任何列中具有缺失数据点的每一行。有没有办法指定lm()
应该独立地适合Y中的所有列而不丢弃单个列缺少数据点的行?
答案 0 :(得分:3)
如果您希望在n
和Y1, Y2, ..., Yn
之间进行X
次回归,则不要使用lm()
指定,而应使用R apply functions :
# create the response matrix and set some random values to NA
values <- runif(50)
values[sample(1:length(values), 10)] <- NA
Y <- data.frame(matrix(values, ncol=5))
colnames(Y) <- paste0("Y", 1:5)
# single regression term
X <- runif(10)
# create regression between each column in Y and X
lms <- lapply(colnames(Y), function(y) {
form <- paste0(y, " ~ X")
lm(form, data=Y)
})
# lms is a list of lm objects, can access them via [[]] operator
# or work with it using apply functions once again
sapply(lms, function(x) {
summary(x)$adj.r.squared
})
#[1] -0.06350560 -0.14319796 0.36319518 -0.16393125 0.04843368