我希望使用" 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等是特定的细菌名称。
答案 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]
在循环中。