【问题标题】:In R, how do I find the optimal variable to maximize or minimize correlation between two datasets在 R 中,如何找到最佳变量以最大化或最小化两个数据集之间的相关性
【发布时间】:2012-03-05 16:37:16
【问题描述】:

我可以在 Excel 中轻松完成此操作,但我的数据集变得太大。在excel中,我会使用求解器。

Column A,B = random numbers
Column C = random number (which I want to maximize the correlation to)
Column D = A*x+B*y where x,y are coefficients resulted from solver

在一个单独的单元格中,我会有 correl(C,D)

在求解器中,我会将 correl(C,D) 的目标设置为最大值,方法是更改​​变量 x,y 并设置某些约束(例如 x,y 都必须是正数)。

如何在 R 中做到这一点?感谢您的帮助。

【问题讨论】:

标签: excel r optimization correlation


【解决方案1】:

在 R 中,您创建一个 function,其输出是您想要最大化或最小化的值。基础 R 中包含的一种优化器称为 optim()

    set.seed(1)
    A <- runif(100)
    B <- runif(100)
    C <- runif(100)

    # these are your x and y to optimize
    pars <- c(x=1,y=1)

    OptPars <- function(pars,A,B,C){
        D <- A*pars[1]+B*pars[2]
        -cor(C,D)
    }
    # optim is one of many R-ish ways to do Excel's solver
    # it minimizes by default (though you can tell it not to)
    # and that's why I told it to take -cor()
    optim(pars,OptPars,A=A,B=B,C=C)

如果您希望 xy 具有约束,请将其包含在您正在优化的函数中,例如abs(x) 而不是 x

【讨论】:

  • 从字面上看,如果您希望它是肯定的,请将 pars[1] 替换为 abs(pars[1])。如果optim()x 返回一个负数,只要取它的绝对值,你仍然会知道它是最优的。
  • 明白了,在我得到的代码的 optim() 部分之后(cor(C,D) 中的错误:'y' 必须是数字......再次感谢
  • 嗯,我没有收到那个错误。它对我来说很顺利。您是在运行这个确切的代码还是一些修改过的代码?如果已修改,请将其作为编辑放入您的问题中,我或其他人将查看
  • 现在知道了,感谢您的帮助!现在一些更复杂的事情.. 如果我想添加一个约束 pars[1] + pars[2] 必须等于 1.. 这可能吗?
  • 那么pars 中只有一个元素,而函数中的另一个元素是1-pars。知道了?如果您只有 1 个参数,那么您需要 optimize() 函数,而不是 optim。见?optimize
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 2023-03-26
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 2019-01-26
相关资源
最近更新 更多