在R

时间:2018-12-21 20:31:29

标签: r resampling

我正在处理横截面时间序列数据(一段时间内有许多不同的人)。在个人层面上,每个人都有一定数量的良好需求。关于每个时期有多少个人,该数据是不平衡的。对于每个时间段,我都将单个数据汇总为一个时间序列。

下的示例数据结构

横断面时间序列

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 :(得分: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

我认为代码是不言自明的。在每个组中,我们用X替换replicate次以重新采样其值,并计算两个所需的统计量。添加任何其他内容也很简单!