Rstudio中向量型多元回归实现及按分组计算回归系数报错问题
错误原因与修正方案
- 第一个问题:你原始数据里的Y1~Y6都是用逗号做小数点的字符串格式,直接拼接出来的Y向量是字符类型,无法参与回归运算,需要先把逗号替换为点再转成数值格式
- 第二个问题:
by是data.table的专属语法,普通data.frame的方括号取值不支持该参数,你已经加载了dplyr、purrr、broom系列包,可以用分组嵌套+映射的方式批量提取分组回归系数
library(dplyr) library(tidyr) library(purrr) library(broom) # 注意如果要同时使用plyr和dplyr,先加载plyr再加载dplyr,避免同名函数冲突 # 先处理原始数据的Y列,把逗号替换为小数点后转数值 data <- data %>% mutate(across(Y1:Y6, ~ as.numeric(gsub(",", ".", .x)))) # 构造回归用长表 Y <- as.vector(t(cbind(data$Y1, data$Y2, data$Y3, data$Y4, data$Y5, data$Y6))) cos <- cos(0:5 * pi / 3) # 自变量1,所有被试共用 sin <- sin(0:5 * pi / 3) # 自变量2,所有被试共用 ID <- rep(data$ID, each = 6) # 保留被试ID,支持按被试计算回归 group <- factor(rep(data$group, each = 6), levels = c(1,2), labels = c("A", "B")) dat <- data.frame(Y, cos, sin, ID, group) # 按分组计算回归系数 group_coef <- dat %>% nest(data = -group) %>% mutate(fit = map(data, ~ lm(Y ~ cos + sin, data = .x)), coef = map(fit, tidy)) %>% unnest(coef) %>% select(group, term, estimate) # 按被试ID计算每个个体的回归系数,替换分组变量为ID即可 id_coef <- dat %>% nest(data = -ID) %>% mutate(fit = map(data, ~ lm(Y ~ cos + sin, data = .x)), coef = map(fit, tidy)) %>% unnest(coef) %>% select(ID, term, estimate)
运行后group_coef会存储每个组别对应的截距、cos系数、sin系数,id_coef会存储每个被试对应的个体层面回归系数。
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

