r - 制作数据框或排名调整后的 R 平方 - R

标签 r dataframe linear-regression

这个问题基本上是我之前问过的问题的延伸: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/

相关文章:

r - 将连续的数字折叠为一串范围

r - 如何用 ggplot 绘制 lm() 的残差?

r - 将三阶多项式及其方程添加到 r 中的 ggplot 中

r - 按每组中的最大值过滤数据框

r - 与数据框中最接近的非 NA 值的距离

将杂乱且不平衡的数据集从宽到长 reshape

r - 使用 matrixStats::rowMedians 查找每一行的中位数

python - 如何在 python 中规范化数据集以进行线性/多元回归

r - 使用 R 绘制线性模型 (lm) 时产生 NaN

machine-learning - 如何处理对数据集中的多列应用 One Hot Encoding 后产生的大量恐惧?