2012-04-20 11 views
6

ベクトル上のデータセットの各列を回帰し、次にR-二乗値が最も高い列を返したいとします。例えば私はベクトルHAPPY < - (3,2,2,3,1,3,1,3)と私はデータセットを持っている。ベクトルのデータフレーム内の各列を回帰するR

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

これはあなたのdata.frameを想定し、あなたがやりたいだろうあなたは、モデルの概要を、モデルの成分を抽出、またはこのケースでする方法を見つけることができます

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

「D」と呼ばれていますstr()コマンドを使用します。複雑なオブジェクトのコンポーネントにアクセスするのに役立つ情報が表示されます。

5

Iは、2つのステップにこれを破る:

1)各モデル

2)これはhappyをと仮定した最高​​値

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))]) 

であるかを決定するためのR二乗を決定しますあなたのdata.frameにあります。

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)] 
+1

先日、このソリューションをRCDKで使用しました。私は、分子からのアッセイ結果と比較して、化学開発キットライブラリーのすべての分子記述子にわたって最高のr.squared値を探していました。ありがとう。 – user1945827

関連する問題