这个问题基本上是我之前问过的问题的扩展:How to only print (adjusted) R-squared of regression model?

我想建立一个线性回归模型来预测150种潜在预测因子的浓度。我要执行手动逐步操作过程。数据集大致如下所示:

df = data.frame(
Site = c("A", "B", "C", "D"),
Concentration = c(2983, 9848, 2894, 8384),
Var1 = c(12, 23, 34, 45),
Var2 = c(23, 34, 45, 56))

我使用以下代码为每个可能的预测变量建立一个单变量模型,并检查调整后的R平方。
for (j in names(df)){
model <- lm(Concentration ~ df[[j]], data = df)
print(j)
print(summary(model)$adj.r.squared)

[1] "site"
  r.squared adj.r.squared
1 0.02132635    -0.9573473

但是,要检查150个变量的调整后的R平方是很多工作。

是否可以使一个数据框具有所有调整后的R平方值和每个相应的变量名称?

还是要对调整后的R平方值进行排名,以便最高的值在第一位(以及与之对应的变量名一起打印)?

我很想知道这样的事情是否可行。这将极大地帮助我。

提前致谢!

最佳答案

您可以将结果保存到一个矩阵中,然后打印该矩阵。
首先,您创建一个新矩阵

adj.r.mat   <- matrix(, nrow = length(names(df)),
                        ncol = 2)
               colnames(adj.r.mat) <- c("Name Var", "Adj.R")

然后将您感兴趣的值保存在此矩阵中
for (j in 1:length(names(df))){
model <- lm(Concentration ~ df[[j]], data = df)
adj.r.mat[j,1] <- names(df)[j]
adj.r.mat[j,2] <- summary(model)$adj.r.squared
}

最后打印
print(adj.r.mat)

如果您不希望使用第2个变量,则可以从3开始循环。
for (j in 3:length(names(df))){
model <- lm(Concentration ~ df[[j]], data = df)
adj.r.mat[j,1] <- names(df)[j]
adj.r.mat[j,2] <- summary(model)$adj.r.squared
}

然后在打印矩阵时排除第二行
print(adj.r.mat[-c(1,2),])

关于r - 使数据框或等级调整为R平方-R,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53119277/

10-11 17:20