我想回归矢量数据集中的每一列,然后返回具有最高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平方返回回归。有什么建议?
答案 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)]