Excel 在R中,如何找到最佳变量来最大化或最小化两个数据集之间的相关性
我可以在Excel中轻松完成这项工作,但我的数据集太大了。在excel中,我将使用解算器Excel 在R中,如何找到最佳变量来最大化或最小化两个数据集之间的相关性,excel,r,optimization,correlation,Excel,R,Optimization,Correlation,我可以在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) 在解算器中,我会通过改变变
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)
在解算器中,我会通过改变变量x,y和设置某些约束(例如x,y都必须是正数),将correl(C,D)的目标设置为max
我在R怎么做?感谢您的帮助。在R中,您创建了一个
函数
,其输出是您希望最大化或最小化的值。base R中包含的一个优化器称为optim()
:
set.seed(1)
A在R中,生成一个函数,其输出是要最大化或最小化的值。base R中包含的一个优化器称为optim()
:
set.seed(1)
A如果您想将pars[1]
替换为abs(pars[1])
。如果optim()
然后为x
吐回一些负数,只要取它的绝对值,你仍然会知道它是最优的。明白了,在我得到的代码的optim()部分之后(cor(C,D)中的错误):“y”必须是数字的..再次感谢您,我没有收到这个错误。它对我来说运行得很顺利。您是在运行这个精确的代码还是一些修改过的代码?如果它被修改了,请将它作为一个编辑放在您的问题中,我或其他人会看到它的,谢谢您的帮助!现在是更复杂的..如果我想在PAR[1]中添加一个约束+PAR[2]必须等于1..这可能吗?那么在PAR
中只有一个元素,而在函数中的另一个元素是1-PAR
。明白了吗?如果只有一个参数,那么您需要optimize()
函数,而不是optim
。请参见优化,字面上说,替换PAR[1]abs(pars[1])
如果你想要它是正数。如果optim()
然后为x
吐出一些负数,只要取它的绝对值,你仍然会知道它是最优的。明白了,在我得到代码的optim()部分之后(cor(C,D)中的错误):“y”必须是数字的..再次感谢您,我没有收到这个错误。它对我来说运行得很顺利。您是在运行这个精确的代码还是一些修改过的代码?如果它被修改了,请将它作为一个编辑放在您的问题中,我或其他人会看到它的,谢谢您的帮助!现在是更复杂的..如果我想在PAR[1]中添加一个约束+PAR[2]必须等于1..这可能吗?那么在pars
中只有一个元素,在函数中的另一个元素是1-pars
。明白了吗?如果只有一个参数,那么您需要optimize()
函数,而不是optim
。请参见?optimize
,我不确定,但我强烈怀疑这可以通过某种经典线性代数方法实现(例如,典型关联:)--您可能会在stats.stackexchange.com
上询问……我不确定,但我强烈怀疑这可以通过某种经典线性代数方法来实现(例如,规范关联:)--您可能会在stats.stackexchange.com
上询问。。。
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)