使用线性回归在 r 中循环变量名称
looping variable names in r with linear regression
我有一个数据集,其变量名称为 x1、y1、x2、y2 等。我想回归 y1~x1, y2~x2, ..... 我想使用 for 循环自动执行此操作,到目前为止我还没有成功。下面是示例代码:
x1 <- c(1,2,3,4)
y1 <- c(10,20,30,40)
x2 <- c(3,6,9,12)
y2 <- c(1,2,3,4)
dataz <- as.data.frame(cbind(x1,y1,x2,y2))
coef <- rep(NA,2)
for (i in 1:2){
coef[i] <- (lm(x[i]~y[i],data=dataz))$coefficients[[2]] }
以下是我得到的错误。 Error in eval(expr, envir, enclos) : object 'y' not found.
我尝试使用 paste
,但不确定如何继续。任何帮助将不胜感激。
- 更新以下代码以将 lm() 摘要保存到变量*
我尝试了一些非常简单的方法。我写了一个循环,其中我使用 "paste0" 函数将 "x" 和 "y" 粘贴到迭代编号,然后我使用 "get" 函数获取字符串引用的对象到。此解决方案仅在变量名的某些部分是常量并且您可以遍历变量名发生变化的部分时才有效。顺便说一句,我还更改了你的数据,因为你的 x 与你的 y 完全相关,从而使你的协方差矩阵爆炸,可以这么说。这是代码,希望对您有所帮助:
x1 <- c(runif(40))
y1 <- c(sample(50:300, 40, replace = TRUE))
x2 <- c(runif(40))
y2 <- c(sample(225:975, 40, replace = TRUE))
dataz <- as.data.frame(cbind(x1,y1,x2,y2))
for (i in 1:2){
assign(paste0("coef", i), summary(lm(paste0("x", i, "~", "y", i))))
}
这是一个 for 循环解决方案,它明确涉及 referencing the dataframe column 和双括号。所以其实lm()
里面的data参数可以去掉:
for (i in 1:2){
coef[i] <- (lm(dataz[[paste0("y", i)]] ~ dataz[[paste0("x", i)]]))$coefficients[[2]]
}
我有一个数据集,其变量名称为 x1、y1、x2、y2 等。我想回归 y1~x1, y2~x2, ..... 我想使用 for 循环自动执行此操作,到目前为止我还没有成功。下面是示例代码:
x1 <- c(1,2,3,4)
y1 <- c(10,20,30,40)
x2 <- c(3,6,9,12)
y2 <- c(1,2,3,4)
dataz <- as.data.frame(cbind(x1,y1,x2,y2))
coef <- rep(NA,2)
for (i in 1:2){
coef[i] <- (lm(x[i]~y[i],data=dataz))$coefficients[[2]] }
以下是我得到的错误。 Error in eval(expr, envir, enclos) : object 'y' not found.
我尝试使用 paste
,但不确定如何继续。任何帮助将不胜感激。
- 更新以下代码以将 lm() 摘要保存到变量*
我尝试了一些非常简单的方法。我写了一个循环,其中我使用 "paste0" 函数将 "x" 和 "y" 粘贴到迭代编号,然后我使用 "get" 函数获取字符串引用的对象到。此解决方案仅在变量名的某些部分是常量并且您可以遍历变量名发生变化的部分时才有效。顺便说一句,我还更改了你的数据,因为你的 x 与你的 y 完全相关,从而使你的协方差矩阵爆炸,可以这么说。这是代码,希望对您有所帮助:
x1 <- c(runif(40))
y1 <- c(sample(50:300, 40, replace = TRUE))
x2 <- c(runif(40))
y2 <- c(sample(225:975, 40, replace = TRUE))
dataz <- as.data.frame(cbind(x1,y1,x2,y2))
for (i in 1:2){
assign(paste0("coef", i), summary(lm(paste0("x", i, "~", "y", i))))
}
这是一个 for 循环解决方案,它明确涉及 referencing the dataframe column 和双括号。所以其实lm()
里面的data参数可以去掉:
for (i in 1:2){
coef[i] <- (lm(dataz[[paste0("y", i)]] ~ dataz[[paste0("x", i)]]))$coefficients[[2]]
}