【发布时间】:2019-11-26 22:08:56
【问题描述】:
我正在尝试测试我的数据框中的一列 (CS.1) 中的数据与数据框中的其余列 (allree) 的相似程度。数据框有 283 列,第一个包含观察的标签。我尝试设置一个 for 循环来执行线性回归并将 r 平方值与列名一起保存在新数据框中。但是,我不断收到与数据框相邻的错误,因为结果的长度不正确。
这是代码:
#this is the data frame
allree<-read.csv("All REE 2.csv")
#creating the data frame for the results
cs1 <- data.frame(row = 1:280)
dat <- data.frame(rsq = 1:3, samp = 1:3)
#trying to test each column against the second column (CS.1) and save the r-squared values
for(x in 3:283){
na.rm=TRUE
reg<-lm(CS.1~allree[,x], data=allree)
rsq<-summary(reg)$r.squared
dat$r2[x] <- rsq
dat$sample[x] <- colnames(allree)[x]
if(x==3) cs1<-dat
if(x>3)cs1<-rbind(cs1, dat)
}
这是错误:
Error in `$<-.data.frame`(`*tmp*`, "r2", value = c(NA, NA, 0.180399384405891, : replacement has 4 rows, data has 3
我需要将原始数据分成多个数据框吗?如果我能以这种方式弄清楚,我想对其他几列重复这个测试。
【问题讨论】:
-
如果您只想查看 r-squared 值,您可以只取相关矩阵并将所有元素平方,即
cor(your_data)^2,因为对于单变量回归,r-squared 只是相关性, r, 平方。如果您只想查看回归与单个变量的 r 平方,您只需从相关矩阵中选择该变量的列。
标签: r loops linear-regression repeat