2016-09-14 14 views
-3

我有一個Y,X1,X2和V列的數據集.Y,X1和X2是連續的,V是一個分類變量。假設V有10個類別,我想要創建10個線性迴歸模型並將結果(係數,p值,R-Sq等)存儲在另一個表中。有沒有辦法使用data.table而不使用for循環?謝謝。生成一個迴歸模型數組,無迴圈

+3

請參閱nlme軟件包中的'lmList'。有關如何在SO上提出問題時提供可重現示例的信息,請參見[mcve]。 –

+0

謝謝。我試過lmList,它工作。我只得到了coeffs,但我確信我可以弄清楚如何獲得R-Sq,p值等。 – mlg

+0

請參閱http://stackoverflow.com/questions/23501852/print-r-squared-for-all-的最模型擬合與 - lmlist –

回答

0

broom package正好存在這種類型的問題。它可以將模型的輸出整理爲整齊的數據幀,便於存儲和比較。這是一個example,它使用broomdplyr來解決幾乎相同的問題。它使用dplyr按分類變量對數據進行分組,將模型擬合到每個組,並將這些係數提取到幾行代碼中的data.frame中。我不熟悉data.table的分組操作,但可能會對該軟件包執行類似的操作。

此外,broom具有augment函數,該函數可用於計算適合度量度量和其他彙總統計量。

另外,如果你想這樣做,而無需安裝額外的軟件包,則可以將數據幀中的建模過程分割成一個列表(使用split功能),lapply到列表中,提取結果(可能是通過另一lapply那從lm對象中提取信息,)然後將它們全部組合在一起。

3

基本R功能by是你想要的。

# make up some sample data 
dataSet <- data.frame(Y = iris$Sepal.Length, 
         X1 = iris$Sepal.Width, 
         X2 = iris$Petal.Length, 
         V = iris$Species) 
# apply the `lm` function by the value of `V` 
by(data = dataSet[c("Y","X1","X2")], 
    INDICES = dataSet$V, 
    FUN = lm, 
    formula = Y ~ .) 

by功能,data是你想要的功能應用到數據。 INDICES是一個向量因子或因子列表,其中一個值對應於每行data,指示您希望如何分割數據。 FUN是您希望應用於數據子集的功能。在這種情況下,lm()需要額外的參數formula,指示如何爲數據建模,因此您可以輕鬆地將該參數作爲formula參數傳遞給by函數。