【问题标题】:How do I convert my time "bins" to continous for a time series analysis in R?如何将我的时间“箱”转换为连续的以在 R 中进行时间序列分析?
【发布时间】:2021-06-01 08:33:47
【问题描述】:

有以下数据:

#demo data:
set.seed(1234)

library(tidyverse)
library(fs)
n = 100
time= c(15, 30, 60, 90, 120, 180, 240, 300)
treat = factor(c("trt1", "trt2", "tr1+2", "trt1+2+3"))
intensity = c(sample(1:400, n, replace=TRUE))
              df <- expand.grid(time= time, treat = treat, intensity=intensity)
df <- data.frame(
                time= rep(df$time, each = 100),
                intensity = rep(df$intensity),
                treat = rep(df$treat, each = 100)
)

我最终希望拟合一个模型,该模型旨在将波动与物理学中的传统阻尼振荡器函数进行比较。这是我的问题的图形化视图:

这可能是我对如何在这里使时间连续的问题感到愚蠢,但重要的是要保留这些值,并且它不仅仅是一个单变量时间序列数据框。否则,这就是我会做的。但是还有一个治疗因素变量也应该保留。

它应该看起来更像这样(excel 快速图表),但我需要提取函数的数学内容,以便跟踪 R 输出中曲线的峰值:

解决方案将涉及以下两个方面:1) 能够在 R 中重现曲线,以及 2) 随着时间的推移生成开始拟合多项式模型所需的密度数据。

【问题讨论】:

  • 第二幅图中的点与第一幅图中的分布有何关系?我知道颜色对应于两者的处理,但是每个分布中的点是平均值、中位数还是其他值的汇总?
  • 这些点只是测量的时间点。分布不应该是相同的,因为要匹配的图片有太多的识别信息。但它们的处理方式相似。
  • 所以让我们选择一个点来解释:在左起第一个点,即时间点 = 0,但测量强度 (y) = high # 在该级别的强度计数
  • 谢谢。不过,那是我的问题。在您的示例数据中,df 只有时间和处理(x 值和颜色),我们应该使用什么来计算 y 值?另外,silence 没有在您的演示数据中定义,我认为在对expand.grid() 的调用中它应该是silence=time
  • 我在制作虚拟数据时的错误 - 我需要添加 y 值,它现在应该在里面。另外,请注意,虚拟数据不会仅仅因为强度是随机抽样的而产生类似的分布。

标签: r graph time-series modeling


【解决方案1】:

这是假数据的密度图:

df %>% 
  ggplot(aes(x=intensity, fill=treat)) + 
  geom_density(color="transparent", alpha=.25) + 
  facet_wrap(~as.factor(time), nrow=1) + 
  theme_bw() + 
  theme(panel.grid=element_blank())

现在,如果您想将其绘制成线图,您可以计算每个治疗时间对的最高密度值,然后将其绘制出来:

df %>% group_by(treat, time) %>% 
  summarise(d = max(density(intensity)$y)) %>% 
  ggplot(aes(x=time, y=d, colour=treat)) + 
  geom_point() + 
  geom_line() + 
  theme_classic() + 
  labs(x="Time", y="Intensity")

您要求的最后一部分是随时间生成密度数据。如果我明白你想做什么,你可以这样做:

out <- df %>% group_by(treat, time) %>% 
  summarise(as.data.frame(density(df$intensity)[c("x", "y")]))

head(out)
# # A tibble: 6 x 4
# # Groups:   treat, time [1]
#   treat  time     x          y
#   <fct> <dbl> <dbl>      <dbl>
# 1 tr1+2    15 -20.5 0.00000608
# 2 tr1+2    15 -19.6 0.00000838
# 3 tr1+2    15 -18.7 0.0000114 
# 4 tr1+2    15 -17.8 0.0000153 
# 5 tr1+2    15 -17.0 0.0000203 
# 6 tr1+2    15 -16.1 0.0000267 

x 变量是强度评估点,y 变量是x 值的密度曲线高度。

【讨论】:

  • 做得很好。我添加了一个平滑层只是为了更容易地向我的老板展示(他们讨厌折线图,所以我不具体是不好的),但除此之外这是完美的。
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2022-01-04
  • 2013-12-25
  • 2021-12-05
  • 2018-04-11
  • 1970-01-01
  • 2018-06-17
相关资源
最近更新 更多