【问题标题】:How to do linear regression using columns-names as dependent variables如何使用列名作为因变量进行线性回归
【发布时间】:2020-03-14 03:53:30
【问题描述】:

假设我有以下数据集

d <- data.frame(1:31, 31:1)
names(d) <- c("cats", "dogs")

我想用列作为因变量和值作为独立的线性回归 - 如果我有 2 列,1 列名为“Animals”,其中包含 31 行的值为“Cat”,31 行的值为“狗”和 1 列名为“值”的 62 行包含值 1:31-31:1 我想我可以使用

lm(Animals ~ values, data=df)

但是有没有办法只使用列名作为表达式的第一部分来做到这一点?

非常感谢任何帮助

【问题讨论】:

  • 你的意思是d %&gt;% pivot_longer(everything(), names_to = 'Animals', values_to = 'values') %&gt;% {lm(values~ Animals, data = .)}

标签: r regression


【解决方案1】:

我们可以转换成长格式,然后做一个lm

library(tidyr)
library(dplyr)
d %>%
   pivot_longer(everything(), names_to = 'Animals', values_to = 'values') %>%
   {lm(values~ Animals, data = .)}

【讨论】:

    【解决方案2】:

    如果您只有两列,则 t 检验与线性回归完全相同(效果、p 值等将相同):

    t.test(d$cats, d$dogs, var.equal=TRUE)
    

    但是假设您确实想要重塑一个更复杂的数据集,那么@akrun 的答案就可以了。如果你不想使用 tidyverse,那么有一个基本的 R reshape 函数可以做同样的事情:

    d2 <- reshape(data=d, varying=list(1:2), 
            direction="long", 
            times = names(d), 
            timevar="animals",
            v.names="value")
    
    lm( value ~ animals, data=d2)
    

    【讨论】:

      猜你喜欢
      • 2017-09-19
      • 1970-01-01
      • 2015-06-24
      • 2013-11-14
      • 1970-01-01
      • 2011-12-20
      • 2018-05-16
      • 2016-10-09
      • 2018-07-31
      相关资源
      最近更新 更多