【问题标题】:In R, how do I find the optimal variable to minimise the correlation between two datasets [duplicate]在R中,我如何找到最佳变量以最小化两个数据集之间的相关性[重复]
【发布时间】:2012-03-19 05:06:16
【问题描述】:

可能重复:
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 = 随机数(我想最小化相关性)

列 G = Awi1+Bwi2+C*2i3+D*wi4+wi5*E

wi1 到 wi5 是求解器产生的系数在一个单独的单元格中,我会有 correl(F,G)

这一切都是在考虑到以下限制的情况下实现的: 1. A,B,C,D,E 必须在 0 和 1 之间 2. A+B+C+D+E=1

我想打印这个结果,这样我就可以有一个有效的边界类型图表。 我怎样才能在 R 中做到这一点?感谢您的帮助。

【问题讨论】:

  • 如果这两个问题实际上是由同一个人提出的,你应该知道像这样使用多个帐户是经常被拒绝的。
  • 这是怎么一模一样的?这是相似的主题,但我想最小化并创建一个有效的风格边界。如果你在网上搜索我找不到答案

标签: r optimization


【解决方案1】:

我查看了文森特提到的另一个线程,我认为我有更好的解决方案。我希望它是正确的。正如文森特指出的那样,您最大的问题是针对此类非线性问题的优化工具没有为处理您的约束提供很大的灵活性。在这里,您有两种类型的约束: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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2019-08-23
    • 1970-01-01
    相关资源
    最近更新 更多