R 中向量的指数移动平均值

2023-12-05

我有一个简单的向量如下:

x = c(14.24, 13.82, 12.75, 12.92, 12.94, 13.00, 14.14, 16.28, 20.64, 17.64)

我正在尝试使用以下函数找到该向量的滚动 EMA -

library(TTR)
y = EMA(x, 5)

我得到的结果如下 -

 [1]     NA     NA     NA     NA 13.33400 13.22267 13.52844 14.44563 16.51042 16.88695

但是,我想要的结果如下 -

 [1]     14.24 14.03 13.06 13.43 13.33400 13.22267 13.52844 14.44563 16.51042 16.88695
  1. 第一个值应该与原始向量中的相同
  2. 第二个值应该是第一个和第二个值的 EMA
  3. 第三个值应该是前三个值的 EMA 向量
  4. 第四个值应该是向量中最初四个值的 EMA

其余的计算由函数正确处理EMA

我尝试过的解决方案 -

  1. 运行以下命令 -zoo::rollapplyr(x, width = 5, FUN = EMA, partial = TRUE)会给出错误,因为 EMA 有自己的滚动窗口。

  2. 使用功能stats::filter有效,但答案不正确,因为我不确定比率参数的正确值。指数加权移动平均线的快速 R 实现?这是一个自定义函数。

ema_2 <- function (k, width) {
  ratio <- 2/(width + 1)
  c(stats::filter(k * ratio, 1 - ratio, "convolution", init = k[1]))
}

理想的解决方案最多需要两倍的计算时间EMA的函数TTR图书馆。

以下是 Waldi 和 Andre 分享的 2 个解决方案的性能结果。

              expr     min       lq     mean   median       uq      max neval cld
    TTR::EMA(x, 5) 433.593 457.5815 500.9478 477.0535 530.7105  1128.49  1000   a
        EMA3(x, 5) 445.388 468.9585 515.2009 490.4345 546.5025  1843.46  1000   a
 rollmeanEMA(x, 5) 436.689 461.0885 535.7035 481.8815 538.3150 33122.75  1000   a

Thanks!


看着EMA的C源代码显示第一个值是平均窗口的平均值:

    /* Raw mean to start EMA */
    double seed = 0.0;
    for(i = first; i < first + i_n; i++) {
      d_result[i] = NA_REAL;
      seed += d_x[i] / i_n;
    }
    d_result[first + i_n - 1] = seed;

这可以很容易地计算出来以替换 NA :

x = c(14.24, 13.82, 12.75, 12.92, 12.94, 13.00, 14.14, 16.28, 20.64, 17.64)

EMA2 <- function(x,n) {
  y = TTR::EMA(x, n)
  noNA <- which.min(is.na(x))
  y[noNA:(noNA+n-2)] <- cumsum(x[noNA:(noNA+n-2)])/1:(n-1)
  y
}

EMA2(x,5)
#>  [1] 14.24000 14.03000 13.60333 13.43250 13.33400 13.22267 13.52844 14.44563
#>  [9] 16.51042 16.88695

这也适用于领先的 NA:

x = c(NA, NA, 14.24, 13.82, 12.75, 12.92, 12.94, 13.00, 14.14, 16.28, 20.64, 17.64)
EMA2(x,5)
#> [1]       NA       NA 14.24000 14.03000 13.60333 13.43250 13.33400 13.22267 13.52844 14.44563
#> [11] 16.51042 16.88695

这个短向量的计算开销是最小的,对于较长的向量来说应该更好:

microbenchmark::microbenchmark(TTR::EMA(x,5),EMA2(x,5),times=1000)

