【问题标题】:Make dataframe or rank adjusted R-squared - R制作数据框或排名调整的 R 平方 - R
【发布时间】:2019-04-06 17:45:21
【问题描述】:

这个问题基本上是我之前问的问题的延伸: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 平方值进行排名,使最高值在前(并打印相应的变量名)?

我很想知道这样的事情是否可行。这对我有很大帮助。

提前致谢!

【问题讨论】:

    标签: r dataframe linear-regression


    【解决方案1】:

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

    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
    }
    

    然后在打印矩阵时排除第 2 行

    print(adj.r.mat[-c(1,2),])
    

    【讨论】:

    • 我刚刚编辑了代码。您需要更正您的“df”。 “站点”缺少一项。我把它改成了 c("A", "B", "C", "D") 。
    • @Qeshet 如果您觉得此解决方案令人满意,您可以接受答案
    猜你喜欢
    • 2021-02-15
    • 2016-04-14
    • 2021-04-26
    • 2020-11-20
    • 2016-08-28
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2020-12-18
    相关资源
    最近更新 更多