Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用来自不同数据帧的列作为自变量跨多个列应用回归_R_For Loop_Lapply - Fatal编程技术网

R 使用来自不同数据帧的列作为自变量跨多个列应用回归

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 <-

我希望使用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 <- 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=…)