#> Unit: microseconds
#>           expr   min    lq     mean median     uq   max neval cld
#> TTR::EMA(x, 5) 157.7 161.8 181.6156  164.0 180.55 593.5  1000  a 
#>     EMA2(x, 5) 164.2 167.5 193.0643  170.6 193.20 857.1  1000   b
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 中向量的指数移动平均值 的相关文章

  • Rsolnp:在 cbind(temp, funv) 中:结果的行数不是向量长度的倍数(arg 1)

    我是 stackoverflow 的新手 搜索了很多 但找不到我的问题的答案 我正在尝试使用优化包 Rsolnp 来最小化以下问题 尽管求解器为我提供了解决方案 但每次运行代码时我都会收到以下警告消息 警告消息 1 在 cbind temp
  • 在 r 中导出矩阵

    我想在 R 中导出一个矩阵 并保留行和列的名称 当我使用 write table 或 write csv 时 我得到一个带有新列的矩阵 我该如何使用这个功能 感谢您的帮助 您不会获得新列 行名称将保存为文本文件中的第一列 因此 您可以指定在
  • LaTex 中与 knit 和 xtable 交叉引用的问题

    我目前正在与 R Studio 合作 使用 LaTex 中的 R knitr 生成 PDF 文档 在这些文档中 我想在文本中引用的表格中展示我的部分结果 我使用 R 中的 xtable 包生成这些表 它运行良好并为我提供了正确的表 到目前为
  • 如何获得 STAN 中最大似然估计的标准误差?

    我在 Stan 中使用最大似然优化 但不幸的是optimizing 函数不报告标准错误 gt MLb4c lt optimizing get stanmodel fitb4c data win data init inits STAN OP
  • 将命名参数列表传递给函数?

    我想编写一个小函数来从适当的分布生成样本 例如 makeSample lt function n dist params values lt makeSample 100 unif list min 0 max 10 values lt m
  • 基于另一个数据集获取数据集的子集

    假设我有一个数据集 即 dat1 ID block plot SPID TotHeight 1 1 1 4 44 5 2 1 1 4 51 3 1 1 4 28 7 4 1 1 4 24 5 5 1 1 4 27 3 6 1 1 4 20
  • 如何对同一列上的数据帧列表中的所有数据帧进行排序?

    我有一个数据框列表dataframes list 举个例子 我把dput dataframes list 在底部 我想对列列表中的所有数据框进行排序enrichment 我可以对一个数据框进行排序 first dataframe lt da
  • 计算例如具有多列 data.frames 的列表中的平均值

    我有几个 data frames 的列表 每个 data frame 有几列 通过使用mean mylist first dataframe a我可以得到这个 data frame 中 a 的平均值 但是我不知道如何计算列表中存储的所有 d
  • 如何从 R 运行带有特定模块的 perl 脚本?

    我可以从终端运行 perl 脚本 myperlscript pl 没有任何问题 但是 如果我尝试从 RStudio 中运行相同的 perl 脚本 则会出现以下错误 command lt myperlscript pl outputfile
  • 如何从 Fortran 调用 R 函数?

    根据http gallery rcpp org articles r function from c http gallery rcpp org articles r function from c Rcpp 允许用户从 C 调用 R 函数
  • R中的一元加/减是什么?

    来自 R 的详细信息部分Syntax http stat ethz ch R manual R patched library base html Syntax html帮助页面 定义了以下一元和二元运算符 他们被列出 在优先级组中 从最高
  • 多功能测试仪替代 system.time

    我已经看到 我认为是这样 使用了类似于 system time 的函数 它可以同时评估多个函数的时间并输出一个输出 我不记得它是什么 并且用我正在使用的术语进行互联网搜索并没有得到我想要的响应 有人知道我正在谈论的功能的名称 位置吗 你想要
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • 在 R 格子包中微调点图

    我正在尝试为不同的数据集和不同的算法绘制一堆 ROC 区域 我有三个变量 方案 指定所使用的算法 数据集 是正在测试算法的数据集 以及 Area under ROC 我正在 R 中使用lattice库 命令如下 点图 方案 Area und
  • Purrr::map_df() 删除 NULL 行

    使用时purrr map df 我偶尔会传递一个数据框列表 其中一些项目是NULL 当我做 map df 返回行数少于原始列表的数据框 我想发生的事情是这样的map df calls dplyr bind rows 它忽略了NULL价值观
  • 以引用透明的方式从函数的省略号参数中提取符号

    事情又发生了 我正要按下发布答案按钮的问题被删除了 我正在寻找一种方法来从函数的省略号参数中提取绑定到符号的对象的值以及符号 也就是说 我试图以引用透明的方式从省略号中提取符号 我尝试过使用替代品和lazy dots 但没有成功 funct
  • 在 R 中使用 lapply 绘制多个数据帧

    我正在尝试使用 lapply 函数绘制多个数据帧 每个数据帧一个图 但是尽管有关此主题的所有帖子我都找不到答案 因为我不断收到错误 图的输出列表为空 我的数据结构如下 df1 lt mtcars gt group by cyl gt tal
  • 将数据框中重叠的范围合并到唯一的组中

    我有一个 n 行 3 的数据框 df lt data frame start c 178 400 983 1932 33653 end c 5025 5025 5535 6918 38197 group c 1 1 2 2 3 df sta
  • 更改闪亮 R 中的默认浏览器

    我在 RStudio 中使用 01 hello 虽然在 IE 中默认打开程序时它不会显示直方图 但即使在 Chrome 中 滑块也不起作用 我无法滑动条形图并看到直方图中的变化 如何更改 R 中的默认浏览器 以便闪亮启动 Chrome 而不

