在 R 中执行时间序列的 fft

2024-01-13

我想使用 FFT 将波拟合到时间序列。 目标是绘制具有不同谐波的图,并用它来预测 n 个数据点。

我正在使用的代码基于此answer https://stackoverflow.com/questions/41435777/perform-fourier-analysis-to-a-time-series-in-r from @灾难性故障 https://stackoverflow.com/users/2874779/catastrophic-failure

 nff = function(y = NULL, n = NULL, up = 10L, plot = TRUE, add = FALSE, main = NULL, ...){
  #The direct transformation
  #The first frequency is DC, the rest are duplicated
  dff = fft(y)
  #The time
  t = seq(from = 1, to = length(y))
  #Upsampled time
  nt = seq(from = 1, to = length(y)+1-1/up, by = 1/up)
  #New spectrum
  ndff = array(data = 0, dim = c(length(nt), 1L))
  ndff[1] = dff[1] #Always, it's the DC component
  if(n != 0){
    ndff[2:(n+1)] = dff[2:(n+1)] #The positive frequencies always come first
    #The negative ones are trickier
    ndff[length(ndff):(length(ndff) - n + 1)] = dff[length(y):(length(y) - n + 1)]
  }
  #The inverses
  indff = fft(ndff/as.integer(length(y)), inverse = TRUE)
  idff = fft(dff/as.integer(length(y)), inverse = TRUE)
  if(plot){
    if(!add){
      plot(x = t, y = y, xlab = "Time", ylab = "Data",
           main = ifelse(is.null(main), paste(n, "harmonics"), main), type="l", col="green")
      lines(y = Mod(idff), x = t, col = "red")
    }
    lines(y = Mod(indff), x = nt, ...)
  }
  ret = data.frame(time = nt, y = Mod(indff))
  return(ret)
}

对我来说,问题是,因为我的数据集中也有负值,所以我无法弄清楚为什么包含正值。

这是原著的剧情data https://drive.google.com/drive/folders/1P_oRxJW82OrdDOB8ND5Xd6I-COgGZveM?usp=sharing

与 fft 后的图相比

我如何调整代码,使谐波也涵盖缺失的负值,以及如何使用它来计算(预测)接下来的 n 个时间点?


当您尝试使用以下命令绘制结果时会出现问题Mod(idff) and Mod(indff)如下:

...
  lines(y = Mod(idff), x = t, col = "red")
}
lines(y = Mod(indff), x = nt, ...)

Mod将始终返回与复数大小相对应的正数。

由于您正在计算具有 Hermitian 对称性的序列(通过构造)的逆 FFT,因此您应该期望得到实值结果。但实际上,由于舍入误差,可能存在较小的虚部。通过仅提取实部,可以安全地忽略这些Re(idff) and Re(indff), 如下:

...
  lines(y = Re(idff), x = t, col = "red")
}
lines(y = Re(indff), x = nt, ...)

