【问题标题】:generating a data frame based on a QQ plot基于QQ图生成数据框
【发布时间】:2013-12-04 03:08:03
【问题描述】:

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

有人可以帮忙吗?谢谢。 这是为了帮助我了解观察和预期中有多少点低于参考线中的某些值。

【问题讨论】:

    标签: r plot dataframe


    【解决方案1】:

    EDIT - 根据要求,计算 (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&lt;-df[df$OBSERVED&lt;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") 
    

    【讨论】:

    • 谢谢。但我不是想选择线下的点。我正在尝试计算低于或高于参考线的点数。例如,我想知道有多少预期点和有多少观察点落在红色参考线上的坐标 (1,1) 以下,然后有多少从 (1,1) 下降到 (2,2),然后有多少从参考线上的(2,2)到(3,3)..等。是不是更清楚了?
    猜你喜欢
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2021-02-15
    • 1970-01-01
    相关资源
    最近更新 更多