2016-09-14 53 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函数。