【发布时间】:2018-09-07 21:28:04
【问题描述】:
我有一个 xts 时间序列对象,其中包含数据的数值。 str (dataTS)
An ‘xts’ object on 2014-02-14 14:27:00/2014-02-28 14:22:00 containing:
Data: num [1:4032, 1] 51.8 44.5 41.2 48.6 46.7 ...
Indexed by objects of class: [POSIXlt,POSIXt] TZ:
xts Attributes:
NULL
我想找到距离均值超过 (2 * s.d.) 的数据点。 我想从中创建一个新数据集。
[,1]
2015-02-14 14:27:00 51.846
2015-02-14 14:32:00 44.508
2016-02-14 14:37:00 41.244
2015-02-14 14:42:00 48.568
2015-02-14 14:47:00 46.714
2015-02-14 14:52:00 44.986
2015-02-14 14:57:00 49.108
2015-02-14 15:02:00 1000.470
2015-02-14 15:07:00 53.404
2015-02-14 15:12:00 45.400
2015-02-14 15:17:00 3.216
2015-02-14 15:22:00 49.7204
时间序列。 我想对异常值 3.216 和 1000.470 进行子集化
【问题讨论】:
-
只需
scale您的完整数据具有零均值和单位标准偏差(即 Z 变换您的数据);那么很容易确定哪些点与平均值相差> 2 sd。 -
您没有提供最小的样本数据集,所以我根据下面的一些样本数据添加了一个示例。请看一看。
-
问题中提供的示例
-
我通过使用 `meanD = mean(data); 解决了sdD = sd(data) outliers= subset(data, (data[,1] > meanD + 2 * sdD) | (data[,1]
-
您已经手动缩放了值;当然也可以。您可以通过将两个条件总结为
abs(data[, 1] - meanD) > 2 * sdD来简化最后一个命令。
标签: r time-series