2012-03-17 2 views
-3
사이의 상관 관계를 최소화하기 위해 최적의 변수를 찾을 수 있습니까

가능한 중복 :
In R, how do I find the optimal variable to maximize or minimize correlation between several datasets, 어떻게 두 데이터 세트

이 Excel에서 수행 할 수 있습니다,하지만 내 데이터 세트를 얻었다 너무 큰. Excel에서는 솔버를 사용합니다.

나는 5 개의 변수를 가지고 있으며,이 5 개의 변수의 가중 평균을 다시 작성하여 6 번째 변수와 가장 낮은 상관 관계를 갖기를 원합니다.

열 A, B, C, D, E = 난수

칼럼 F (I의 상관 관계를 최소화하려는) = 난수

열 G는 WI1 + B WI2를 = C를 +하면 * 2i3 + D * wi4 + wi5의 * E는 wi5에 WI1 계수가 개별 셀에서 해석에 기인된다

, I는 (F, G) CORREL을 가질 것이다

모두 다음과 같이 달성된다 제약 조건 : 1. A, B, C, D, E는 0과 1 사이 여야합니다. 2. A + B + C + D + E = 1

이렇게 결과를 인쇄하고 싶습니다. 효율적인 프론티어 타입 차트를 가질 수 있습니다. R에서 어떻게 할 수 있습니까? 도와 주셔서 감사합니다.

+2

실제로이 두 질문이 같은 사람이하는 경우, 이와 같이 여러 계정을 사용하는 것이 자주 싫증납니다. – joran

+0

정확히 어떻게 복제됩니까? 비슷한 주제이지만 효율적인 스타일의 경계를 최소화하고 만들고 싶습니다. 그물을 검색하면 대답을 찾을 수 없습니다. –

답변

3

나는 Vincent가 언급 한 다른 스레드를 살펴 봤는데 더 나은 해결책이 있다고 생각합니다. 나는 그것이 옳았기를 바란다. Vincent가 지적한 것처럼 가장 큰 문제는 이러한 비선형 문제에 대한 최적화 도구가 제약 조건을 처리 할 때 많은 유연성을 제공하지 않는다는 것입니다. 여기에는 두 가지 유형의 제한 조건이 있습니다. 1) 모든 가중치는 >= 0이어야하며 2) 합계는 1이어야합니다.

optim 함수의 첫 번째 제약 조건을 처리 할 수있는 lower 옵션이 있습니다. 두 번째 제약 조건의 경우 약간 창의적이어야합니다. 즉, 최소화 할 함수에서 크기를 조정하여 가중치를 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)