当使用qqnorm时,如何给异常值编号?

4

我想知道如何在R中使用qqnorm来给离群值编号(如下图所示,我已用红圆圈圈出)。

以下是一个例子。我进行了线性回归:

lm1 <- lm (y ~ x)

我接下来会绘制这个模型:
plot(lm1)

这将生成一个非常漂亮的QQ图。您可以看到它标记了异常值(我在红色圈中圈出)。
然而,如果我自己使用qqnorm,异常值没有标记编号。如何像之前的图表一样编号这些异常值?
qqnorm(y)
qqline(y)

enter image description here


1
plot(lm1, which = 2) 是什么意思? - Roman Luštrik
Roman Luštrik 我不知道这是可能的。如果你把它作为一个答案添加,我一定会点赞的。 - Contango
你已经完成了。我很高兴能够帮助。 - Roman Luštrik
@Roman Luštrik 非常感谢,非常感激。 - Contango
3个回答

6
另一个非常简单的方法如下:

还有一种非常简单的方法:

QQ_y=qqnorm(y)
identify(QQ_y) 

代码将在此处暂停。将鼠标悬停在图表上,单击假设的异常值或其他感兴趣的点,然后使用控制键单击或按Esc键继续代码。

qqline(y)

4
学会看代码:
 plot.lm
 # snipping the rather long output top and bottom and showing hte relevant section
 if (show[2L]) {
    ylim <- range(rs, na.rm = TRUE)
    ylim[2L] <- ylim[2L] + diff(ylim) * 0.075
    dev.hold()
    qq <- qqnorm(rs, main = main, ylab = ylab23, ylim = ylim, 
        ...)
    if (qqline) 
        qqline(rs, lty = 3, col = "gray50")
    if (one.fig) 
        title(sub = sub.caption, ...)
    mtext(getCaption(2), 3, 0.25, cex = cex.caption)
    if (id.n > 0) 
        text.id(qq$x[show.rs], qq$y[show.rs], show.rs)
    dev.flush()

谢谢,这看起来很好。你是怎么查看代码的-是下载软件包源代码并检查它吗? - Contango
这比那容易多了。我只是在控制台上输入了函数名。代码出现了。它可能比那更复杂,在某些情况下,您可能需要键入getAnywhere(plot.lm)。有一篇非常有用的文章http://cran.r-project.org/doc/Rnews/Rnews_2006-4.pdf;(第43页)关于通过Uwe Ligges获取代码。使用Ligges访问源代码的策略在Google上搜索它。 - IRTFM

2

根据@DWin的回答,如果我添加以下行:

text(qq$x[44]-0.2, qq$y[44], 44)

然后它会在图表中添加一个数字: enter image description here 要正确地做到这一点,您需要编写代码来:
- 按顺序排序由qqnorm返回的x、y值(确保每对x、y值保持在一起)。 - 使用其索引号标记前三个和最后三个。
由于我仅使用QQ图进行探索性数据分析,因此Roman Luštrik提供的以下答案更容易理解:
plot(lm1, which = 2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接