我一直在大量研究这个问题,但是我认为我对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,这样就不会打印结果而是绑定到列而不是?
答案 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]]])})