识别非线性回归的异常值

机器算法验证 r 异常值 非线性回归
2022-03-17 13:01:45

我正在研究螨虫的功能反应领域。我想做一个回归来估计 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

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

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 中使用的客观测试并显示哪些数据点是异常值?
4个回答

R的包中提供了几个异常值测试,包括 Dixon 和 Grubb 的outliers测试。有关测试的列表,请参阅包的文档描述测试的参考在相应功能的帮助页面上给出。

如果您计划从数据中删除异常值,请记住,这并不总是可取的。例如,请参阅这个问题以进行讨论(以及有关如何检测异常值的更多建议)。

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

就我而言,例如

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

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

请注意,我的第三点与其他点不同:我不知道发生了什么。这可能是您要询问的那种异常值。然而,在不知道是什么原因造成的(并且这个原因使数据点无效)的情况下,很难说它不应该出现在数据集中。另外:您的异常值可能是我最有趣的样本...

因此,我经常说的不是异常值,而是可疑的数据点。这提醒大家,他们需要仔细检查它们的含义。

排除数据是否好(谁想仅仅为了获得异常值而查找异常值?)很大程度上取决于手头的任务是什么以及该任务的“边界条件”是什么。一些例子:

  • 您刚刚发现了新的异常值约阿基米亚种;-) 没有理由排除它们。排除所有其他人。

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

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

  • 我目前手头有一个任务,我有一堆不好的测量值(我知道我认为测量值不好的物理原因),还有一些“看起来很奇怪”的东西。我所做的是从(预测)模型的训练中排除这些样本,但用这些单独测试模型,这样我就可以说出我的模型对那些我知道会在一次而. 因此,应用程序需要以某种方式或其他方式处理这些异常值。

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

  • 无论您使用什么统计程序,它都不会识别任何异常值,或者也会出现误报。您可以像其他诊断测试一样表征异常值测试过程:它具有敏感性和特异性,并且 - 对您而言更重要的是 - 它们对应(通过数据中的异常值比例)对应于阳性和阴性预测值。换句话说,特别是如果您的数据具有非常少的异常值,那么异常值测试识别的案例确实是异常值(即不应该在数据中)的概率可能非常低。
    我相信关于手头数据的专家知识通常比统计测试更擅长检测异常值:测试与其背后的假设一样好。一刀切通常并不适合数据分析。至少我经常处理一种异常值,专家(关于那种测量类型)可以毫无问题地识别出被破坏的信号的确切部分,而自动化程序经常失败(很容易让他们检测到存在问题,但很难让他们找到问题的起点和终点)。

对于单变量异常值,假设正态性存在 Dixon 比率检验和 Grubbs 检验。要测试异常值,您必须假设总体分布,因为您试图证明观察值是来自假设分布的极端或不寻常的值。我在 1982 年的 American Statistician 上发表了一篇论文,我之前可能在这里引用过,这表明 Dixon 比率检验可以用于小样本,即使对于某些非正态分布也是如此。Chernick, MR (1982)“A Note on the Robustness of Dixon's Ratio in Small Samples”美国统计学家第 140 页。对于时间序列中的多元异常值和异常值,参数估计的影响函数是非正式检测异常值的有用度量(我不知道为他们构建的正式测试,尽管这样的测试是可能的)。“统计数据中的异常值”用于详细处理异常值检测方法。

请参阅http://www.waset.org/journals/waset/v36/v36-45.pdf,“关于非线性回归中的异常值检测”[原文如此]。

抽象的

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