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