将重复的(循环的)回归结果输出到数据框

时间:2018-12-18 13:19:23

标签: r function regression

我一直在大量研究这个问题,但是我认为我对R的了解还不够,所以我什至不知道现在该去谷歌搜索什么。

我有一组看起来像这样的数据,尽管实际数据集会更大:

0     treatment  suva        stddev       heather  sedge sphagnum
1     burnt      12.880545   6.12E-02     0.1500 0.5250   0.0000
2     m          7.098873    2.69E-02     0.2275 0.0000   0.0000
3     sp         8.660688    4.04E-02     0.4250 0.2500   0.0000
4     br         7.734547    2.16E-02     0.2250 0.3875   0.0000
5     brsp       16.706960   0.103626684  0.1500 0.0750   0.0000

我想对所有其他列(相对于所有水质参数而言,所有植被类型)进行所有列的回归。

很明显,我可以一一完成所有工作,但是那是数百个回归,所以我一直在使用:

data.table <- lapply( data1[,-1], function(x) summary(lm(data1$suva ~ x)) )
L <- data.table
L$heather

这至少允许我对suva和所有其他列进行回归分析,然后分别进行检查(其中一些(作为因素)将是垃圾,但我只是忽略了这些结果,而是对其进行了处理... )

理想情况下,我想对数据集中的所有列运行所有列,然后将其输出到表中,但是我不确定现在需要做什么-使用cbind,这样就不会打印结果而是绑定到列而不是?

1 个答案:

答案 0 :(得分:1)

与其运行完整的lm功能,不如仅使用列之间的相关性cor作为初始测试。 combn函数将查找列名称的所有组合。如果您有大量的列,这可能会非常耗时。

下面的示例还将仅显示数字列,从而减少了错误测试的次数并减少了出错的机会。

df<-read.table(header=TRUE, text="suva        stddev       heather  sedge sphagnum
12.880545   6.12E-02     0.1500 0.5250   0.0000
7.098873    2.69E-02     0.2275 0.0000   0.0000
8.660688    4.04E-02     0.4250 0.2500   0.0000
7.734547    2.16E-02     0.2250 0.3875   0.0000
16.706960   0.103626684  0.1500 0.0750   0.0000")

#find column names
names<-names(df)

#find only the numeric columns
numericcols<-sapply(names, function(x){is.numeric(df[[x]])})
#define all combinations
fullgrid<-as.data.frame(t(combn(names[numericcols], 2)))    
#find correlation between columns
fullgrid$cor<-sapply(1:nrow(fullgrid), function(i){cor(df[[fullgrid[i,1]]], df[[fullgrid[i,2]]])})