随机推荐

  • 在 Windows 7 上使用外部程序时,git diff tmp 文件在 Windows 上无效

    我正在关注来自的文档Git配置页面并尝试将其应用到我的 Windows 7 环境中 当我运行 git diff file0 时 我在 P4Merge 中收到错误 Errors tmp cH9ccM file0 is or points to
  • 使用 EL 动态访问 Bean 属性

    我需要在 JSP 页面中使用 EL 访问其名称存储在变量中的 bean 的属性 如果我要访问名为 description 的属性 那么我会访问 bean description 但由于该属性的名称存储在变量 name 中 我不知道如何在 E
  • JavaMail 中的 HELO 名称无效

    使用 JavaMail 发送邮件时出现以下错误 这是不寻常的 因为它已经工作了一段时间 直到现在还没有做出任何改变 550 Access denied Invalid HELO name See RFC2821 4 1 1 1 com su
  • Jhipster / md-button 不是已知元素

    你好我正在使用 JHipster 4 0 1 我想将 Angular 2 材料集成到我的 home component 中 我做了 npm 安装材料 npm install angular2 核心 按钮
  • 意外的阴影和“已删除[符号]”

    如果您对以下代码求值两次 结果将会不同 谁能解释一下发生了什么事吗 findHull points Module Needs ComputationalGeometry ConvexHull points findHull RandomRe
  • 将 javascript 变量发送到 django 视图

    我正在 JavaScript 变量 例如 var url 中获取浏览器的当前 url 不断变化 我有一个 django 模型 Url 我想使用视图函数创建它的对象create url 早些时候当我使用表单时 我使用request POST
  • 如何从服务检查新的 android 6.0 权限

    我有一个 Android 6 0 应用程序 其未绑定的 Android 服务连接到 Google API 以接收 Fused API 位置提供商更新 为此 我需要 ACCESS FINE LOCATION 权限 一切都工作正常 直到更新到棉
  • WebSphere MQ 7.1 帮助需求 - 访问或安全性

    我想在 WebSphere MQ 服务器上创建一个队列管理器和一个队列 并且我想做两件事 1 使用 WMQ Explorer 从客户端访问队列管理器和队列 2 编写一个在客户端上运行的 Java 独立应用程序 并从队列中放入和接收消息 但是
  • 为画布上的矩形设置 zindex 不会将其置于前面

    我对画布和在其上绘制的矩形有疑问 他们以相反的创建顺序获得事件 最新的在顶部 而不是 zindex 的顺序 我已将 ItemsControl 与资源列表绑定 然后有一个画布作为项目面板
  • 是否有微数据标签来指定值是数字、字符串还是布尔值?

    有一个 HTML5 属性称为datetime指示值类型是日期时间 但我看不出有什么办法可以表明是否itemprop值在spantag 是字符串 布尔值或数字 我认为没有办法将此类信息包含在微观数据中 对吗 如果是这样 是否有某种原因应省略此
  • PHP解码json

    这里有人可以帮我用 php 解码 json 吗 我正在尝试解码 json api url 这是我现在所拥有的 string username someusername unconfirmed reward 0 08681793 send t
  • 通过 api/cli 启用和禁用 S3 复制规则

    我已在 S3 存储桶上设置了复制规则 以填充 preprod 存储桶以进行测试 这意味着我希望能够轻松地打开和关闭复制 并可能根据需要转储和刷新复制存储桶 我正在为此创建一个脚本 但很难找到一种在使用 AWS 控制台之外轻松打开和关闭复制规
  • TripleDES 加密和解密给出奇怪的结果

    我有一个有效的实施TripleDESCng 针对一些测试向量进行测试 但会发生以下情况 当我加密纯文本时This is a sample message 24 字节 因此这将是 3 个块 十六进制为546869732069732061207
  • DynamicJasper - 如何添加子报表作为列?

    Overview 我有一个 Java 类 其中有一个ArrayList必须打印到 jasperReport 作为子报表 我正在使用 DynamicJasper 库 关于这个问题的示例已被修改 因此可以复制 然而 实际情况的数据有所不同 Pr
  • 将单列分成 3 列,保留原始列 (R)

    我有一个独特的字符列 位于 DD HH MM 中 我试图将该列分成 3 个新的numeric列 我对单独函数的问题是它替换了原始列 并且我不知道如何传递多个条件SEP 请注意 并非每个观察结果都有 DD 我当前的代码如下所示 separat
  • IPC 性能:命名管道与套接字

    每个人似乎都说命名管道比套接字 IPC 更快 他们快了多少 我更喜欢使用套接字 因为它们可以进行双向通信并且非常灵活 但如果速度相当大 我会选择速度而不是灵活性 您将获得的最佳结果共享内存解决方案 命名管道仅比 16 好TCP 套接字 结果
  • C# 与 C++/CLI 中的 Unicode 字符串文字

    C char z u201D int i int z C CLI wchar t z u201D int i int z In C i正如我所期望的那样 变成了 8221 201D 另一方面 在 C CLI 中 它变成了 65428 FF9
  • Java 获取 MIB 中 OID 的名称/描述

    我正在编写一个网络管理系统 并且需要能够打印出从 SNMP 陷阱接收到的 OID 后面有意义的名称 由于该系统的性质 大小 对于正在使用的每台设备上的每个 MIB 手动将每个 OID 映射到有意义的名称并不是一个好主意 话虽如此 是否有一种
  • 更快的 iPhone PNG 动画

    目前 我的计时器上有一个 PNG 动画 每 0 01 秒触发一次 然而 性能并不是最佳的 而且动画速度明显很慢 我有超过 2000 张图片 有更好的方法来实现这一点吗 我在下面发布了与我的方法类似的内容 timer NSTimer sche
  • R 中向量的指数移动平均值

    我有一个简单的向量如下 x c 14 24 13 82 12 75 12 92 12 94 13 00 14 14 16 28 20 64 17 64 我正在尝试使用以下函数找到该向量的滚动 EMA library TTR y EMA x