使用来自不同数据框的列作为独立变量在多个列上应用回归

时间:2016-09-08 18:15:03

标签: r for-loop lapply

我希望使用" x"在Data1中对列的子集进行回归分析。来自Data1和" x"的变量Data2中与Data1中的列对应的变量。然后我想要提取p值。基本上,我希望我希望回归“循环”如下:

Data1 $ Y1~Data1 $ X1 + Data1 $ X2 + Data1 $ X3_Y1

Data1 $ Y2~Data1 $ X1 + Data1 $ X2 + Data2 $ X3_Y2

Data1 $ Y3~Data1 $ X1 + Data1 $ X2 + Data2 $ X3_Y3

Data1 $ Y4~Data1 $ X1 + Data1 $ X2 + Data2 $ 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等是特定的细菌名称。

1 个答案:

答案 0 :(得分:0)

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

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]

在循环中。