请注意,通常最好首先确认虚部与实部相比确实是非常小的数字,因为相反的情况表明频域值不具有预期的埃尔米特对称性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 R 中执行时间序列的 fft 的相关文章

  • 如何使用 sf::st_centroid 计算多边形的质心?

    我正在尝试使用新的 sf 包在 R 中操作一些巴西人口普查数据 我可以导入数据 但当我尝试创建原始多边形的质心时出现错误 library sf Donwload data filepath lt ftp geoftp ibge gov br
  • 从R中的字符串中匹配提取国家名称

    我一直在从网站上抓取评论数据 在此过程中 我能够获取包含用户名 评论数量 评论日期和国家 地区信息的字符串向量 它们看起来大致是这样的 raw lt c Anna 1025 North Carolina USA DEC 20 2017 Ja
  • 在 R 中创建缓冲区和计数点

    I asked 这个问题 https stackoverflow com questions 42498344 create buffer around spatial point data in r and count how many
  • 如何将闪亮 UI 输入框中的值传递回 R 脚本中的变量并运行它?

    我有以下代码source R我正打算逃离闪亮的 目前脚本中有硬编码值 例如 10000 55 15 200 等 以及这些值下面的一些矩阵相关元素 rnorm2 lt function n mean sd mean sd scale rnor
  • 如何在 R 中导入并绘制三角形网格?

    我想在 R 中绘制我的模型输出 它是格式为的三角形网格 x1 y1 z1 x2 y2 z2 x3 y3 z3 value 每行代表一个三角形 我想用以下方法绘制这些三角形value作为规模 mymesh lt structure c 0 9
  • 输出到文件时光栅图的分辨率较差

    我有一个相当高清晰度的全球地图栅格 想要绘制到文件 但似乎无法保持分辨率 绘制受限区域效果很好 但无论我使用什么方法 整个世界总是以降低的分辨率告终 我在这里错过了什么吗 我以前经常输出高分辨率栅格而没有出现此问题 但在这种情况下我无法确定
  • 根据 r 中另一个数据帧中的列填充数据帧中的列

    我有一个评论数据框 如下所示 df1 Comments Apple laptops are really good for work we should buy them Apple Iphones are too costly we ca
  • 使用填充美学两次,具有两种不同的比例[重复]

    这个问题在这里已经有答案了 我正在尝试在一组多边形的顶部使用分组箱线图来绘制一个图 并且希望使用填充美学来基于连续变量为多边形着色 并且箱线图基于单独的分组变量 我发现了几篇文章可以帮助我获得多边形上的箱线图 并且找到了其他有相关问题的人
  • 使用 Eclipse 和 Rserve 从 Java 调用 R 的简单程序

    我的应用程序必须执行 R 操作 例如 m matrix sample 0 1 100 rep T ncol 10 结果应该可供 Java 应用程序使用 The 预留套餐 http www rforge net Rserve 将 R 与其他语
  • 如何替换异常值?

    我有以下数据框 d lt data frame Open rnorm 10 5 1 如果我插入异常值 d Open 4 100 d Open 5 100 现在我想用正常值替换这些异常值 我尝试用以前的值替换它 但如果逐个出现异常值 则它不起
  • Rsolnp:在 cbind(temp, funv) 中:结果的行数不是向量长度的倍数(arg 1)

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

    我想计算数据帧的一列中正值和负值的数量 我在 R 中该怎么做 例如 这里是数据框 logFC logCPM LR PValue FDR Bra15066 5 630822 5 184586 73 79927 8 647868e 18 4 0
  • 如何提取与 R 中主题 ID 列表匹配的行?

    我有一个包含许多主题 ID 的数据框 每个主题都有重复观察 我还有一个单独的数据框 其中只有一个主题 ID 列表 我想从更大的数据框中匹配和提取 如何以允许我引用不同数据帧中的SubjectID列表的方式编写代码 不确定我是否完全理解这个问
  • R 根据事件更新值

    我最近发布了这个问题 该问题已经与我在笔记本电脑上本地使用的 Mysql 数据库相关 由于我在 Mysql 中没有找到问题的解决方案 其他人似乎也没有找到解决方案 所以我想再次发布它 但现在与 R 相关 我使用带有 RMysql 包的数据库
  • 将 Instagram/youtube 嵌入 Shiny R 应用程序

    我想通过点击图表来播放 Instagram 或 Youtube 视频 例如显示异常值等 到目前为止 明确告诉 Shiny 视频内容是有效的 require shiny require ggplot2 data df lt data fram
  • 如何在for循环中引用变量?

    我正在循环访问不同的 data tables 和 data table 中的变量 但我在引用内部变量时遇到问题for loop dt1 lt data table a1 c 1 2 3 a2 c 4 5 2 dt2 lt data tabl
  • 如何从 Fortran 调用 R 函数?

    根据http gallery rcpp org articles r function from c http gallery rcpp org articles r function from c Rcpp 允许用户从 C 调用 R 函数
  • 我无法下载 R 中的 reshape2 包 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试安装 R 包时收到此响应 gt installed packages reshape2 Package LibPath V
  • 纵向序列数据的三次样条方法?

    我有一个串行数据 格式如下 time milk Animal ID 30 25 6 1 31 27 2 1 32 24 4 1 33 17 4 1 34 33 6 1 35 25 4 1 33 29 4 2 34 25 4 2 35 24
  • 使用 purrr 迭代替换数据帧列中的字符串

    我想用purrr使用以下命令在数据框列上迭代运行多个字符串替换gsub 功能 这是示例数据框 df lt data frame Year 2019 Text c rep a aa 5 rep a bb 3 rep a cc 2 gt df

