【问题标题】:how to interpolate data within groups in R using seqtime?如何使用 seqtime 在 R 中的组内插入数据?
【发布时间】:2020-03-14 14:04:28
【问题描述】:

我正在尝试使用 seqtime (https://github.com/hallucigenia-sparsa/seqtime) 来分析时序微生物组数据,如下:

meta = data.table::data.table(day=rep(c(15:27),each=3), condition =c("a","b","c"))
meta<- meta[order(meta$day, meta$condition),]
meta.ts<-as.data.frame(t(meta))
otu=matrix(1:390, ncol = 39)
oturar<-rarefyFilter(otu, min=0)
rarotu<-oturar$rar
time<-meta.ts[1,]

interp.otu<-interpolate(rarotu, time.vector = time, 
                      method = "stineman", groups = meta$condition)

插值返回以下错误:

[1] "Processing group a"
[1] "Number of members 13"
intervals
 0 
12 
[1] "Selected interval: 1"
[1] "Length of time series: 13"
[1] "Length of time series after interpolation: 1"
Error in stinepack::stinterp(time.vector, as.numeric(x[i, ]), xout = xout,  : 
  The values of x must strictly increasing

我尝试将方法更改为“hyman”,但它返回以下错误:

  Error in interpolateSub(x = x, time.vector = time.vector, method = method) : 
      Time points must be provided in chronological order.

我使用的是 R 版本 3.6.1,我对 R 有点陌生。

请谁能告诉我我做错了什么/如何解决这些错误? 非常感谢!

【问题讨论】:

    标签: r time-series interpolation


    【解决方案1】:

    我花了相当长的时间来尝试解决这个问题。这一切都归结为 meta 的数据结构以及用作time.vector 参数输入的生成时间变量。

    meta.ts 被转换为数据框时,所有字符串都会自动转换为因子 - 这包括 day

    要进行调整,您可以将代码编辑为以下内容:

    library(seqtime)
    
    meta <- data.table::data.table(day=rep(c(15:27),each=3), condition =c("a","b","c"))
    meta <- meta[order(meta$day, meta$condition),]
    meta.ts <- as.data.frame(t(meta), stringsAsFactors = FALSE) # Set stringsAsFactors = FALSE
    otu <- matrix(1:390, ncol = 39)
    oturar <- rarefyFilter(otu, min=0)
    rarotu <- oturar$rar
    time <- as.integer(meta.ts[1,]) # Now 'day' is character, so convert to integer
    
    interp.otu <- interpolate(rarotu, time.vector = time, 
                            method = "stineman", groups = meta$condition)
    

    作为奖励,请阅读 this 博客文章以获取有关 stringsAsFactors 参数的信息。字符串自动转换为因子是一种常见的困惑。

    【讨论】:

    • 这对 method="stineman" 非常有效。多谢。但是,当我将方法更改为“hymana”时,出现以下错误:样条线错误(time.vector,as.numeric(x[i,]),xout = xout,method = method):'y' 必须是增加或减少;请问您知道如何解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 2022-07-23
    • 1970-01-01
    • 2017-06-18
    • 2018-06-28
    • 1970-01-01
    相关资源
    最近更新 更多