识别离群值以进行非线性回归


11

我正在研究螨的功能响应领域。我想做一个回归来估计Rogers II型函数的参数(攻击率和处理时间)。我有一个测量数据集。 我怎样才能最好地确定异常值?

对于我的回归,我在R中使用以下脚本(非线性回归):(日期集是一个简单的2列文本文件,称为data.txt文件,具有N0值(初始猎物数量)和FR值(24小时内被猎物食用的数量):

library("nlstools")
dat <- read.delim("C:/data.txt")    
#Rogers type II model
a <- c(0,50)
b <- c(0,40)
plot(FR~N0,main="Rogers II normaal",xlim=a,ylim=b,xlab="N0",ylab="FR")
rogers.predII <- function(N0,a,h,T) {N0 - lambertW(a*h*N0*exp(-a*(T-h*N0)))/(a*h)}
params1 <- list(attackR3_N=0.04,Th3_N=1.46)
RogersII_N <-  nls(FR~rogers.predII(N0,attackR3_N,Th3_N,T=24),start=params1,data=dat,control=list(maxiter=    10000))
hatRIIN <- predict(RogersII_N)
lines(spline(N0,hatRIIN))
summary(RogersII_N)$parameters

为了绘制残差图,我使用以下脚本:

res <- nlsResiduals (RogersII_N)
plot (res, type = 0)
hist (res$resi1,main="histogram residuals")
    qqnorm (res$resi1,main="QQ residuals")
hist (res$resi2,main="histogram normalised residuals")
    qqnorm (res$resi2,main="QQ normalised residuals")
par(mfrow=c(1,1))
boxplot (res$resi1,main="boxplot residuals")
    boxplot (res$resi2,main="boxplot normalised residuals")

问题

  • 如何最好地确定哪些数据点是异常值?
  • 我可以在R中使用哪些客观的测试,并向我显示哪些数据点是异常值?

Answers:


9

outliersR 的包装中提供了几种针对异常值的测试,包括Dixon和Grubb 。有关测试的列表,请参见包装的文档。在相应功能的帮助页面上提供了描述测试的参考。

如果您打算从数据中删除异常值,请记住这并不总是明智的。例如,请参见此问题以进行讨论(以及有关如何检测异常值的更多建议)。


8

我也不是统计学家。因此,我利用我对数据的专业知识来发现异常值。即我寻找物理/生物/任何原因使某些测量值与其他测量值不同。

就我而言,例如

  • 宇宙射线使部分被测信号混乱
  • 有人进入实验室,打开灯
  • 只是整个频谱看起来有所不同
  • 第一个测量系列是在正常工作时间进行的,比晚上10点系列的噪声更大

当然,您可以告诉我们类似的效果。

请注意,我的第三点不同于其他观点:我不知道发生了什么。这可能是您要询问的异常值。但是,不知道是什么原因造成的(导致此原因使数据点无效),很难说它不应该出现在数据集中。另外:您的异常值可能是我最有趣的样本...

因此,我通常不谈论离群值,而是谈论可疑的数据点。这提醒每个人,需要仔细检查其含义。

排除数据是否好(谁只是想拥有离群值是谁?)在很大程度上取决于手头的任务是什么以及该任务的“边界条件”是什么。一些例子:

  • 您刚刚发现了新的离群值Joachimii亚种;-)没有理由将它们排除在外。排除所有其他人。

  • 您想预测螨的捕食时间。如果可以将预测限制为某些条件是可以接受的,则可以制定这些条件并排除所有其他样本,并说您的预测模型可以处理这种情况,尽管您已经知道确实会发生其他情况(此处描述异常值)。

  • 请记住,借助模型诊断排除数据会产生一种自我实现的预言或过度乐观的偏见(即,如果您声称您的方法通常适用):您排除的样本越多,因为它们不适合您假设,其余样本满足的假设越好。但这仅仅是因为排斥。

  • 目前,我手头有一个很差的测量任务(我知道我认为该测量结果不好的物理原因),还有一些原因使它看起来“很奇怪”。我要做的是从(predicitve)模型的样本中排除这些样本,但是分别对这些样本进行测试,因此我可以说出我的模型针对那些我会一次出现的异常值的鲁棒性一会儿。因此,应用程序需要以某种方式或其他方式来处理这些异常值。

  • 观察异常值的另一种方法是问:“它们对我的模型有多大影响?” (杠杆)。从这个角度来看,您可以测量相对于奇怪训练样本的鲁棒性或稳定性。

  • 无论使用哪种统计程序,它都不会识别任何异常值,也可能具有误报。您可以像其他诊断测试一样描述异常值测试过程:它具有敏感性和特异性,并且-对您更重要-它们对应于(通过数据中的异常值)正负预测值。换句话说,特别是如果您的数据具有异常值很少时,由异常值测试确定的案例确实是异常值的概率(即不应包含在数据中)可能会非常低。
    我相信,有关手头数据的专家知识通常比统计检验更擅长于发现异常值:该检验与它背后的假设一样好。一刀切的人通常对数据分析并不是很有效。至少我经常遇到一种离群值,在这种情况下,专家(关于那种类型的测量)可以毫无问题地识别出信号的确切部分,而自动化过程常常会失败(很容易让他们检测到存在异常现象。问题,但是很难让他们找到问题的开始和结束的位置。


这里有很多很好的信息。我特别喜欢的要点#4&5
呱-恢复莫妮卡

4

对于单变量离群值,有Dixon比率检验和Grubbs检验假设正态性。要测试异常值,您必须假设总体分布,因为您试图证明观测值来自假定分布是极端还是异常。我在1982年的《美国统计学家》上有一篇文章,在此之前我可能已经引用过。该文章表明,即使对于某些非正态分布,迪克森比检验也可以用于小样本中。Chernick,MR(1982)“关于小样本中狄克逊比的鲁棒性的注记”,美国统计学家p140。对于多元离群值和时间序列中的离群值,参数估计的影响函数是用于非正式检测离群值的有用措施(我不知道为他们构建的正式测试的数量,尽管此类测试是可能的)。“统计数据中的异常值用于异常值检测方法的详细处理。


3

参见http://www.waset.org/journals/waset/v36/v36-45.pdf,“关于非线性回归中的异常检测” [ sic ]。

抽象

离群值的检测非常重要,因为它们有责任在线性和非线性回归分析中产生巨大的解释性问题。在线性回归中,但在非线性回归中,离群值的识别已经完成了许多工作。在本文中,我们提出了几种用于非线性回归的离群值检测技术。主要思想是使用非线性模型的线性逼近,并将梯度视为设计矩阵。随后,制定了检测技术。开发了六种检测措施,结合了三种估计技术,例如最小二乘,M和MM估计器。研究表明,在这六个度量中,只有学生化残差和库克距离与MM估计器相结合,


+1尽管英语(和数学排版)存在明显问题,但本文似乎是对该问题的有益贡献。
ub

2

离群点是离“某个基线”“太远”的点。诀窍是定义这两个短语!使用非线性回归,不能只使用单变量方法来查看离群值是否与最佳拟合曲线“相距太远”,因为离群值会对曲线本身产生巨大影响。

我和罗恩·布朗(Ron Brown)开发了一种独特的方法(我们称其为ROUT-鲁棒回归和离群值消除),用于通过非线性回归检测离群值,而不会使离群值对曲线的影响太大。首先使用鲁棒的回归方法拟合数据,其中离群值影响很小。这构成了基线。然后,使用错误发现率(FDR)的思想来定义一个点何时离该基线“太远”,以及离群值也是如此。最后,它删除已识别的异常值,并按常规拟合其余点。

该方法发表在开放存取期刊上:Motulsky HJ和Brown RE,使用非线性回归拟合数据时检测异常值–一种基于鲁棒非线性回归和错误发现率的新方法,BMC Bioinformatics 2006,7:123。这是摘要:

背景。 非线性回归与线性回归一样,假设理想曲线周围的数据分散遵循高斯或正态分布。此假设导致熟悉的回归目标:最小化点与曲线之间的垂直距离或Y值距离的平方和。离群值可能会影响平方和计算,并导致产生误导性的结果。但是,我们不知道在用非线性回归拟合曲线时常规地识别异常值的实用方法。

结果。 我们描述了一种通过非线性回归拟合数据时识别异常值的新方法。我们首先基于散射遵循洛伦兹分布的假设,使用鲁棒的非线性回归形式对数据进行拟合。我们设计了一种新的自适应方法,该方法会随着方法的发展逐渐变得更加强大。为了定义异常值,我们采用了错误发现率方法来处理多个比较。然后,我们删除异常值,并使用普通的最小二乘回归分析数据。由于该方法结合了稳健的回归和离群值消除,因此我们将其称为ROUT方法。

在分析所有散点均为高斯的模拟数据时,我们的方法仅在大约1-3%的实验中(错误地)检测到一个或多个异常值。当分析被一个或多个离群值污染的数据时,ROUT方法在离群值识别方面表现良好,平均错误发现率小于1%。

结论。 我们的方法结合了鲁棒非线性回归的新方法和离群值识别的新方法,可以从非线性曲线拟合中识别离群值,且具有合理的功效和极少的假阳性。

(据我所知)尚未在R中实现。但是我们在GraphPad Prism中实现了它并在Prism帮助中提供简单说明。


0

您的问题太笼统了。没有排除“异常值”的最佳方法。

您必须了解“异常值”的一些属性。或您不知道哪种方法最好。确定要使用的方法后,需要仔细校准方法的参数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.