我正在尝试在R中进行最大化,这是我之前在Excel中使用求解器完成的。问题是我不知道如何处理它(我在R中没有很好的水平)。
让我们谈谈我的数据。我有26个瑞士州和瑞士政府(这是26个州的价值之和)及其人口和“财富”。所以我有27个变量观察。我不确定以下描述是否有用,但我还是把它们放了。从这里,我用while循环计算一些变量。对于每个州[i]:
这里是我使用的循环的一个小例子:
RI=0
i = 1
while(i<28){
RI[i]=resource potential capita [i]/resource potential capita [27]*100
i = i+1
}
瑞士政府(i = 27)的资源指数(RI)为100,因为我们将瑞士政府的资源潜力(当i = 27)除以自己并乘以100因此,所有RI> 100的州都是富州,而其他(IR <100)是贫穷的州。直到这里,没有问题。我刚刚解释了我是如何构建数据集的。
现在我面临的问题是:我必须创建变量加权差异(wd)。它取值:
我像这样创建这个变量:(对不起代码的弱点,我尽我所能)。
wd=-1
i = 1
a = 0
c = 0
tot = 0
while(i<28){
if(i == 27) {
wd[i] = a
} else if (RI[i] < 100) {
wd[i] = (100-RI[i])^(1+P)*Pop[i]
c = wd[i]
a = a+c
} else {
wd[i]= 0
}
i = i+1
}
但是,我现在不是“p”的值。它是介于0和1之间的值。要查找p的值,我必须使用以下功能进行最大化:
我们在两个等式中有 p :RI_min和wd。为了在Excel中解决它,我使用了具有以下功能的Excel解算器:
在Excel中, p 是我的可变单元格(唯一允许更改的值), p_dot 是我定义的目标, RI_26 = RI_min 是我的约束。
所以我想最大化 p ,我不知道如何在R中这样做。我的主要问题是 RI_min中存在 p 和 wd 。我们需要做一个迭代来解决它,但这离我的技能太远了。
是否有人能够帮助我提供我提供的信息?
答案 0 :(得分:0)
你应该研究一下optim函数。 在这里,我将尝试给你一个非常简单的解释,因为你说你在R中没有一个非常好的水平。
假设我有一个函数f(x),我想要最大化,因此我想找到给出最大值f(x)的参数x。
要做的第一件事就是定义函数,在R中你可以用:
来完成myfunction<- function(x) {...}
定义了函数后,我可以使用以下命令对其进行优化:
optim(par,myfunction)
其中par是函数初始参数的向量,myfunction是需要优化的函数。请记住,optim执行最小化,但如果控制$ fnscale为负,它将最大化。另一种策略是改变功能(即改变符号)以适应问题。
希望这有帮助, 马可
答案 1 :(得分:0)
根据您提供的描述,如果我没有弄错,看起来您需要做的一切只是一个等式。 特别是你有以下两个表达式:
RI_min = 100-((x*y)/((1+p)*z*100))^(1/p)
并且,由于x,y,z是固定的,唯一的变量是p。 此外,如果RI_26 = RI_min,则得到:
65.9 =100-((x*y)/((1+p)*z*100))^(1/p)
插入您提供的x,y和z的值,这将产生
p=0.526639915936052
我不明白你究竟想要最大限度地发挥作用。