重新取样

时间:2015-10-14 21:44:37

标签: r bootstrapping sampling

我正在尝试为我的模型获取(bootstrapped)输入数据。

源文件:https://www.dropbox.com/s/dudzxhozr50uhr7/EddyData_2010.csv?dl=0

library("dplyr")
library("readr")
library("reshape2")
library("ggplot2")

sub <- read_csv("EddyData_2010.csv", 
                col_types = list(col_integer(), col_integer(), col_double(),
                                 col_double(), col_double(), col_double(),
                                 col_double(), col_double(), col_double(),
                                 col_double(), col_double(), col_double()),
                col_names = c("Year", "DoY", "Hour", "NEE", "LE", "H", "Rg",
                              "Tair", "Tsoil", "rH", "Ustar", "VPD")) %>%
  filter(DoY == 170) %>%
  mutate(hour = 1:48) %>%
  select(NEE:hour)

# Number of resampling 
n_resempling <- 1000 
result_resampling <- NULL

# Do the resampling
for (i in 1:n_resempling) {
  result_resampling <- sample(48, 48, replace = T) %>%
    slice(sub, .) %>%
    mutate(resempling_number = i) %>%
    bind_rows(. , result_resampling)
}

这会生成重新取样,例如

enter image description here

输出显示1000个bootstraps重新采样,每天有48个半小时的替换。

这是我的问题:

更换的重新取样是在一天中随机混合半小时而没有任何控制。例如,我不想在晚上混合半小时和在日子里混合半小时。结果导致之后的奇怪计算。是否有可能以这样的方式对此进行编码:我定义了什么是允许的,什么不是?

示例:

  • 只允许从晚上10点到下午5点重新采样
  • 夜间小时无法重新采样(反之亦然)

1 个答案:

答案 0 :(得分:2)

我为CRD设计做过天真的引导程序,但没有时间数据。这是时间序列数据吗?根据我的理解,您希望下午2点仅在下午2点而不是下午3点进行采样。理解采样对于进行正确的分析很重要,因为在R中真的很容易出错。

我注意到你使用循环来引导而不是包。 我使用'boot'包进行天真的bootstrap,所以我转向Google查看时间数据。这是我发现的,我道歉这是我所有的(由于缺乏代表,我无法发表评论) 使用启动包我会打赌任何东西比使用循环更快 您可以查看system.time(),特别是如果您有大量数据。

https://stat.ethz.ch/R-manual/R-devel/library/boot/html/tsboot.html

这是我如何处理我天真的引导程序:

class

我还找到了这个时间数据来源 http://eranraviv.com/bootstrapping-time-series-r-code/

对于不同设计的正确分析方法也是很好的资源:

http://people.stat.sfu.ca/~cschwarz/CourseNotes/

无论如何,对不起,我没有太多的帮助,但想分享一些想法。