私は正と負の数でExcelの成長率を計算しようとしています。
This Year's value: 2434
Last Year's value: -2
私が使用している式は次のとおりです。
(This_Year - Last_Year) / Last_Year
=(2434 - -2) / -2
問題は、私が否定的な結果を得るということです。おおよその成長数を計算できますか?もしそうなら、どのように?
私は正と負の数でExcelの成長率を計算しようとしています。
This Year's value: 2434
Last Year's value: -2
私が使用している式は次のとおりです。
(This_Year - Last_Year) / Last_Year
=(2434 - -2) / -2
問題は、私が否定的な結果を得るということです。おおよその成長数を計算できますか?もしそうなら、どのように?
両方が正になるように、数値スペースを上にシフトしてみてください。
任意の2つの正または負の数の間のゲインを計算するには、一方の足をマグニチュード成長の世界に、もう一方の足をボリューム成長の世界に保持する必要があります。結果のゲインをどのように表示するかに応じて、どちらかの側に寄りかかることができ、それぞれの選択に結果があります。
ストラテジー
古い数と新しい数に対して正の数を生成するシフト方程式を作成します。
古い番号と新しい番号にカスタムシフトを追加して、new_shiftedとold_shiftedを取得します。
(new_shifted --old_shifted)/ old_shifted)の計算を行って、ゲインを取得します。
例えば:
old -> new
-50 -> 30 //Calculate a shift like (2*(50 + 30)) = 160
shifted_old -> shifted_new
110 -> 190
= (new-old)/old
= (190-110)/110 = 72.73%
シフト機能の選び方
たとえば、各数値に10000を追加するなど、シフト関数が数値を上にシフトしすぎると、常に小さな増加/減少が発生します。しかし、シフトが両方の数値をプラスの領域に入れるのに十分な大きさである場合、エッジケースの成長/減少に大きな変動が生じます。特定のアプリケーションに適したシフト機能をダイヤルする必要があります。この問題に対する完全に正しい解決策はありません、あなたは甘いもので苦いものをとらなければなりません。
これをExcelに追加して、数値とゲインがどのように変化するかを確認します。
shift function
old new abs_old abs_new 2*abs(old)+abs(new) shiftedold shiftednew gain
-50 30 50 30 160 110 190 72.73%
-50 40 50 40 180 130 220 69.23%
10 20 10 20 60 70 80 14.29%
10 30 10 30 80 90 110 22.22%
1 10 1 10 22 23 32 39.13%
1 20 1 20 42 43 62 44.19%
-10 10 10 10 40 30 50 66.67%
-10 20 10 20 60 50 80 60.00%
1 100 1 100 202 203 302 48.77%
1 1000 1 1000 2002 2003 3002 49.88%
ゲインのパーセンテージは、数値の大きさの影響を受けます。上記の数値は悪い例であり、プリミティブシフト関数の結果です。
どの生き物が最も生産的な利益を得るかを自問する必要があります。
Evaluate the growth of critters A, B, C, and D:
A used to consume 0.01 units of energy and now consumes 10 units.
B used to consume 500 units and now consumes 700 units.
C used to consume -50 units (Producing units!) and now consumes 30 units.
D used to consume -0.01 units (Producing) and now consumes -30 units (producing).
いくつかの方法で、各生き物が独自の方法で最大の栽培者であるという議論をすることができます。Bが最高の栽培者であると言う人もいれば、Dがより大きな利益であると言う人もいます。どちらが良いかは自分で決める必要があります。
問題は、私たちが成長としてラベル付けするもののこの直感的な感覚を、人間が「素晴らしい成長」と「平凡な成長」と見なす傾向があることを示す連続関数にマッピングできるかということです。
不思議な成長
次に、クリッターBはクリッターDよりもはるかに困難な時間を過ごした可能性があることを考慮に入れる必要があります。クリッターDは、将来、他のクリッターよりもはるかに多くの可能性を秘めている可能性があります。アドバンテージがありました!opportunity
、、、およびの成長difficulty
をどのように測定しますか?将来を予測できるようにするには、「主要なホームラン」と「生産性の大幅な向上」を構成するものを直感的に理解する必要があります。velocity
acceleration
関数の1次および2次導関数は、「成長の速度」と「成長の加速」を提供します。微積分のそれらについて学びなさい、それらは非常に重要です。
どちらがもっと成長していますか?毎分成長を加速している生き物、または成長を減速している生き物?高速と低速、および高/低変化率はどうですか?成長の機会を使い果たすという概念についてはどうでしょうか。費用便益分析と機会を利用する能力/無力。敵対的なシステム(あなたの成功は他の人の失敗から来る)とゼロサムゲームはどうですか?
指数関数的成長、ライナー成長があります。そして持続不可能な成長。費用便益分析とデータへの曲線の適合。世界は私たちが想像できるよりはるかに奇妙です。データに完全な線をプロットしても、ブラックスワン効果のために次に来るデータポイントはわかりません。私はすべての人間が成長についてのこの講義を聞くことを提案します、コロラド大学ボルダー校は成長、それが何であるか、それが何でないか、そして人間がそれを完全に誤解する方法について素晴らしい話をしました。 http://www.youtube.com/watch?v=u5iFESMAU58
温水の温度に線を合わせます。曲線に合わせたと思ったら、黒い白鳥が発生し、水が沸騰します。この効果は私たちの宇宙全体で起こり、あなたの原始関数(新旧)/旧はあなたを助けません。
これが私のニーズに合ったきちんとしたパッケージで上記の概念のほとんどを達成するJavaコードです:
生き物の成長-(生き物は「電波」、「カブトムシ」、「油温」、「ストックオプション」など、何でもかまいません)。
public double evaluate_critter_growth_return_a_gain_percentage(
double old_value, double new_value) throws Exception{
double abs_old = Math.abs(old_value);
double abs_new = Math.abs(new_value);
//This is your shift function, fool around with it and see how
//It changes. Have a full battery of unit tests though before you fiddle.
double biggest_absolute_value = (Math.max(abs_old, abs_new)+1)*2;
if (new_value <= 0 || old_value <= 0){
new_value = new_value + (biggest_absolute_value+1);
old_value = old_value + (biggest_absolute_value+1);
}
if (old_value == 0 || new_value == 0){
old_value+=1;
new_value+=1;
}
if (old_value <= 0)
throw new Exception("This should never happen.");
if (new_value <= 0)
throw new Exception("This should never happen.");
return (new_value - old_value) / old_value;
}
結果
それは、人間が生き物の成長に対して本能的な感覚を持っているような、ある種の振る舞いをします。私たちの銀行口座が-9000から-3000になると、それは口座が1000から2000になるときよりも良い成長であると言えます。
1->2 (1.0) should be bigger than 1->1 (0.0)
1->2 (1.0) should be smaller than 1->4 (3.0)
0->1 (0.2) should be smaller than 1->3 (2.0)
-5-> -3 (0.25) should be smaller than -5->-1 (0.5)
-5->1 (0.75) should be smaller than -5->5 (1.25)
100->200 (1.0) should be the same as 10->20 (1.0)
-10->1 (0.84) should be smaller than -20->1 (0.91)
-10->10 (1.53) should be smaller than -20->20 (1.73)
-200->200 should not be in outer space (say more than 500%):(1.97)
handle edge case 1-> -4: (-0.41)
1-> -4: (-0.42) should be bigger than 1-> -9:(-0.45)
最も簡単な解決策は次のとおりです。
=(NEW/OLD-1)*SIGN(OLD)
このSIGN()
関数は-1
、値が負の1
場合と値が正の場合に発生します。したがって、これを掛けると、前の値が負の場合、条件付きで結果が反転します。
ベースが0未満で、現在の数値が0より大きい場合、成長率は意味のある測定値ではありません。
Yr 1 Yr 2%変更(絶対値ベース)
-1 10%1100
-10 10%200
上記の計算は、この測定値の弱点を示しています。基準年が負で、現在が正の場合、結果はN/Aです。
この計算は厳密な数学的観点では意味がないことは事実ですが、財務データをチェックしている場合でも、それは有用な指標です。式は次のようになります。
if(lastyear>0,(thisyear/lastyear-1),((thisyear+abs(lastyear)/abs(lastyear))
簡単な数値で式を経験的に検証してみましょう。
thisyear=50 lastyear=25 growth=100%
理にかなっている
thisyear=25 lastyear=50 growth=-50%
理にかなっている
thisyear=-25 lastyear=25 growth=-200%
理にかなっている
thisyear=50 lastyear=-25 growth=300%
理にかなっている
thisyear=-50 lastyear=-25 growth=-100%
理にかなっている
thisyear=-25 lastyear=-50 growth=50%
理にかなっている
繰り返しになりますが、数学的には正しくない場合がありますが、意味のある数値が必要な場合(グラフやその他の数式にプラグインする場合)、特にN / Aを使用すると、後続のすべての計算が失敗する可能性がある場合は、N/Aの代わりになります。
あなたは負の結果を得るはずです-あなたは負の数で割っています。昨年がマイナスだった場合、マイナスの成長が見られました。で割ることでこの異常を回避できますAbs(Last Year)
シナリオを描きましょう。
差出人:-303から183まで、変化率はどのくらいですか?
-303、-100%0 183、60.396%303、100%
| _________________ |||||||||||||||||||||||| ________ |
(183 --- 303)/ | -303 | * 100 = 160.396%
合計変化率は約160%です
注:値がどれほど負であっても、-100%として扱われます。
この問題を解決する最良の方法は、式を使用して勾配を計算することです。
(y1-y2 / x1-x2)
* x1を最初の瞬間として定義すると、値は「C4 = 1」になります。x2を最初の瞬間として定義すると、値は「C5=2」になります。
正しい成長率を得るには、次の順序に従います。
=(((B4-B5)/(C4-C5))/ ABS(B4))* 100
完璧に動作します!
最も簡単な方法は私が使用する方法です。
=(ThisYear - LastYear)/(ABS(LastYear))
ただし、特定の状況でのみ機能します。特定の値を使用すると、結果が反転します。
両方の正の数の結果として通常の成長に匹敵する成長値が必要な場合は、両方を正にシフトすることは実際には意味がありません。2つの正の数の成長を見たいのであれば、シフトしたくありません。
ただし、2つの負の数の成長を逆にすることは理にかなっています。-1から-2は、数学的には100%の成長ですが、それは何か前向きなもののように感じられ、実際、結果は減少になります。
したがって、次の関数があり、2つの負の数の成長を反転させることができます。
setGrowth(Quantity q1, Quantity q2, boolean fromPositiveBase) {
if (q1.getValue().equals(q2.getValue()))
setValue(0.0F);
else if (q1.getValue() <= 0 ^ q2.getValue() <= 0) // growth makes no sense
setNaN();
else if (q1.getValue() < 0 && q2.getValue() < 0) // both negative, option to invert
setValue((q2.getValue() - q1.getValue()) / ((fromPositiveBase? -1: 1) * q1.getValue()));
else // both positive
setValue((q2.getValue() - q1.getValue()) / q1.getValue());
}
これらの質問は、「どうすればよいですか」という質問に答えています。「私がすべきか」という質問を考慮せずに。正の値と負の値をとる変数の値の変化は、統計的に言えば、かなり意味がありません。「シフト」の提案は、一部の変数(たとえば、ケルビンスケールまたは問題を処理するためにシフトできる温度)ではうまく機能する可能性がありますが、否定性が方向に正確な影響を与える他の変数では非常に不十分です。たとえば、純利益または純損失。以前の投稿が示唆しているように、損失(負の所得)での運用はこの文脈では正確な意味を持ち、-50から30への移動は110から190への移動とまったく同じではありません。これらのパーセンテージの変化は、おそらく「NA」として報告されるはずです。
分周器を絶対数に変更するだけです。
A B C D
1 25,000 50,000 75,000 200%
2 (25,000) 50,000 25,000 200%
の式D2
は次のとおりです。=(C2-A2)/ABS(A2)
すべての正の行と比較すると、結果は同じです(絶対ベース数が同じ場合)。式にが含まれていない場合ABS
、結果は-200%になります。
フランコ
このコードを使用します:
=IFERROR((This Year/Last Year)-1,IF(AND(D2=0,E2=0),0,1))
このコードの最初の部分iferrorは、負の値または0の値がある場合にN/Aの問題を取り除きます。これは、e2とd2の値を調べて、両方が0でないことを確認することによって行われます。両方が0の場合、0%になります。セルの1つだけが0の場合、0の値がどこにあるかに応じて、100%または-100%になります。このコードの2番目の部分(e2 / d2)-1は、(今年-昨年)/昨年と同じコードです
今日は答えを探していましたが、これでうまくいくと思います...
= IF(C5 = 0、B5 / 1、IF(C5 <0、(B5 + ABS(C5)/ 1)、IF(C5> 0、(B5 / C5)-1)))
C5 =昨年、B5=今年
セルには3つのIFステートメントがあります。
昨年が0の場合、今年を1で割った値
昨年が0未満の場合、今年+昨年の絶対値を1で割った値
昨年が0より大きい場合、今年を昨年から1を引いた値で割った値
次の式を使用します。
= 100%+(2年目/ 1年目)
論理は、1年目にネガティブの100%(したがって、最初の100%)を回復し、超過分は1年目に対する比率になるというものです。
数式は次のようになります。
=(thisYear+IF(LastYear<0,ABS(LastYear),0))/ABS(LastYear)-100%
<0の場合のIF値が、実際の差を生成するためにThisyear値に追加されます。
> 0の場合、LastYear値は0です
チェックされたさまざまなシナリオで動作するようです
短いもの:
=IF(D2>C2, ABS((D2-C2)/C2), -1*ABS((D2-C2)/C2))
または紛らわしいもの(私の最初の試み):
=IF(D2>C2, IF(C2>0, (D2-C2)/C2, (D2-C2)/ABS(C2)), IF(OR(D2>0,C2>0), (D2-C2)/C2, IF(AND(D2<0, C2<0), (D2-C2)/ABS(C2), 0)))
D2は今年、C2は昨年です。
この記事では、(b --a)/ ABS(a)の式が理にかなっている理由について詳しく説明します。最初は直感に反しますが、基礎となる算術を試してみると、意味がわかり始めます。最終的にはそれに慣れるにつれて、パーセンテージの見方が変わります。
目標は、増加率を取得することです。アイデアは次のとおりです。最初に絶対増加の値を計算します。次に、絶対増加の値が、今年と昨年の両方の値に追加されます。次に、新しい値に基づいて増加率を計算します。例えば:
LastYear | ThisYear | AbsoluteIncrease | LastYear01 | ThisYear01 | Rate
-10 | 20 | 30 = (10+20) | 20=(-10+30)| 50=(20+30) | 2.5=50/20
-20 | 20 | 40 = (20+20) | 20=(-20+40)| 60=(20+40) | 3=60/2
=(This Year - Last Year) / (ABS(Last Year))
これは、今年と昨年が常に正の数である場合にのみ確実に機能します。
たとえば、last_year = -50 this_year=-1です。実際に数値が大幅に改善された場合、-100%の成長が得られます。