【问题标题】:Linear regression between columns and by index列和索引之间的线性回归
【发布时间】:2026-01-04 09:15:02
【问题描述】:
HEALTH  CONINC  MARITAL Index MARITAL2                    HAPPY
3           441 5        1            2                        3
1          1764 5        1            2                        2
2          3087 5        1            2                        2
3          3087 5        2            2                        3
1          3969 2        2            5                        1
1          3969 5        2            2                        3
2          4852 5        2            2                        2
3          5734 3        2            3                        3

在按索引细分时,是否有关于每一列(例如,Happy)的线性回归?

预期输出将是 Rsquare 值:

HEALTH  CONINC  MARITAL Index MARITAL2   
 x       x       x         1      x      
 x       x       x         2      x      

试过lapply,但不确定如何合并以按索引回归。

【问题讨论】:

  • 我不清楚。 HAPPY 是因变量还是自变量?为什么预期输出中有 10 个 R^2?
  • 你是对的,放错了,应该只有5列输出
  • 您不需要回归。只需使用 cor 函数并将结果平方即可。

标签: r lm


【解决方案1】:

以下是如何使用 dplyr 库按索引进行单列回归,并在进行过程中收集 R 平方值:

library(dplyr)
df %>% group_by(Index) %>% 
    do(data.frame(HEALTH = summary(lm(HEALTH ~ HAPPY, data = .))$r.squared))

因此,要将其应用于第 1 至 3 和 5 列,您可以尝试以下操作:

l = lapply(c(1:3,5), function(i) df %>% group_by(Index) %>% 
       do(data.frame(r.squared = summary(lm(as.formula(paste(colnames(df)[i], "~ HAPPY")), data = .))$r.squared)))

【讨论】:

  • 谢谢!如果我只想对一列做一列,这是可行的,我想在所有列之间对一列进行所有回归是什么?
  • 我还没有弄清楚那部分:(
  • 我累了 df %>% group_by(Index) %>% do(data.frame(HEALTH = summary(lm(HEALTH ~ ., data = .))$r.squared)), 而好像只输出 2 列
  • @Fiona 我根据您的建议使用lapply 在我的答案中添加了一些内容。这将为您提供您寻求的答案的列表。