我已经运行了R函数stl()函数并使用其生成的残差进行grubbs测试。代码如下:
stl.res = stl(dataset, s.windows='periodic')
residuals = as.numeric(strl.res$time.series[, "remainder"])
grubbs.result = grubbs.test(residuals)
strsplit(grubbs.result$alternative," ")[[1]][3]
## [1] "38.4000349179783"
outlier = as.numeric(strsplit(grubbs.result$alternative," ")[[1]][3])
outlier
## [1] 38.40003492
which(residuals == outlier)
## integer(0)
我的问题是为什么which()
的返回值为0.实际上residuals[1920] = 38.4000349179783
。所以which()
的调用应返回值为1921而不是0.我猜这是一个精度问题。我尝试了很多方法,但没有设法解决它。
非常感谢任何帮助。
答案 0 :(得分:0)
如果它确实是一个精确的问题(可能是R FAQ 7.31),那么有各种方法来解决它。
# this is an approximation of your test
x <- c(1, 2, 38.4000349179783, 4, 5)
y <- 38.40003492
> x == y
[1] FALSE FALSE FALSE FALSE FALSE
# so which doesn't return anything
# one basic approach
> which(abs(x - y) < .00001)
[1] 3
您还可以使用all.equal()进行操作,但检查差异小于预先选择的限制可能是最简单的。
答案 1 :(得分:0)
也许您可以按以下方式使用isTrue()
和all.equal()
:
which(sapply(residuals, function(v) isTrue(all.equal(v,outlier))) == T)