【发布时间】: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...Y4和X3_Y1...X3_Y4输入mapply。mapply(function(name1, name2) lm(data1[[name1]]~data1$fixedname + data1$fixedname2 + data2[[name2]]), name1 = c('blah', 'blah', ...'blah'), name2 = ...)