【问题标题】:Change Points for Normalized data标准化数据的变化点
【发布时间】:2014-12-10 20:15:19
【问题描述】:

我有一个标准化为区间 [0,1] 的数据集。
我试图找出数据中的变化点。
也就是说,如果我将数据绘制为折线图,我必须找到峰值的起点。
数据就是这种格式

1 0.00000000 2 0.01617486 3 0.01814208 4 0.01530055 5 0.01857923 6 0.01595628 7 0.01945355 8 0.01530055 9 0.01530055 10 0.01639344 11 0.01573770 12 0.01092896 13 0.01836066 14 0.01551913 15 0.01945355 16 0.26841530 17 0.14754098 18 0.01726776 19 0.01704918 20 0.01726776 21 0.01945355 22 1.00000000 23 0.08459016 24 0.02732240 25 0.02579235 26 0.01551913 27 0.01923497 28 0.10185792 29 0.12765027

参考上一篇文章后,我尝试了这段代码。

library(data.table)
myDT <- as.data.table(t1)
myDT[,change:=t1-t1[1]]
myDT

但它显示所有变化为 0

1:0.00000000 0 2:0.01617486 0 3:0.01814208 0 4:0.01530055 0 5:0.01857923 0 --- 135:0.12459016 0 136:0.10032787 0 137:0.10885246 0 138:0.16109290 0 139:0.44371585 0

请帮帮我

【问题讨论】:

  • 嘿@dvs,stats.stackexchange.com 中有很多 R 用户,也许将来会是一个更好的发帖地点?不过我会试一试...
  • stat.Stackexchange 用户建议在堆栈溢出中发布,因为它包含代码
  • 我的立场是正确的。请参阅下面的我的尝试。
  • 对于data.table解决方案,试试myDT[, change:=c(t1[-1],0)-t1[1]]
  • 在绘图上看起来像心电图。

标签: r plot normalization


【解决方案1】:

试试这个:

t1["change"] <- c(t1[2:nrow(t1), 1], 0) - t1[, 1]

细分如下:

t1["change"] 

将为您的数据框添加一列

c(..., 0)

在列向量的末尾创建一个包含第 2 项的向量。然后你减去你的列向量来得到差异。

现在您需要注意的一件事是我放置的 0...您可能会得到一个应该丢弃的值。通常在进行运行平均或差异时,可用数据的长度会在向量的一端缩小,具体取决于您如何“移动”向量或滑动窗口的开始位置。

更新:如果您的代码检查 NA,您可以将 NA 放在我放置 0 的位置。

【讨论】:

  • 一个疑问,如何从这个差异值中识别出一瞥的开始
  • @dvs:是的,我想你是你的下一个问题!你所拥有的相当于你的函数的一种廉价衍生物。在这种情况下,峰值将由较大的正导数和较大的负导数(根据您的数据可能介于两者之间的中间值)来识别。因此,您可能需要在“更改”列中搜索“零交叉”...这可能是另一个名为 change2 的列(二阶导数,相同的过程,但更改列有差异)...并查找负值低于某个阈值。
猜你喜欢
  • 2018-05-19
  • 2017-01-20
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 2017-11-29
  • 2019-10-22
  • 1970-01-01
相关资源
最近更新 更多