在R中重新采样纵向时间序列数据

3

我正在处理横向时间序列数据(多个不同的个体随着时间变化)。在个人层面上,每个人都有一定数量的商品需求。这些数据在每个时期内的个体数量是不平衡的。对于每个时间段,我已将个体数据聚合成单个时间序列。以下是示例数据结构:

横向时间序列

Time | Person | Quantity
----------------------
11/18| Bob    | 2
11/18| Sally  | 1    
11/18| Jake   | 5
12/18| Jim    | 2   
12/18| Roger  | 8

时间序列
Time | Total Q
-------------
11/18| 8      
12/18| 10    

我想要做的是对每个时期进行重新采样(有放回地),将个体数量聚合,迭代X次,然后从引导中获得平均值和标准误差。

最终结果应该如下所示:

Time | Total Q | Boot Strap Total Mean  
-------------------------------------
11/18| 8       | 8.5 
12/18| 10      | 10.05 

这里有一些创建示例数据的代码:

library(tidyverse)

set.seed(1234)

Cross_Time = data.frame(x) %>%
     mutate(Period = sample(1:10, 50, replace=T),
            Q=rnorm(50,10,1)) %>%
     arrange(Period)

Timeseries = Cross_Time %>%
group_by(Period) %>%
summarize(Total=sum(Q))

我知道在R中这是可能的,但我不知道应该如何编码或需要问什么正确的问题。非常感谢任何帮助!

1个回答

0

我们可以做以下事情:

X <- 1000
Cross_Time %>% group_by(Period) %>%
  do({QS <- colSums(replicate(sample(.$Q, replace = TRUE), n = X))
  data.frame(Period = .$Period[1], `Total Q` = sum(.$Q), Mean = mean(QS), `Standard Error` = sd(QS))})
# A tibble: 10 x 4
# Groups:   Period [10]
#    Period Total.Q  Mean Standard.Error
#     <int>   <dbl> <dbl>          <dbl>
#  1      1    28.8  28.8          0.284
#  2      2    35.9  35.8          0.874
#  3      3   109.  109.           3.90 
#  4      4    48.9  48.9          2.16 
#  5      5    20.2  20.2          0.658
#  6      6    59.0  58.8          3.57 
#  7      7    88.7  88.6          2.64 
#  8      8    22.7  22.7          1.04 
#  9      9    47.7  47.7          2.46 
# 10     10    27.9  27.9          0.575

我认为这段代码相当自说明。在每个组中,我们使用replicate进行重复抽样,重复X次,并计算出两个所需的统计量。增加其他测试也很简单!


@Roger,我忘记添加“总Q”列了;现在已经更新。 - Julius Vainora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接