【问题标题】:Regress each column in a data frame on a vector in R在 R 中的向量上回归数据框中的每一列
【发布时间】:2012-04-20 06:56:03
【问题描述】:

我想对向量上的数据集中的每一列进行回归,然后返回具有最高 R 平方值的列。例如我有一个向量 HAPPY

HEALTH  CONINC  MARITAL SATJOB1 MARITAL2                    HAPPY
3           441 5        1            2                        3
1          1764 5        1            2                        2
2          3087 5        1            2                        2
3          3087 5        1            2                        3
1          3969 2        1            5                        1
1          3969 5        1            2                        3
2          4852 5        1            2                        2
3          5734 3        1            3                        3

对左侧数据集中的每一列回归“Happy”,然后返回具有最高 R 平方的列。示例:lm(Health ~ Happy) 如果 Health 的 R 平方值最高,则返回 Health。

我尝试过应用,但似乎无法弄清楚如何返回具有最高 R 平方的回归。有什么建议么?

【问题讨论】:

    标签: r statistics


    【解决方案1】:

    我会将其分为两个步骤:

    1) 确定每个模型的 R 平方

    2) 确定哪个是最高值

    mydf<-data.frame(aa=rpois(8,4),bb=rpois(8,2),cc=rbinom(8,1,.5),
      happy=c(3,2,2,3,1,3,1,3))
    
    myRes<-sapply(mydf[-ncol(mydf)],function(x){
      mylm<-lm(x~mydf$happy)
      theR2<-summary(mylm)$r.squared
      return(theR2)
    })
    
    names(myRes[which(myRes==max(myRes))])
    

    这是假设 happy 在您的 data.frame 中。

    【讨论】:

      【解决方案2】:

      假设你的 data.frame 被称为“d”,这将做你想做的事

      r2s <- apply(d, 2, function(x) summary(lm(x ~ HAPPY))$r.squared)
      names(d)[which.max(r2s)]
      

      您可以使用 str() 命令了解如何提取模型的组件,或者在这种情况下提取模型的摘要。它会给你一个读数,帮助你访问任何复杂对象的组件。

      【讨论】:

        【解决方案3】:

        这是使用 plyr 包中的 colwise() 函数的解决方案。

        library(plyr)
        df = data.frame(a = runif(10), b=runif(10), c=runif(10), d = runif(10))
        
        Rsq = function(x) summary(lm(df$a ~ x))$r.squared
        
        Rsqall = colwise(Rsq)(df[, 2:4])
        Rsqall
        
        names(Rsqall)[which.max(Rsqall)]
        

        【讨论】:

        • 前几天我在 RCDK 中使用了这个解决方案。我正在针对我的分子的分析结果在化学开发试剂盒库中的所有分子描述符中搜索最高 r.squared 值。谢谢。
        猜你喜欢
        • 2021-01-20
        • 1970-01-01
        • 2021-07-28
        • 1970-01-01
        • 1970-01-01
        • 2020-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多