FDR计算
FDR的计算很简单,我折腾了一上午主要是因为遇到了以下几个问题。
问题:
- FDR是什么?有什么用?怎么计算?
- 我把几个模型的P值都合并成一个表了,所以每次运算FDR时,我需挑选特定的对象。
- 我有多个模型,所以我想着要如何构建循环。
- FDR的数据类型和输出结果都是vector,所以要如何把vector的结果写回dataframe里
解决:
逐一摸索,再次巩固R的基础知识(PS:雷子要赶明天的组会汇报,所以我必须自食其力)。
- 我的FDR理论学习笔记(微博)
- 挑选特定的数值。因为FDR是多次重复测量中犯错的概率(见第一条FDR的概念),所以测量的次数就会影响校正后的结果(废话),所以一定要把每个model中的p单独挑出来运算!
又因为FDR的运算对象是向量,所以我只提取模型中的p值这一列,而不是整个数据框截出来。
p_value <- tdata$PCom[d:t]
#p value has to be a vector
# d和t分别是始末位置
- 我一共有6个模型,每个模型147个代谢物。先在excel中按model排序,所以在1-882中,从1开始,每147个属于同一个model。
FDR <- vector()
d=1 #i=2
for (i in 1:6){
t = 147*i
p_value <- tdata$PCom[d:t]#p value has to be a vector
p_adjust <- p.adjust(p_value,method = "BH",n=length(p_value))
FDR <- c(FDR, p_adjust)
d = t+1
# d的位置很重要,必须放在循环中的最后一步。
# 一定要挑几个片段运行看,确保循环是对的。
}
- 把结果写回原来的数据框
timo <- data.frame()
timo <- transform(out, FDR_Com=FDR)
#out为原数据框,FDR_Com是其中我预先设好的一个空白列
思考:
写代码,数学逻辑还是很重要。
嗯呢,总结完去吃饭了~
PS:后天我生日 > <