ソルバーを使用して、以前に Excel で行った最大化を R で実行しようとしています。問題は、対処方法がわからないことです(Rのレベルが高くありません)。
私のデータについて少し話しましょう。スイスには 26 の州があり、スイス政府 (26 の州の値の合計) とその人口と「富」があります。したがって、変数ごとに27の観測があります。以下の説明が役に立つかどうかはわかりませんが、とりあえず置いておきます。これから、while ループでいくつかの変数を計算します。各カントンについて [i]:
- リソースの可能性 = 平均 (wealth2011 [i],wealth2012 [i],wealth2013 [i])
- 人口平均 = 平均(人口 2011 [i]、人口 2012 [i]、人口 2013 [i])
- 1 人あたりの資源ポテンシャル = 1000*資源ポテンシャル [i]/人口 [i]
- 資源指数 = 100*資源潜在人員[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)を作成する必要があります。次の値を取ります。
- RI>100 の場合は0 (豊かなカントン)
- (100-RI[i])^(1+P)*Pop[i] if RI<100 (貧しい州)
この変数を次のように作成します: (コードの脆弱性については申し訳ありませんが、最善を尽くしました)。
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 の値を見つけるには、次の機能を使用して最大化を行う必要があります。
- RI_26 = 65.9、これは私のデータの RI の最小値です
- RI_min = 100-((x*wd [27])/((1+p)*z*100))^(1/p)、x と z は固定値 (x = 8'677、z = 4) '075'977'077) および wd [27] 各カントンの wd の合計。
RI_min と wd の 2 つの式にpがあります。Excel で解決するために、次の機能を備えた Excel ソルバーを使用しました。
- p_dot = RI_26/RI_min* p ==> p_dot =[65.9/100-((x* wd [27])/((1+p)*z*100))^(1/p)]*p
- RI_26 = RI_min ==>65.9 =100-((x*wd [27])/((1+p)*z*100))^(1/p)
Excel では、pは変数セル (変更が許可されている唯一の値)、p_dotは定義する目的、RI_26 = RI_minは制約です。
したがって、pを最大化したいのですが、Rでこれを行う方法がわかりません。主な問題は、 RI_min および wd にp が存在することです。それを解決するために反復を行う必要がありますが、これは私のスキルとはかけ離れています。
私が提供した情報を手伝ってくれる人はいますか?