6

我想对向量的数据集中的每一列进行回归,然后返回具有最高 R 平方值的列。例如,我有一个向量 HAPPY <- (3,2,2,3,1,3,1,3) 并且我有一个数据集。

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

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

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

4

3 回答 3

5

我会将其分为两个步骤:

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 中。

于 2012-04-20T07:22:59.680 回答
4

假设您的 data.frame 被称为“d”,这将满足您的要求

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

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

于 2012-04-20T07:19:50.240 回答
1

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

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)]
于 2012-04-20T08:10:02.790 回答