如何为时间序列分析(TSR)整合日度与周度观测数据集?
日度与周度时间序列数据集合并解决方案
核心逻辑
要整合日度混杂因素/暴露变量与周度病例数据,核心是**基于统一的周标识(WOY)**将日度数据按周聚合,再与周度病例表关联。之前直接取周均值效果不佳,大概率是部分变量不适合用均值聚合(比如分类变量、极值驱动的变量),需针对变量类型选择对应聚合方式。
具体步骤与代码实现
1. 统一周标识格式
确保两个数据集的WOY格式完全匹配(比如统一为YYYY-UU的字符串格式),避免连接时出现不匹配问题。
2. 按周聚合日度数据
根据变量类型选择合适的聚合逻辑:
- 连续型变量(如温度、污染物浓度):可选择均值、中位数、日极值(最高/最低)
- 分类/二值变量(如季节、是否节假日):取该周的统一标记(比如季节不会跨周,直接取周内任意一天的值即可)
- 计数类变量:取周内总和
基于你提供的日度处理代码,扩展聚合逻辑:
# 先处理日度数据,生成统一WOY(暂不转成factor,方便后续连接) tsday1 <- day1 %>% as_tibble() %>% mutate( year = as.numeric(format(date, "%Y")), month = as.numeric(format(date, "%m")), dow = as.factor(format(date, "%a")), WOY = format(date, format = "%Y-%U"), time = 1:nrow(.), season = ifelse(month %in% 4:9, "warm", "cold") ) # 按WOY聚合日度数据,按需选择聚合方式 weekly_exposure_confounders <- tsday1 %>% group_by(WOY) %>% summarise( # 连续变量示例:均值、日最高/最低值 avg_temp = mean(temp, na.rm = TRUE), max_temp = max(temp, na.rm = TRUE), # 分类变量示例:直接取周内统一值(季节不会跨周) season = first(season), # 计数变量示例:周内总和 total_pollution = sum(pollution, na.rm = TRUE), # 可选:保留周的起止日期,用于时间序列时间轴 week_start = min(date), week_end = max(date) ) %>% ungroup()
3. 合并周度病例数据
假设你的周度病例数据集名为weekly_cases,包含WOY和case_count字段,直接用left_join完成关联:
# 合并聚合后的日度变量与周度病例数据 weekly_ts_data <- weekly_exposure_confounders %>% left_join(weekly_cases, by = "WOY")
4. 适配时间序列分析
合并后的数据已为周度粒度,可直接用于TSR建模:
# 转换为时间序列对象(以周起始日期为时间轴) weekly_ts <- ts(weekly_ts_data$case_count, start = c(year(min(weekly_ts_data$week_start)), as.numeric(format(min(weekly_ts_data$week_start), "%U"))), frequency = 52) # 后续可基于weekly_ts及对应的混杂因素/暴露变量开展建模分析
优化建议
- 若之前周均值效果差,检查是否有异常值干扰均值,或尝试用中位数、分位数代替均值
- 确认WOY的周起始定义:
%U是周日起算的周,%W是周一起算的周,需与你的病例数据周划分规则一致 - 对于跨年度的周(如每年最后一周),确认WOY的格式是否与病例数据匹配,避免连接遗漏
内容的提问来源于stack exchange,提问作者堤美央
相关产品推荐
相关产品推荐