随机推荐

  • 如何在 Blade 标签模板中使用本地化?

    第一个问题 我已经在许多类型的文本和事物中插入了本地化 但我不知道如何将其导入以下形式 Form label name here Form text name null array placeholder gt here Form subm
  • 您可以将存档文件直接添加到 XCode Organizer 吗?

    我有一个朋友为我制作了一个存档 我现在想将其提交到 itunesconnect 有什么方法可以将此存档添加到 XCode 的管理器中 还是我必须使用工作区文件来烘焙自己的存档 谢谢你 双击存档会将其添加到管理器中 我尝试拖入管理器 但它不适
  • 带有 xapian 引擎的 Django-haystack:如果模型具有 ManyToManyField,则无法执行 update_index

    将 django 升级到 1 7 后 我无法执行管理命令 update index Traceback most recent call last File opt pycharm 3 4 1 helpers pydev pydevd py
  • 批量命令冲突

    我制作了这个批处理脚本 它允许用户输入网站的 URL 以及以分钟为单位的时间 然后将 URL 添加到主机文件中 并在时间到期后将其删除 在一定时间内有效屏蔽某个网站 它在首次运行时通过创建另一个批处理文件从hosts文件中删除网站 然后使用
  • yml docker-compose 错误映射值在这里不允许

    我尝试了解容器 但我的 docker compose yml 文件有问题 在运行 docker compose up 后 我总是遇到相同的错误 错误 yaml scanner ScannerError 不允许映射值 这里 即使我更改了 do
  • 水平连接字符串元胞数组

    我希望水平连接字符串元胞数组的行 如下所示 start hello world test join me please finish helloworldtest joinmeplease 是否有任何内置函数可以完成上述转换 有一种简单的非
  • Spring Boot:部署到外部服务器时如何设置异步超时

    在使用嵌入式 tomcat 部署我的 spring boot 应用程序时 我设置异步超时如下 Bean public EmbeddedServletContainerFactory servletContainer TomcatEmbedd
  • Ruby 中非对象的“事物”示例

    一切都是对象 是我学到的关于 Ruby 的第一件事之一 但在 Peter Cooper 的书中Ruby 入门 从新手到专业人士 其中提到 almostRuby 中的一切都是对象 你能给我一些吗示例things那些不是 Ruby 中的对象 我
  • Gulp + babelify + browserify 问题

    我正在尝试使用 browserify 和 babelify 创建一个 gulp 任务 这是任务 var gulp require gulp var browserify require gulp browserify var source
  • 根据列值连接不同的表

    我有一个表R 其中包含表P的外键 在表P中有一列 告诉我表P中的记录是什么类型 与 P type 列中的可能值相关 根据表存在 因此 如果 P type 中的值为 C 则表示名为 C 的表 如果值为 D 则表示名为 D 的表 现在我想要一个
  • 文件的 listFiles() 不适用于符号链接?

    我有以下文件对象通过符号链接指向目录 File directory new File path symlink foo bar String files directory listFiles listFiles 返回 null 这是因为符
  • 如何循环加载所有用户的注册表配置单元

    使用管理员权限 我需要枚举 Windows 7 系统上的所有用户 甚至是已注销的用户 然后我需要为每个用户加载注册表配置单元并设置一个密钥 NetUserEnum 给我 SID 我猜 LsaEnumerateLogonSessions 也会
  • 在 Windows 上我应该将 Eclipse 安装到哪个文件夹?

    我运行的是 Windows 7启用UAC 我一直觉得很奇怪Eclipse http www eclipse org 不使用安装程序 也不使用 AppData 文件夹在 Windows 中存储其数据 但最近我不得不重新安装几次 硬盘驱动器问题
  • Python tkinter 文本修改回调

    在 python 2 7 中 每次 Tkinter Text 小部件中发生更改时 我都尝试获取回调 该程序使用基于此处找到的代码的多个框架 在 tkinter 中的两个框架之间切换 https stackoverflow com quest
  • wpf:获取组合框值

    我有一个名为 cbFileSize 的 WPF 组合框 我尝试获取所选值 如下所示 string tmp cbFileSize SelectedValue ToString MessageBox Show tmp 但 tmp 设置为 Sys
  • 无法加载数据源的类:com.databricks.spark.csv

    My build sbt文件有这个 scalaVersion 2 10 3 libraryDependencies com databricks spark csv 2 10 1 1 0 我正在独立集群模式下运行 Spark 我的 Spar
  • 有条件地应用 Angular 4 中的点击事件

    是否可以在模板中定义一个附加点击处理程序的条件 例如 我能得到的最接近的是评估单击方法入口处的条件 a class user a 如果标志有的话 有没有一种方法可以避免完全绑定到单击事件isOverflown是假的吗 另外 我不想使用ng
  • 使用 Maven 打包并运行 Scala Spark 项目

    我正在 Scala 中编写一个应用程序 它使用Spark http spark apache org 我正在使用 Maven 打包应用程序 并在构建应用程序时遇到问题 uber 或 fat 罐子 https stackoverflow co
  • 在后台处理ViewExpiredException并恢复表单值

    是否有一个无数据库 primefaces 和 keep session alive 的解决方案来防止或在恢复表单输入时在后台静默处理 ViewExpiredException 例如 具有 保持登录 cookie 的用户不希望被重定向到某种错
  • 在 R 中执行时间序列的 fft

    我想使用 FFT 将波拟合到时间序列 目标是绘制具有不同谐波的图 并用它来预测 n 个数据点 我正在使用的代码基于此answer https stackoverflow com questions 41435777 perform four