如何在R中创建行人事件与州人口的比率以优化线性模型分析
问题背景
- 你目前已完成分州日度交通事故数据聚合、线性回归拟合的全流程,但现有回归系数缺乏跨场景的实际解释意义:比如路口项估计值0.009192的影响强度,会因为不同州的人口规模差异被稀释——人口基数小的州本身事故总量低,小系数对应的实际影响几乎可以忽略。
- 现有数据来自美国国家公路交通安全管理局的公开事故数据集,样例结构包含州编码、行人事件计数
PEDS、路口类型标识TYP_INT、事故发生日期等核心字段。
核心调整思路
要让指标和州人口规模挂钩,本质是把绝对数的行人事件计数,换算成以州人口为分母的标准化比率,消除不同州人口基数差异带来的数值偏差。
具体实现分两步:
- 准备和事故表州编码一一匹配的2019年各州常住人口基准数据
- 在日度聚合环节,把绝对数的行人事件数除以对应州的人口数,换算成固定尺度的比率。行业通用做法是换算为每10万人口对应的事件数,避免极小值带来的回归解读不便。
注意:你原来计算的
intersection指标是当日事故中路口类型的均值,本身是0-1区间的占比,和人口规模没有关系,不需要做人口标准化处理。
代码调整细节
1. 循环聚合阶段的修改
在原来的分州聚合逻辑中,插入人口匹配和比率计算步骤,替换原来仅计算绝对数的聚合逻辑:
# 预准备的州人口映射表:两列结构,STATE 与事故表的州编码完全对齐 # state_pop_map <- data.frame( # STATE = c(1,2,3,...), # state_pop = c(4903185, 731545, 727347, ...) # 2019年对应州的常住人口数 # ) state <- unique(df$STATE) for(i in state){ # 获取当前处理州的人口基准值 current_pop <- state_pop_map %>% filter(STATE == i) %>% pull(state_pop) df1<- df %>% filter(STATE==i) %>% dplyr::select(c(STATE,PEDS,DAY,MONTH,YEAR,TYP_INT)) %>% mutate(date = as.Date(as.character(paste(YEAR, MONTH, DAY, sep = "-"),"%Y-%m-%d"))) %>% group_by(date) %>% summarise( pedday = sum(PEDS), # 当日行人事件绝对总数 intersection = mean(TYP_INT), # 当日所有事故中路口类型的均值 state_pop = current_pop, # 关联当前州的人口基准 # 计算人口标准化后的行人事件率:每10万人口对应的当日行人事件数 ped_rate_day = pedday / state_pop * 100000 ) # 绘图部分同步替换y轴指标为标准化比率 setwd("~/Desktop/Statistics790/States_ts/figures") plots<-df1 %>% ggplot()+ geom_line(aes(x=date,y=ped_rate_day))+ ylim(0, max(df1$ped_rate_day, na.rm = T))+ theme_bw() ggsave(paste0("state_",i,".png"),width=8,height=6) ts1<-ts(df1,start=c(2019,1,1), frequency=365) setwd("~/Desktop/Statistics790/States_ts") ts1 %>% write.csv(paste0("state_",i,".csv"),row.names = F) }
2. 回归分析阶段的修改
把原来以绝对数pedday为因变量的模型,替换为以人口标准化后的比率ped_rate_day为因变量:
setwd("~/Desktop/Statistics790/States_ts") for(i in state){ print(paste0("-------------------------Analysis for State: ",i," -------------------------------")) df <- read.csv(paste0("state_",i,".csv")) print("------Linear Model (人口标准化后) ------") # 用每10万人口的行人事件率作为因变量,消除人口规模的影响 print(summary(lm(ped_rate_day ~ intersection, data = df))) }
调整后的结果解读
- 此时回归输出的路口项系数,代表当日路口事故占比每提升1个单位(即当日所有事故均发生在路口),每10万人口对应的日行人事件数的变化幅度。
- 这个解读完全不受州人口规模的影响,跨州对比的系数结果具备实际参考价值,不会再出现“小州系数影响微乎其微”的问题。
内容的提问来源于stack exchange,提问作者Moe
相关产品推荐
相关产品推荐

