我正在处理横截面时间序列数据(一段时间内有许多不同的人)。在个人层面上,每个人都有一定数量的良好需求。关于每个时期有多少个人,该数据是不平衡的。对于每个时间段,我都将单个数据汇总为一个时间序列。
下的示例数据结构横断面时间序列
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中这是可能的,但是我对如何编写代码或我需要问的正确问题感到困惑。感谢所有帮助!
答案 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
次以重新采样其值,并计算两个所需的统计量。添加任何其他内容也很简单!