我有兩個數據集,其中有來自不同物種的大量數據。列是物種,行是站點。兩個數據集之間的站點(行)是相同的,我要做的是將第一個數據集的列與第二個數據集的列相關聯,以查看是否存在正相關或負相關。
library(Hmisc)
rcorr(otu.table.filter$sp1,new6$spA, type="spearman"))$P
rcorr(otu.table.filter$sp1,new6$spA, type="spearman"))$r
第一個是sp1和spA之間關系的p值,第二個是r值
我最初創建了一個循環,允許我用第二個數據幀的一列檢查第一個數據幀的所有種類。不用說,如果我要使這項工作,我將不得不重復這個過程幾百次。一列df1(new6)對所有列df2(otu.table.filter的簡單循環
pvalues = list()
for(i in 1:ncol(otu.table.filter)) {
pvalues[[i]] <-(rcorr(otu.table.filter[ , i], new6$Total, type="spearman"))$P
}
rvalues = list()
for(i in 1:ncol(otu.table.filter)) {
rvalues[[i]] <-(rcorr(otu.table.filter[ , i], new6$Total, type="spearman"))$r
}
p<-NULL
for(i in 1:length(pvalues)){
tmp <-print(pvalues[[i]][2])
p <- rbind(p, tmp)
}
r<-NULL
for(i in 1:length(rvalues)){
tmp <-print(rvalues[[i]][2])
r <- rbind(r, tmp)
}
fdr<-as.matrix(p.adjust(p, method = "fdr", n = length(p)))
sprman<-cbind(r,p,fdr)
以上述為出發點,我試圖創建一個嵌套循環,每次都檢查df1的一列和df2的所有列,然后根據df2的所有列進入df1的第二列,以此類推
但在這里我有點迷路,我找不到一個解決方案在r的答案
我假設pvalues輸出應該是
pvalues[[i]][[j]]
類似地,r值輸出
rvalues[[i]][[j]]
但我有點迷路了,我不知道怎么做,因為我試過
pvalues = list()
rvalues = list()
for (j in 1:7){
for(i in 1:ncol(otu.table.filter)) {
pvalues[[i]][[j]] <-(rcorr(otu.table.filter[ , i], new7[,j], type="spearman"))$P
}
for(i in 1:ncol(otu.table.filter)) {
rvalues[[i]][[j]] <-(rcorr(otu.table.filter[ , i], new7[,j], type="spearman"))$r
}
}
但我不能使它工作,因為我不知道如何在列表中直接輸出,然后我也會很感激如果有人能幫助我與下一部分,這將是每次比較提取p和r值,并應用fdr函數(類似于我做的簡單循環)
這是我的兩個數據幀的一個子集
這里有一個小演示。假設兩個矩陣x和y的樣本大小為n。那么相關性和近似p-values可以估計為:
更多細節可以在這里找到:https://stats.stackexchange.com/questions/312216/spearman-correlation-significancy-test
Edit
最后一個循環是
cor.test
:這些值有些不同,因為第一個使用t-approximation,第二個使用
cor.test
的“精確為89算法”。