我正在生成观察到的理论p值的QQ图。但我想在包含p值向量的原始数据框中添加参考线的矢量作为列,我还想添加一组观察到的和预期的p值。
#data frame with p-value column labeled p-vals)
PVAL<-runif(10000)
pvals<-as.data.frame(PVAL)
#sort the p-values in PVAL and take the negative log
observed <- sort(pvals$PVAL)
lobs <- -(log10(observed))
#generate expected pvalue vector
expected <- c(1:length(observed))
lexp <- -(log10(expected / (length(expected)+1)))
#generate QQ plot
#plot red reference line and observed vs expected pvalues
plot(c(0,7), c(0,7), col="red", lwd=3, type="l", xlab="Expected (-logP)", ylab="Observed (-logP)", xlim=c(0,7), ylim=c(0,7), las=1, xaxs="i", yaxs="i", bty="l")
points(lexp, lobs, pch=23, cex=.4, bg="black")
情节工作正常,但是,我想要一个最终数据框,其中包含对应于“观察”,“预期”和红色参考线值向量的PVAL的列。
基本上我想要一个包含4列的新数据框,如下所示:
$new_pvals
PVAL OBSERVED EXPECTED RED_REFERENCE_LINE
注意:PVAL和OBSERVED列应该相同,而另一个只是另一个的排序版本。
有人可以帮忙吗?谢谢。 这是为了帮助我看到参考线中某些值下观察到的和预期的落点数。
答案 0 :(得分:0)
编辑 - 根据要求,计算以下点数的方法(x,x)
getpoint<-function(obs,exp){
ceiling(max(obs,exp))
}
df$nextpoint<-apply(df,1,FUN=function(x)getpoint(x["OBSERVED"],x["EXPECTED"]))
require(plyr) # for count function
count(df$nextpoint) # note e.g. nextpoint = 4 means points below 4,4
x freq
1 1 9000
2 2 900
3 3 90
4 4 9
5 6 1
因为你的参考线是成比例的,我认为如果RED_REFERENCE_LINE指的是Y值,它等于lobs
,如果是X,它等于lexp
,不是吗?
请参阅下文以生成数据框并给出相同的图表。此外,一旦您生成了数据框,我认为您不需要RED_REFERENCE_LINE坐标 - 您可以使用:df<-df[df$OBSERVED<df$EXPECTED,]
选择“直线”下面的点
#data frame with p-value column labeled p-vals)
PVAL<-runif(10000)
pvals<-as.data.frame(PVAL)
#sort the p-values in PVAL and take the negative log
observed <- sort(pvals$PVAL)
lobs <- -(log10(observed))
#generate expected pvalue vector
expected <- c(1:length(observed))
lexp <- -(log10(expected / (length(expected)+1)))
#generate QQ plot
#plot red reference line and observed vs expected pvalues
plot(c(0,7), c(0,7), col="red", lwd=3, type="l", xlab="Expected (-logP)", ylab="Observed (-logP)", xlim=c(0,7), ylim=c(0,7), las=1, xaxs="i", yaxs="i", bty="l")
points(lexp, lobs, pch=23, cex=.4, bg="black")
###########################################################
### DATA FRAME CREATED AND PLOTTED HERE ###
###########################################################
df<-data.frame(PVAL=PVAL)
df$OBSERVED<-lobs
df$EXPECTED<-lexp
df$RED_REFERENCE_LINE_Y<-df$EXPECTED
plot(c(df$RED_REFERENCE_LINE_Y,7), c(df$RED_REFERENCE_LINE_Y,7), col="red", lwd=3, type="l", xlab="Expected (-logP)", ylab="Observed (-logP)", xlim=c(0,7), ylim=c(0,7), las=1, xaxs="i", yaxs="i", bty="l")
points(df$EXPECTED, df$OBSERVED, pch=23, cex=.4, bg="black")