基于QQ图生成数据帧

时间:2013-12-04 03:08:03

标签: r plot dataframe

我正在生成观察到的理论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列应该相同,而另一个只是另一个的排序版本。

有人可以帮忙吗?谢谢。 这是为了帮助我看到参考线中某些值下观察到的和预期的落点数。

1 个答案:

答案 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") 

enter image description here