在R中的向量上的数据框中回归每列

时间:2012-04-20 06:56:04

标签: r statistics

我想回归矢量数据集中的每一列,然后返回具有最高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

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

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

3 个答案:

答案 0 :(得分: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中。

答案 1 :(得分:4)

假设您的data.frame名为'd'

,这将做您想要的
r2s <- apply(d, 2, function(x) summary(lm(x ~ HAPPY))$r.squared)
names(d)[which.max(r2s)]

您可以使用str()命令了解如何提取模型的组件,或者在本例中,提取模型的摘要。它将为您提供一个读取,帮助您访问任何复杂对象的组件。

答案 2 :(得分:1)

这是使用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)]