【问题标题】:Creating a QQ plot in R在 R 中创建 QQ 图
【发布时间】:2014-04-05 19:43:51
【问题描述】:

我一直在尝试在 R 中创建一个 qq 图。我很难使用我的结果,所以我尝试遵循“遗传病例对照研究中的基本统计分析,Clarke 等人”中的示例。

步骤 5, a, iii) 我已将路径和模型替换为必填字段,如下所示:

data<-read.table("C:\Users\X\Desktop\BIOM3006\Alternate/data.assoc.logistic",header=TRUE);pdf("C:\Users\X\Desktop\BIOM3006\Alternate/pvalue.qq.plot.pdf");

obs<-−log10(sort(data[data$TEST=="ADD",]$P));exp<-−log10(c(1:length(obs))/(length(obs)+ 1));plot(exp, 

obs<-ylab="Observed(−logP)",xlab="Expected(−logP)",ylim=c(0,20),xlim=c(0,7)) lines(c(0,7),c(0,7),col=1,lwd=2);dev.off()

这是我收到的错误消息:

data<-read.table("C:\Users\Tom\Desktop\BIOM3006\Alternate/data.assoc.logistic",header=TRUE);pdf("C:\Users\Tom\Desktop\BIOM3006\Alternate/pvalue.qq.plot.pdf");
Error: '\U' used without hex digits in character string starting ""C:\U"

obs<-−log10(sort(data[data$TEST=="ADD",]$P));exp<-−log10(c(1:length(obs))/(length(obs)+ 1));plot(exp, 
Error in log10(sort(data[data$TEST == "ADD", ]$P)) : 
 non-numeric argument to mathematical function

In addition: Warning message:
In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL'

obs<-ylab="Observed(−logP)",xlab="Expected(−logP)",ylim=c(0,20),xlim=c(0,7))
Error: unexpected ',' in "obs<-ylab="Observed(-logP)","

lines(c(0,7),c(0,7),col=1,lwd=2)
Error in plot.xy(xy.coords(x, y), type = type, ...) : 
plot.new has not been called yet

;dev.off()
Error: unexpected ';' in ";"

我仍在使用这个软件,所以如果我忽略了一些明显的东西,任何帮助都将不胜感激和抱歉。 汤姆

【问题讨论】:

  • 我会说重新检查您用于加载数据的文件路径 - 看起来您在两个方向都有斜线
  • Stedy 可能是对的。使用.Platform$file.sep 的输出来查看如何分隔路径的元素。
  • 这与QQ图无关。 R 中的反斜杠用于转义后面的字符。 "\U" 开始定义 unicode 字符,因此它期望在 "\U" 之后有一个十六进制值。例如,尝试在 R 控制台输入“\U03A3”。文件路径使用正斜杠(在 Windows 中也是如此)。见this post

标签: r quantile genetics


【解决方案1】:

我想说你已经很接近了,有一些格式问题需要一些小修复(例如&lt;--log 之间没有空格),但除此之外它看起来还可以,虽然很难说没有可重复的例子。

data <- read.table("C:\Users\X\Desktop\BIOM3006\Alternate/data.assoc.logistic",header=TRUE)
pdf("C:\Users\X\Desktop\BIOM3006\Alternate/pvalue.qq.plot.pdf")
obs <- −log10(sort(data[data$TEST=="ADD",]$P))
exp<- −log10(c(1:length(obs))/(length(obs)+ 1))
plot(exp, obs, ylab="Observed(−logP)",xlab="Expected(−logP)",ylim=c(0,20),xlim=c(0,7)) lines(c(0,7),c(0,7),col=1,lwd=2))
dev.off()

【讨论】:

    【解决方案2】:

    我同意上面的评论,问题不在于你的代码本身,而在于"\U"

    顺便说一句,我发布了一个更简单的脚本,用于创建 QQ 图,使用 plink 输出,如您的示例所示。

    # If you call the script from bash it may include the name of your plink.qassoc file
    args=(commandArgs(TRUE))
    ARG = args[1]
    
    # check libraries. It may download some from the Internet
    if(!("methods" %in% rownames(installed.packages())))  
    install.packages("methods")
    library("methods")
    if(!("ggplot2" %in% rownames(installed.packages())))  
    install.packages("ggplot2")
    library("ggplot2")
    
    # Input data file (it is different for your file)
    filename = paste ("../plink_files/", ARG, ".plink.qassoc.adjusted",sep="")
    data = read.table (file = filename, header=T)
    
    # Takes proability vector. 
    PROB = data$UNADJ
    
    # minus Log-P
    logQQ = -log(data$QQ  ,10)
    logP  = -log(PROB,10)
    
    # QQ Plot
    qqplot = ggplot (data = data, aes (x = logQQ, y = logP )) + geom_point(shape=1)
      qqplot = qqplot + xlab("Expected -logP values") + ylab("Observed -logP values")
      qqplot = qqplot + geom_abline (intercept = 0, slope = 1, color="red")
      qqplot = qqplot + ylim(0,max(logQQ,logP)) + xlim (0,max(logQQ,logP))
    
    # Saving plot into a file
    output = paste ("../results/", ARG, "_QQplot.jpg", sep="")
    ggsave(output, plot = qqplot,width=6.47,height=4.67)
    

    【讨论】:

      【解决方案3】:

      对我来说它的工作原理:我只是做了一些小的修改。 看 数据

      obs

      plot(exp,ylab="Observed(−logP)",xlab="Expected(−logP)",ylim=c(0,20),xlim=c(0,7))

      线(c(0,7),c(0,7),col=1,lwd=2);

      dev.off()

      【讨论】:

        猜你喜欢
        • 2021-10-05
        • 2018-10-10
        • 2021-07-09
        • 2021-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-25
        相关资源
        最近更新 更多