
配列の平均をそのままに分散だけ小さくするアルゴリズム
たとえば
500,500,1000,2000,6000
という配列があったとします。
仮にこの配列の分散を100と仮定します。
この配列を平均化したもの
2000,2000,2000,2000,2000
の分散を0と仮定します。
そこで質問です。
この配列のここでいう分散50の配列の算出方法はありませんでしょうか?
イメージとしては税金の再分配で例えると
分散0は完全な共産主義、分散100は税金なし、
分散50はその中間をとった感じです。
できれば、500が1000になるのと6000が5500になるのでは
同じ500の増減でも価値が違う感じも残しつつだとうれしいです。
すごくわかりづらい説明で、
自分でも質問の内容に無理があるとは感じているのですが、
もし、そのようなアルゴリズムがあれば教えていただきたいです。
以上、よろしくお願いします。
No.4ベストアンサー
- 回答日時:
なるほど。
差分をルート2倍する方法は平均のみを基準にした場合ですが、あなたの欲しがっている変換はゼロを基準にしているようですね。共産主義云々のくだりからすると、100も基準にするのでしょうか。
対数を取る時点で学問的な根拠はないですから、最後に数倍することをためらう理由もないかと思います。あくまで変換なので、それでまずまず直観に合っていると思われるならそれに従うのが良いでしょう。
真面目に統計学に従わせようと思ったら、そのたびに方程式を解かなきゃいけないような気がします。「分散を半分にする」という変換自体が比較的怪しい操作ですから、あんまり生真面目にならないほうが良いですよ。
もし 0 と 100 を基準にしてきちんとした比率を保ちたいのであれば、平均と0,または平均と100との間にゴムでデータが張ってあるようなモデルを考えるとよさそうです。
引っ張る力を強くすると平均に近づいて、弱くすると0や100に近づきます。この例だと最大と最小からの変化の割合が一定に保たれるだけで平均はずれそうですが、感覚的にはこれに近そうに聞こえました。
No.3
- 回答日時:
差をルート2で割る、というのは、価値の違いを含めた方法のつもりだったんですけどね。
6000と1000を、4800と1300くらいに変換するのは、統計学的な意味で分散を半分にするには妥当なところでしょう。
> できれば、500が1000になるのと6000が5500になるのでは
> 同じ500の増減でも価値が違う感じも残しつつだとうれしいです。
それとも、比率は同じにしておきたいということですか??
6000が0.8倍になったなら、1000も0.8倍になる、とか、
6000と平均との差が0.8倍になったなら、他の差も0.8倍になる、とか?
(上のほうの例は平均がずれるので明らかに無理ですけどね)
何はともあれ、
> 「500 が 1000 になるのと 6000 が 5500 になるのとでは『どのくらい』価値が違うの?
> 500 が 1000 になるのと『同じ』価値なのは, 6000 がいくらになったとき?」とか
> 「そもそも最初の例でどうなっていれば『できれば』も入ったことになるの?」
これに答えていただくのが良いかと思います。
ご回答ありがとうございます。
>差をルート2で割る、というのは、価値の違いを含めた方法のつもりだったんですけどね。
>6000と1000を、4800と1300くらいに変換するのは、統計学的な意味で分散を半分にするには妥当なところでしょう。
上記に関してなんですが、たとえば下記の配列の場合
1
2000
2000
2000
3999
平均との差をルート2で割ると
586.4935444
2000
2000
2000
3413.506456
のようになるんですが、1つ目は1→586で500倍になってるにも関わらず、
5つ目は3999→3413で少し減っただけなので、
漠然とですが、少し不公平な気がします。
> 「500 が 1000 になるのと 6000 が 5500 になるのとでは『どのくらい』価値が違うの?
> 500 が 1000 になるのと『同じ』価値なのは, 6000 がいくらになったとき?」とか
> 「そもそも最初の例でどうなっていれば『できれば』も入ったことになるの?」
上記をよく考えてみたのですが、
自分の考えている妥当な値は対数に直した後に
平均との差分をルート2で割り、
合計が減っているのでつじつまを合わせるために数倍した
下記の配列になる気がします。
826.9079814
826.9079814
1349.94954
2203.828963
4792.405534
ただし、やはりこのやり方では
最後の「つじつまを合わせるために数倍する」根拠が全くないので
変な感じがするのですが。
No.2
- 回答日時:
「できれば」を無視すれば #1 の通りなので簡単.
「できれば」を組込もうとすると「500 が 1000 になるのと 6000 が 5500 になるのとでは『どのくらい』価値が違うの? 500 が 1000 になるのと『同じ』価値なのは, 6000 がいくらになったとき?」とか「そもそも最初の例でどうなっていれば『できれば』も入ったことになるの?」とか, いろいろな疑問に答えてもらわないといかんかな.
回答ありがとうございます。
自分の質問に明らかに説明というか情報が足りていないのは分かっているんですが、
ただ漠然と、直感的に変にならない感じの結果がでてくるアルゴリズムがあれば
教えていただきたいんですが、
やっぱり無茶でしょうか。
イメージとしては、
その分散の0~100までの数値で共産主義度合いがあらわせるような感じなのですが。
自分としてはおそらく対数を使用すればいいんじゃないかくらいにしか
考えが及びません。
No.1
- 回答日時:
アルゴリズムというか、ふつうに計算するだけですね。
統計学での「分散」の定義はご存知ですか?
一個一個の平均からの差をルート2で割れば、分散は半分になるんじゃないですかね。
回答ありがとうございます。
おっしゃった方法でやってみました。
(500)939.3398282
(500)939.3398282
(1000)1292.893219
(2000)2000
(6000)4828.427125
ですが、これだと下の部分が反映できていないかと感じましたので
>できれば、500が1000になるのと6000が5500になるのでは
>同じ500の増減でも価値が違う感じも残しつつだとうれしいです。
各値の対数をとって、その平均との差をルート2で割ってみたのですが、
653.2640586
653.2640586
1066.471161
1741.042879
3786.039511
となり合計が
7900.081669
なりました。
これでは都合が悪いので平均を合わせるために
全部に10000/7900.081669
をかけてみたら下みたいな感じになりました。
(500)826.9079814
(500)826.9079814
(1000)1349.94954
(2000)2203.828963
(6000)4792.405534
対数でやってみると平均が少なくなりつじつまを合わせるために無理やり
全体を増やしたのと、2000の部分が平均より増えていて気持ち悪いので
いいアルゴリズムとは思えないんですが、
なにかこう、直感的にいい感じできれいな方法など
他にあれば教えてほしいです。
わかりずづらく、あいまいで申し訳ございません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 大学・短大 大学 統計学 1 2022/09/14 11:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- 統計学 統計学の質問【帰無仮説】 大学で、現在の在籍者の平均通学時間が60分であるという帰無仮説を、それが6 8 2023/05/23 20:56
- 数学 【 数Ⅰ 分散 】 問題 20個の値からなるデータがあり, そのうちの8個の値の平均値は3,分散は4 4 2023/02/15 23:28
- 数学 数学の答えと解き方を教えてください。 問:ある(人数の非常に多い)集団から無作為に6名を選んで身長を 4 2022/12/14 10:06
- 統計学 統計でこの問題わかる方、教えて下さいm(_ _)m 「会社に就職した。出張でルートAで行くと、31 2 2022/07/17 09:44
- 統計学 不偏分散について 3 2022/03/29 15:57
- 統計学 統計学の質問【帰無仮説】 昨年度のA大学卒業者の平均初任給(月額・万円)について調べるために、昨年度 1 2023/05/25 23:30
- 所得税 合同会社の清算と財産の分配 1 2023/07/27 11:49
- 統計学 統計学が分かりません!詳しい解説と回答を教えてくださる方お願いいします! 5 2022/08/23 03:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
複数ファイルの指定セルをコピ...
-
コンボボックスの記述の簡素化
-
配列の平均をそのままに分散だ...
-
verilogで配列の任意の8bitを取...
-
2つ以上の変数を比較して最大数...
-
MATLABとC++
-
配列変数の添字が範囲外ですと...
-
C言語
-
配列の定義
-
入力した整数のうち、最小のも...
-
VB.NET2015 サブルーチンの使い方
-
RPG E仕様書について
-
fortranのwrite文について
-
MATLABにて場合分け関数を定義...
-
ヤマ括弧でくくられたテキスト...
-
2次元動的配列の第一引数のみを...
-
配列 x に入っているデータの個...
-
VBAで配列をまるごとコピー
-
順列の作成
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
VBA 1次元配列を2次元に追加する
-
特定のセル範囲で4文字以上入力...
-
ListViewで、非表示列って作れ...
-
配列変数の添字が範囲外ですと...
-
VB6 配列を初期化したい
-
subの配列引数をoptionalで使う...
-
《エクセル2000》A列・B列の商...
-
2次元動的配列の第一引数のみを...
-
ビンゴ
-
for each の現在の配列ポインタ...
-
配列に同じ値を入れる方法
-
配列を任意の数値で埋める方法
-
配列内の内容を全て表示する方法
-
Excel-VBAの配列「Public Const...
-
エクセルVBAの配列二重ループ処...
-
Array配列の末尾に追加したい。
-
MATLABにて場合分け関数を定義...
-
エクセルで最小値から0を除く方法
おすすめ情報