【问题标题】:R Linear regression - iterate both variableR线性回归 - 迭代两个变量
【发布时间】:2018-05-21 14:04:02
【问题描述】:

我在线性回归中循环这两个变量时遇到问题,想知道是否有人可以提供帮助。

我有多个遵循这种一般模式的数据集

Probe   Test1 Test2 Test-n Control1 Control2 Control-n
Gene1     21    6    97      34      47        34
Gene2     49    32   49      23      12        90
Gene3     23    9    78      58      48        6 
Gene4     19    65   2       42      56        24
Gene5     34    39   28      28      8         94
Gene6     79    26   94      47      31        76
Gene7     33    33   22      78      64        51
Gene8     1     61   26      63      85        83
Gene9     54    84   34      23      32        1
Gene-n    89    65   13      2       84        65

我正在尝试以成对的方式运行一系列线性回归,以便计算所有可能的组合,即 Test1-Test2、Test1-Test-n 等

到目前为止,我只能使用以下代码循环方程的第二部分。

df <- read.csv("test.csv")
names(df)

varlist <- names(df)[3:7]

models <- lapply(varlist, function(x) {
  lm(substitute(Test1 ~ i, list(i = as.name(x))), data = df)
})

models[[1]]
lapply(models, summary)

但除了手动将其替换为下一个变量之外,我无法找到有关如何循环 Test1 的任何信息,考虑到其中一些变量超过 1000 个,这是相当不切实际的。

我能找到的最接近的方法是提到的here,但它仍然不是我所需要的。我错过了一些明显的东西吗?

提前致谢。

【问题讨论】:

  • 也许您应该将lapply 调用嵌套在另一个更改Test1 值的lapply 调用中?
  • 这似乎是徒劳的。为什么不从相关性开始,即 cor(df)?

标签: r loops linear-regression


【解决方案1】:

试试下面的。它比substitute 更简单。

varlist <- names(df)[-1]

models <- apply(combn(varlist, 2), 2, function(v)
    lm(as.formula(paste(v[1], v[2], sep = "~")), data = df)
)

models[[1]]
lapply(models, summary)

【讨论】:

  • 这非常简单,就像一个魅力。如果我做对了,那么您将函数本身模块化,而不是嵌套循环。
  • @Athellion 是的,诀窍是获取所有可能的名称组合,所以这隐藏了另一个循环,即combn 中的循环。
猜你喜欢
  • 2021-01-15
  • 1970-01-01
  • 2014-10-31
  • 2019-05-19
  • 1970-01-01
  • 2021-02-27
  • 2018-07-04
  • 2020-10-06
  • 2020-05-20
相关资源
最近更新 更多