R 使用来自不同数据帧的列作为自变量跨多个列应用回归
我希望使用Data1中的“x”变量和Data2中与Data1中的列对应的“x”变量对Data1中的列子集进行回归。然后我想提取p值。基本上,我想让回归“循环”如下: 数据1$Y1~Data1$X1+Data1$X2+Data1$X3_Y1 数据1$Y2~Data1$X1+Data1$X2+Data2$X3\U Y2 数据1$Y3~Data1$X1+Data1$X2+Data2$X3_Y3 数据1$Y4~Data1$X1+Data1$X2+Data2$X3_Y4 以下是我的想法:R 使用来自不同数据帧的列作为自变量跨多个列应用回归,r,for-loop,lapply,R,For Loop,Lapply,我希望使用Data1中的“x”变量和Data2中与Data1中的列对应的“x”变量对Data1中的列子集进行回归。然后我想提取p值。基本上,我想让回归“循环”如下: 数据1$Y1~Data1$X1+Data1$X2+Data1$X3_Y1 数据1$Y2~Data1$X1+Data1$X2+Data2$X3\U Y2 数据1$Y3~Data1$X1+Data1$X2+Data2$X3_Y3 数据1$Y4~Data1$X1+Data1$X2+Data2$X3_Y4 以下是我的想法: X1 <-
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)
}}
X1最简单的方法就是将数据放在单个数据帧中
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
循环并使用lappy
。但我不会打扰你,因为它不会给你带来那么多好处
在您的问题中,您想提取一个p值,但它不是哪一个(并且您的代码不起作用)。您可以使用
summary(m)[[4]][,4]
在循环内部。lappy(X=1:4,FUN=function(ind)lm(Data1[[粘贴(“Y”,ind,sep=”“)]]~Data1$X1+Data1$X2+Data2[[粘贴(“X3_-Y”,ind,sep=“)]))
4个模型在列表中。使用lappy/sapply
从该列表中提取任何拟合统计信息都很简单。问题是在我的数据集中,变量没有标记为X1、X2等,而是细菌名称。我只是简化了我提供的示例数据的名称。因此,我认为您提供的代码不起作用。我会继续在我的问题中澄清这一点。谢谢同样的概念,只需将名称列表Y1…Y4
和X3_Y1…X3_Y4
输入mapply
<代码>映射(函数(name1,name2)lm(data1[[name1]]~data1$fixedname+data1$fixedname2+data2[[name2]]),name1=c('blah','blah',…'blah'),name2=…)