2012-09-18 48 views
1

我想在R中使用lm()以適應一系列(實際上爲93)單獨的線性迴歸。根據R lm()幫助手冊:在R中使用lm()進行一系列獨立擬合

「如果響應是一個矩陣,線性模型是通過最小二乘法分別對矩陣的每一列進行擬合。」

只要在Y響應矩陣中沒有缺失數據點,這就可以正常工作。如果缺少點,而不是使用可用數據擬合每個迴歸,則丟棄任何列中缺少數據點的每一行。是否有任何方法可以指定lm()應該獨立地適合Y中的所有列,並且不要放棄單個列中缺少數據點的行?

+1

何不的'sapply一些變化(1:93,函數(j)lm(y [,j]〜x)' –

回答

3

如果你正在尋找做Y1, Y2, ..., YnX之間n迴歸,你不指定與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 
+0

Andy,感謝您的詳細解答。我嘗試了你的方法,它工作得很好。 –