Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中,如何找到使两个数据集之间的相关性最小化的最佳变量_R_Optimization - Fatal编程技术网

在R中,如何找到使两个数据集之间的相关性最小化的最佳变量

在R中,如何找到使两个数据集之间的相关性最小化的最佳变量,r,optimization,R,Optimization,可能重复: 这可以在Excel中完成,但我的数据集太大了。在excel中,我将使用解算器 我有5个变量,我想重新创建这5个变量的加权平均值,使它们与第6个变量的相关性最低 A、B、C、D、E列=随机数 F列=我希望最小化与之相关的随机数 G列=Awi1+Bwi2+C*2i3+D*wi4+wi5*E 其中wi1到wi5是从单独单元中的解算器得到的系数,我将使用correlF,G 所有这些都是在考虑以下约束条件的情况下实现的: 1.A、 B、C、D、E必须介于0和1之间 2.A+B+C+D+E=1

可能重复:

这可以在Excel中完成,但我的数据集太大了。在excel中,我将使用解算器

我有5个变量,我想重新创建这5个变量的加权平均值,使它们与第6个变量的相关性最低

A、B、C、D、E列=随机数

F列=我希望最小化与之相关的随机数

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

其中wi1到wi5是从单独单元中的解算器得到的系数,我将使用correlF,G

所有这些都是在考虑以下约束条件的情况下实现的: 1.A、 B、C、D、E必须介于0和1之间 2.A+B+C+D+E=1

我想把结果打印出来,这样我就可以有一个有效的边界类型图表。
我在R怎么做?谢谢你的帮助。

我查看了Vincent提到的另一个线程,我认为我有一个更好的解决方案。我希望这是正确的。正如Vincent指出的,您最大的问题是,针对此类非线性问题的优化工具在处理约束时没有提供太多的灵活性。这里有两种类型的约束:1所有权重必须大于等于0,2它们的总和必须等于1

optim函数有一个较低的选项,可以处理第一个约束。对于第二个约束,您必须有点创造性:您可以通过在要最小化的函数中缩放权重来强制权重总和为1,即将相关函数重写为函数w corX%*%w/sumw,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)