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

R语言使用lm()对宽/长(tidy)格式数据拟合相同线性模型的方法

解决方法

核心原因是你当前的长格式中,同一患者的base值和fev1值分属不同行,而线性回归要求每个样本的自变量、因变量处于同一行,对齐两类值即可得到和宽格式完全一致的拟合结果,以下是两种常用实现方案:

方案1:新增基线值列后拟合

无需修改原始长表结构,仅为每个患者匹配对应的基线值到所有行,再筛选fev1时间点拟合即可:

library(tidyverse)

# 为每个患者新增专属基线值列
fev_tidy <- fev_tidy %>%
  group_by(patient) %>%
  mutate(base_score = score[time == "base"]) %>%
  ungroup()

# 筛选fev1时间点的行拟合模型
fit.base_long <- lm(score ~ 1 + base_score, data = filter(fev_tidy, time == "fev1"))

拟合完成后对比coef(fit.base)和coef(fit.base_long),二者的系数、显著性、拟合优度所有指标完全一致。

方案2:局部转回宽格式拟合

如果不需要修改原始长表,也可以仅提取需要的两个时间点,临时转回宽格式后拟合:

fit.base_long2 <- fev_tidy %>%
  # 仅保留需要的base和fev1两个时间点
  filter(time %in% c("base", "fev1")) %>%
  # 转为宽格式,base和fev1各成一列
  pivot_wider(names_from = time, values_from = score) %>%
  lm(fev1 ~ 1 + base, data = .)

该方案得到的结果和宽格式原始拟合结果也完全相同。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:57:05