2012-03-17 19 views
-3
之間的相關性

可能重複:
In R, how do I find the optimal variable to maximize or minimize correlation between several datasets在R,如何找到最優的變量,以儘量減少兩個數據集

這可以在Excel中完成,但我的數據集已經得到太大了。在Excel中,我會使用求解器。

我有5個變量,我想重新創建這5個變量的加權平均值,以便它們與第6個變量具有最低的相關性。

列A,B,C,d,E =隨機數

F欄=隨機數(我希望儘量減少的相關性)

G列= A WI1 + B WI2 + C * 2I3 + d * WI4 + WI5 * E

其中WI1到WI5是係數導致從求解器在一個獨立的單元,I將具有CORREL(F,G)

這是全部用以下實現記住的限制: 1. A,B,C,D,E必須介於0和1之間 2. A + B + C + D + E = 1

我想打印這個結果,可以有一個有效的邊界類型圖表。 我如何在R中做到這一點?謝謝您的幫助。

+2

如果這兩個問題實際上是由同一個人,你應該知道,使用這樣的多個帳戶經常皺眉。 – joran 2012-03-18 00:37:46

+0

這是一個確切的重複?這是類似的主題,但我想盡量減少並創建一個高效的風格邊界。如果你搜索網絡,我找不到答案 – 2012-03-18 16:54:00

回答

3

我看了文森特提到的另一個線程,我想我有一個更好的解決方案。我希望這是正確的。正如Vincent指出的那樣,您最大的問題是針對這種非線性問題的優化工具不能提供很大的靈活性來處理您的約束條件。在這裏,你有兩種約束:1)你的所有權重必須是>= 0,2)他們必須總和爲1

optim功能有一個lower選項,可以照顧你的第一個約束。對於第二個約束,您必須有點創意:您可以通過在函數內縮放它們以將其最小化,即將您的相關函數重寫爲function(w) cor(X %*% w/sum(w), Y),以強制您的權重總和爲1。

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