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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将重复(循环?)回归结果输出到数据帧相关的知识,希望对你有一定的参考价值。

我一直在研究这些问题,但我认为我已经知道了我的R知识,所以我现在甚至不确定要google什么。

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

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,以便结果不打印bbut绑定到列而不是?

答案

而不是运行完整的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]]])}) 

以上是关于将重复(循环?)回归结果输出到数据帧的主要内容,如果未能解决你的问题,请参考以下文章

将通过 FOR 循环函数输出的多个数据帧合并为一个数据帧

Scala:如何在循环中组合数据帧

从 for 循环输出 Python 连接大数据帧

如何多次重复代码并将每次迭代的输出存储在同一个数据帧中?

将数据帧输出到CSV时标题的一致顺序

循环遍历多个 panda 数据帧以在 Python 中获取多个数据帧输出