通过lm拟合线

时间:2019-02-16 18:42:29

标签: r

我的代码不起作用。我试图通过lm函数简要地找到4组数据之间的关系。

我的数据如下

X1,Y1, X2, Y2,X3,Y3
1,2,3,4,5,6
6,5,4,3,2,1
2,3,4,5,6,7
7,6,5,4,3,2

最简单的方法就是

fit=lm(X1,Y1)
summary(fit)

我不想一次输入fit1,fit2,fit3,而是想一次完成所有操作。

我也尝试过get_regression_table(fit[n], print=TRUE),但仍然无法正常工作

fit[n]<-lm(Yn~Xn,data=mydata) for (n in 1:3){ get_regression_table(fit[n], print=TRUE) }

2 个答案:

答案 0 :(得分:0)

您需要使用lm动态调用do.call函数。并将参数作为字符串传递。

data = data.frame(X1 = c(1,6,2,7),Y1 = c(2,5,3,5),X2 = c(3,4,4,5),Y2 = c(4,3,5,4),X3 = c(5,2,6,3),Y3 = c(6,1,7,2))

results = vector("list",3)
for(i in seq(1,3)){
  formula = paste0("Y",i,"~","X",i)
  results[[i]] = do.call("lm",list(formula = formula,data = quote(data)))
}

结果中的每个元素都包含第i个适合项。

答案 1 :(得分:0)

您可以使用矩阵存储值,然后使用变量遍历所需的索引

mat <- t(matrix(c(1,2,3,4,5,6,6,5,4,3,2,1,2,3,4,5,6,7,7,6,5,4,3,2),6,4))
matfit <- list()
length(fit) <- 3
for(i in 1:3){
  fit[[i]] <- lm(mat[,i*2-1] ~ mat[,i*2])
}