2012-03-17 8 views
-3
間の相関を最小化するために最適な変数を見つけるのですか

可能性の重複:
In R, how do I find the optimal variable to maximize or minimize correlation between several datasets、どのように私は2つのデータセット

これはExcelで行うことができますが、私のデータセットが得ています大きすぎる。 Excelでは、私はソルバーを使用します。

私は5つの変数を持っており、これらの5つの変数の加重平均を再作成して、6番目の変数との相関が最も低くなるようにしたいと考えています。

列A、B、C、D、E =乱数

(私が相関を最小化する)列Fは=乱数

列Gは、WI1 + B WI2を= + C * 2I3 + D * wi4 + wi5 *のE

wi5にWI1は、係数が別々のセルでソルバに起因している場合、私は、これは全て以下により達成されるCORREL(F、G)

を有するであろう制約事項:A、B、C、D、Eは0と1の間でなければなりません。 2. A + B + C + D + E = 1

この結果を印刷したいと思います。効率的なフロンティア型のチャートを持つことができます。 Rでこれを行うにはどうすればよいですか?助けてくれてありがとう。

+2

これらの2つの質問が実際に同じ人によって行われている場合は、このような複数のアカウントを使用すると頻繁に怒られます。 – joran

+0

これは正確な複製方法はどうですか?それと似たテーマですが、私は効率的なスタイルのフロンティアを最小化して作成したいと考えています。あなたがネットを検索すると答えが見つかりません –

答えて

3

私はVincentによって言及された他のスレッドを見て、私はよりよい解決策を持っていると思います。私はそれが正しいことを願っています。 Vincentが指摘しているように、最大​​の問題は、このような非線形問題の最適化ツールが、制約を扱うための柔軟性を提供しないことです。ここでは、2つのタイプの制約があります。1)すべての重みは>= 0でなければならず、2)合計は1でなければなりません。

optimファンクションには、最初の制約を処理できるlowerオプションがあります。 2番目の制約では、少し創造的でなければなりません。最小化する関数内でスケールすることで加重を強制的に1にすることができます。つまり、相関関数をfunction(w) cor(X %*% w/sum(w), Y)として書き直します。

# create random data 
n.obs <- 100 
n.var <- 6 
X <- matrix(runif(n.obs * n.var), nrow = n.obs, ncol = n.var) 
Y <- matrix(runif(n.obs), nrow = n.obs, ncol = 1) 

# function to minimize 
correl <- function(w)cor(X %*% w/sum(w), Y) 
# inital guess 
w0 <- rep(1/n.var, n.var) 
# optimize 
opt <- optim(par = w0, fn = correl, method = "L-BFGS-B", lower = 0) 
optim.w <- opt$par/sum(opt$par) 
関連する問題