R中如何实现前一时间步滞后回归及ggplot x轴年月设置
R语言数据分析两个问题的实现方案
1. t-1期自变量回归实现
你的数据是分城市的面板结构,必须先按城市分组再计算滞后项,否则会出现不同城市首尾数据错位的问题,具体实现步骤如下:
- 第一步:按城市、年、月排序数据,分组构造t-1期滞后变量,剔除无滞后值的首条观测
library(dplyr) reg_data <- df %>% arrange(City, Year, Month) %>% group_by(City) %>% mutate( lag_deaths = lag(Deaths, 1), lag_guns = lag(Guns, 1), lag_shootings = lag(Shootings, 1) ) %>% ungroup() %>% filter(!is.na(lag_deaths))
- 第二步:拟合回归模型,若需要控制城市固定效应,把城市作为因子加入自变量即可
# 基础回归 model <- lm(Deaths ~ lag_deaths + lag_guns + lag_shootings, data = reg_data) summary(model) # 加入城市固定效应的回归 model_fe <- lm(Deaths ~ lag_deaths + lag_guns + lag_shootings + as.factor(City), data = reg_data) summary(model_fe)
2. ggplot x轴同时展示年月信息
数值型的年、月列无法被ggplot识别为时间维度,会导致刻度错乱,需要先构造标准日期格式列,再自定义x轴刻度:
library(ggplot2) library(lubridate) # 构造日期列:统一取每月1日作为日期标记,满足R日期格式的日字段要求 plot_data <- df %>% mutate(time_mark = ymd(paste(Year, Month, "1", sep = "-"))) # 绘图 ggplot(plot_data, aes(x = time_mark, y = Deaths)) + geom_line(linewidth = 1) + # 可替换为你需要的图层,比如geom_point()、geom_col() scale_x_date( date_labels = "%Y-%m", # 标签格式,要显示中文可改为"%Y年%m月" date_breaks = "2 months", # 主刻度间隔,根据数据跨度可调整为1 month/6 months/1 year date_minor_breaks = "1 month" ) + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 标签倾斜避免重叠
格式参数说明:
%Y代表4位年份,%m代表2位月份,可根据展示需求自由组合标签格式。
内容的提问来源于stack exchange,提问作者Yannik
相关产品推荐
相关产品推荐

