You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中追踪两类面板调查数据的响应变化及变化率并可视化?

用ggplot2可视化面板调查数据的响应变化与变化率

当然可以!对于你的面板数据,核心是先把宽格式转成ggplot2友好的长格式,再计算响应比例和变化率,最后就能轻松做出两类变量的追踪图。下面是一步一步的实操代码和解释,都是新手能直接跑通的:

1. 准备工作:加载工具包并模拟数据

先加载处理数据和绘图的核心包,我会模拟和你结构一致的两类变量数据(包含colour和like两类,对应7次调查里的3个年份示例):

# 加载需要的包
library(tidyverse)

# 模拟8000个样本的面板数据(和你的结构完全匹配)
set.seed(123) # 固定随机数,保证结果可重复
df <- tibble(
  id = 1:8000,
  colour2011 = sample(0:1, 8000, replace = TRUE, prob = c(0.6, 0.4)),
  colour2016 = sample(0:1, 8000, replace = TRUE, prob = c(0.5, 0.5)),
  colour2018 = sample(0:1, 8000, replace = TRUE, prob = c(0.3, 0.7)),
  like2011 = sample(0:1, 8000, replace = TRUE, prob = c(0.4, 0.6)),
  like2016 = sample(0:1, 8000, replace = TRUE, prob = c(0.3, 0.7)),
  like2018 = sample(0:1, 8000, replace = TRUE, prob = c(0.2, 0.8))
)

2. 数据格式转换:宽转长

你的原始数据是宽格式(每列对应一个年份的变量),ggplot2需要长格式(一行对应一个样本的一次调查记录)。用pivot_longer拆分列名,把变量类型和年份分开:

df_long <- df %>%
  pivot_longer(-id, names_to = "variable_year", values_to = "response") %>%
  # 把"colour2011"拆成"colour"和"2011"
  separate(variable_year, into = c("variable", "year"), sep = -4) %>%
  mutate(year = as.integer(year)) # 把年份转成数值型,方便绘图

3. 计算核心指标:响应比例与变化率

虚拟变量的响应比例就是1的占比(直接用均值计算),变化率分绝对变化量和相对变化率两种,按需选择:

summary_df <- df_long %>%
  # 按变量类型、年份分组,计算响应比例
  group_by(variable, year) %>%
  summarise(response_rate = mean(response), .groups = "drop") %>%
  # 按变量排序,方便计算变化率
  arrange(variable, year) %>%
  group_by(variable) %>%
  mutate(
    # 绝对变化:当年比例 - 上一年比例
    absolute_change = response_rate - lag(response_rate),
    # 相对变化率:(当年比例-上一年比例)/上一年比例 *100(百分比形式)
    relative_change = (absolute_change / lag(response_rate)) * 100
  ) %>%
  ungroup()

4. 可视化:响应比例变化

用折线图展示两类变量的响应比例随年份的趋势,清晰追踪变化:

ggplot(summary_df, aes(x = year, y = response_rate, color = variable, group = variable)) +
  geom_line(size = 1.2) + # 折线粗细
  geom_point(size = 3) + # 数据点大小
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) + # y轴转百分比
  labs(
    x = "调查年份",
    y = "响应比例(选择1的占比)",
    title = "两类变量的响应比例随时间变化",
    color = "变量类型"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold")) # 标题居中加粗

5. 可视化:变化率

用柱状图展示每年的相对变化率,直观看到各年份的增长/下降幅度:

ggplot(summary_df %>% filter(!is.na(relative_change)), 
       aes(x = year, y = relative_change, fill = variable)) +
  geom_col(position = "dodge", width = 2) + # 分组柱状图
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  labs(
    x = "调查年份",
    y = "相对变化率(较上一年)",
    title = "两类变量的响应比例相对变化率",
    fill = "变量类型"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"))

注意事项

  • 如果你的7次调查年份更多,只要列名是「变量名+年份」的格式,代码完全通用,不需要修改
  • 相对变化率里第一年没有前一年数据,所以用filter(!is.na(relative_change))过滤掉了,绘图时不会显示第一年的变化率

内容的提问来源于stack exchange,提问作者user20284482

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:01:10