首页 > 解决方案 > 为长格式数据集中的每个参与者寻找随时间变化的斜率

问题描述

我想计算每个参与者的线性回归和最大似然斜率。这个很好的回应解释了如何为宽格式数据做到这一点,但我的是“长格式”纵向数据,与Singer & Willet 的青少年酒精使用数据非常相似:

alcohol1 <- read.table("https://stats.idre.ucla.edu/stat/r/examples/alda/data/alcohol1_pp.txt", header=T, sep=",")

例如,我想确定数据集中每个数据的线性回归 (OLS) 和最大似然 ( MLE )alcuse斜率。ageidalcohol1

输出可以是另一个数据框,其中每个数据框id都有一个相应的变量,即其值的斜率,也可以是添加到原始alcohol数据的列,该数据是该参与者每个实例的斜率。

像 Singer & Willet 一样,我的参与者的出现次数和一些缺失数据的次数并不相同,所以我也想说明这一点。

标签: rdataframesubsetlinear-regression

解决方案


如果您不反对使用 tidyverse 函数:

dat <- data.frame(list(id = c(rep("id1",3),rep("id2",3),rep("id3",3)),
                       age = rep(c(14, 15, 16), 3),
                       alc.use = pi + rnorm(.5,1, n = 9)))
head(dat)
   id age  alc.use
1 id1  14 3.887784
2 id1  15 5.388763
3 id1  16 3.348683
4 id2  14 3.624546
5 id2  15 4.494489
6 id2  16 5.103788

group_by(dat, id) %>% summarize(b0 = coef(lm(alc.use ~ age))[1],
                                b1 = coef(lm(alc.use ~ age))[2])

# A tibble: 3 x 3
  id        b0     b1
  <fct>  <dbl>  <dbl>
1 id1     8.25 -0.270
2 id2    -6.69  0.740
3 id3    21.1  -1.14 

推荐阅读