【问题标题】:Apply regression across multiple columns using columns from different dataframe as independent variables使用来自不同数据框的列作为自变量跨多列应用回归
【发布时间】:2017-01-16 18:47:08
【问题描述】:

我希望使用来自 Data1 的“x”变量和来自 Data2 的与 Data1 中的列相对应的“x”变量对 Data1 中的列子集进行回归。然后我想提取 p 值。基本上,我希望回归像这样“循环”:

数据1$Y1~数据1$X1 +数据1$X2+数据1$X3_Y1

数据1$Y2~数据1$X1 +数据1$X2+数据2$X3_Y2

数据1$Y3~数据1$X1 +数据1$X2+数据2$X3_Y3

数据1$Y4~数据1$X1 +数据1$X2+数据2$X3_Y4

这是我想出的:

X1 <- rnorm(n=50, mean = 10, sd = 5)
X2 <- rnorm(n=50, mean = 15, sd = 6)
Y1 <- rnorm(n=50, mean = 7, sd = 4)
Y2 <- rnorm(n=50, mean = 5, sd = 6)
Y3 <- rnorm(n=50, mean = 9, sd = 7)
Y4 <- rnorm(n=50, mean = 8, sd = 6)
X3_Y1<- rnorm(n=50, mean = 12, sd = 2)
X3_Y2<- rnorm(n=50, mean = 9, sd = 1)
X3_Y3<- rnorm(n=50, mean = 6, sd = 2)
X3_Y4<- rnorm(n=50, mean = 5, sd = 3)
Data1 <- data.frame(X1, X2, Y1, Y2, Y3, Y4)
Data2 <- data.frame(X1, X2, X3_Y1, X3_Y2, X3_Y3, X3_Y4)

Data1_Y<-colnames(Data1[,3:6])
Data2_XY<-colnames(Data2[,3:6])

 for (y in Data1_Y) {
   for (xy in Data2_XY) {

     MergedX<-cbind(Data1[,c(1:2)],Data2[, xy]) 

         test <- lm(y~MergedX)

     out<-data.frame ("p.value"=test$p.value)

 }}

但是,这不起作用。我希望有办法做到这一点,也许使用 lapply?

注意:Y1、Y2 等只是代表标签。在真实数据集中,Y1、Y2等是具体的细菌名称。

【问题讨论】:

  • lapply(X = 1:4, FUN = function(ind) lm(Data1[[paste("Y", ind, sep = "")]]~ Data1$X1 + Data1$X2 + Data2[[paste("X3_Y", ind, sep = "")]])) 列表中有 4 个模型。使用lapply/sapply 从此列表中提取任何拟合统计数据是微不足道的。
  • 问题是在我的数据集中,变量没有标记为 X1、X2 等。相反,它们是细菌名称。我只是简化了我提供的示例数据的名称。因此,我认为您提供的代码不会起作用。我将继续在我的问题中澄清这一点。谢谢!
  • 相同的概念,只需将名称列表Y1...Y4X3_Y1...X3_Y4 输入mapplymapply(function(name1, name2) lm(data1[[name1]]~data1$fixedname + data1$fixedname2 + data2[[name2]]), name1 = c('blah', 'blah', ...'blah'), name2 = ...)

标签: r for-loop lapply


【解决方案1】:

最简单的方法就是将数据放在一个数据框中

dd = cbind( Data1, Data2)

然后循环X系数的个数,依次构建每个模型,

for(i in 1:4) {
  model = paste0("Y", i, "~ X1 + X2 + X3_Y", i)
  m = lm(model, data=dd)
}

您当然可以删除for 循环并使用lapply。但我不会打扰,因为它不会给你带来太多好处。


在您的问题中,您想提取一个 p 值,但不是哪个(而且您的代码不起作用)。您可以使用

提取每个变量的 p 值
summary(m)[[4]][,4]

在循环内部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2020-08-14
    相关资源
    最近更新 更多