Home / 関数リファレンス

MAP関数で正規分布を描く

OVERVIEW はじめに ―― ブラックボックスを解体する

Excelには NORM.S.DIST(標準正規分布)や NORM.DIST(一般正規分布)という、確率密度を即座に返す組み込み関数が存在します。実務でグラフを描くだけならこれで十分です。しかし、「その値がなぜそうなるのか」は関数の内部に隠れたまま、答えだけが出力されます。

このページでは、正規分布の確率密度関数(PDF)の数式を、MAPLAMBDA を使ってExcel上に直接組み立て、グラフ化することを目標にします。組み込み関数は一切使いません。ブラックボックスを自分の手で再現することで、統計の数理とExcelの動的配列関数、両方の理解を同時に深めることができます。

なお、x軸の等間隔配列の生成には MAKEARRAY または SEQUENCE を使います。こちらは補助的な役割のため、本稿では簡単に触れる程度にとどめます。

MAP関数の基本 ―― 「配列を丸ごと変換する」という発想

STEP 1 MAP関数の構文と役割

MAP 関数は、配列の各要素に対して同じ処理を適用し、元の配列と同じサイズの配列を返す関数です。「処理の内容」は LAMBDA で定義します。

構文 =MAP( 配列, LAMBDA( 変数, 処理 ) )

たとえば、A2:A11に10個の数値が入っているとき、それぞれを2乗した10個の配列を返すには次のように書きます。

=MAP(A2:A11, LAMBDA(x, x^2))

入力が10要素なら出力も10要素。これが MAP の本質です。SCANREDUCE が「集約」や「累積」を担うのに対し、MAP「1対1の変換」に特化しています。

この「変換」という性質は、ある数式を配列のすべての要素に適用したい場面――たとえば、x座標 of 配列から対応するy値(関数値)を一括計算する場面――で最大の威力を発揮します。正規分布のグラフ描画は、まさにその典型例です。

正規分布の確率密度関数(PDF)とは

STEP 2 式の意味を読む

正規分布の確率密度関数(PDF: Probability Density Function)は、次の式で定義されます。

PDF f(x) = ( 1 / (σ × √(2π)) ) × exp( −(x − μ)² / (2σ²) )

記号の意味は次のとおりです。

  • μ(ミュー): 分布の平均。グラフのピーク位置を決めます。
  • σ(シグマ): 分布の標準偏差。グラフの裾野の広がりを決めます。
  • π(パイ): 円周率(≒ 3.14159…)。
  • exp(…): 自然対数の底 e(≒ 2.71828…)の指数関数。

式の構造は2つのブロックに分解できます。

  • 係数部分 1 / (σ × √(2π)) 曲線下の面積が必ず1になるよう調整する「正規化係数」です。μやσによって高さのスケールが変わります。
  • 指数部分 exp( −(x − μ)² / (2σ²) ) x が μ から離れるほど急速に小さくなる「ベル型のカーブ」の本体です。(x − μ)² が分子にあるため、μからの距離が大きいほど値が急減します。

NORM.S.DIST(x, FALSE)NORM.DIST(x, μ, σ, FALSE) は、この式をExcelが内部で計算して返しているにすぎません。これから行うのは、その計算を自分の数式として明示的に組み立てることです。

実装 ―― 数式をExcelに翻訳する

STEP 3 シートのレイアウトとx軸配列の準備

まず、μとσをセルに入力し、パラメータとして参照できるようにします。ここでは B1セルにμ、B2セルにσ を置くことにします。

A B
1 μ(平均) 0
2 σ(標準偏差) 1

次に、x軸の値(グラフの横軸座標)を等間隔で用意します。SEQUENCE 関数を使い、−4 から +4 まで 0.1 刻みで81点分生成する場合は次のようにします。D2セル に入力すると D2:D82 に縦1列でスピル展開されます。

D2 =SEQUENCE(81, 1, -4, 0.1)

μやσを変えたときにx軸の範囲も動かしたい場合は MAKEARRAY と組み合わせてパラメータ駆動にすることもできますが、今回は固定範囲のまま進めます。

STEP 4 MAP + LAMBDA でPDFを実装する

x軸の配列(D2:D82)が準備できたら、E2セルに以下の数式を入力します。D列の各x値に対してPDFの値を計算し、同じ行数(81行)の配列をスピル出力します。

E2 =MAP(D2:D82, LAMBDA(x, (1/(B$2*SQRT(2*PI())))*EXP(-((x-B$1)^2)/(2*B$2^2))))

数式の各要素がPDFの式のどの部分に対応するかを確認しておきます。

  • 1/(B$2*SQRT(2*PI())):係数部分 1 / (σ√(2π)) に相当します。
  • EXP(-((x-B$1)^2)/(2*B$2^2)):指数部分 exp(−(x−μ)² / (2σ²)) に相当します。
  • B$1 がμ(平均)、B$2 がσ(標準偏差)への参照です。行を絶対参照にしているのは、スピル展開中に参照がずれないようにするためです。

MAP の働きにより、D列の81個 of x値それぞれに対してこの計算が実行され、E2:E82 にPDF値がスピル出力されます。数式は E2の1マスだけに入力すれば完結します。

D E
1 x f(x)
2 −4.0 0.000134
3 −3.9 0.000199
4 −3.8 0.000292
5
42 0.0 0.398942
43 0.1 0.396953
82 4.0 0.000134

x = 0(μと一致)のとき、f(x) ≒ 0.3989 となっています。NORM.S.DIST(0, FALSE) の戻り値と一致することを確認しておくと、実装の正しさを検証できます。

グラフ化と確認 ―― μとσを動かしてみる

STEP 5 散布図(平滑線)で描画する

D列(x値)とE列(f(x)値)を選択し、散布図(平滑線)を挿入します。折れ線グラフではなくxy散布図を選ぶのがポイントです。折れ線グラフはx軸をカテゴリとして扱うため、等間隔なx座標の連続関数として正しく描画できません。

グラフが描画されたら、B1セルのμやB2セルのσの値を変えてみてください。

  • μを変えると、ベル曲線のピーク位置が左右にスライドします。
  • σを大きくすると、曲線は低く平べったく広がります。ピーク値 1/(σ√(2π)) が小さくなるためです。
  • σを小さくすると、曲線は高く細くなります。分布が平均周辺に集中していることを意味します。

この挙動は、係数部分と指数部分のそれぞれがσにどう依存しているかを数式から直接読み取れます。組み込み関数を使っているだけでは気づきにくい「σが変わると全体のスケールも変わる」という感覚を、自力実装を通じて確認できるのが本稿の要点です。

STEP 6 NORM.DIST との照合で実装を検証する

実装の正確さを確認するには、F列に NORM.DIST の値を並べて差分を計算するのが確実です。

F2 =MAP(D2:D82, LAMBDA(x, NORM.DIST(x, B$1, B$2, FALSE)))
G2 =E2:E82 - F2:F82

G列の差分がすべて 0(または浮動小数点誤差レベルの極小値)であれば、自力実装がExcelの組み込み関数と同じ結果を出していることが確認できます。「数式を書く → 検証する」というこのサイクル自体が、統計的な考え方の実践ともなります。

まとめ ―― MAP関数を使いこなすための3箇条

  1. 「配列 → 配列」の変換にはMAP: 入力と出力のサイズが変わらない変換処理は MAP の独壇場です。集約が必要なら REDUCE、累積ならば SCAN と使い分けてください。
  2. パラメータはセル参照で分離し、絶対参照で固定する: LAMBDA 内でμやσを直接数値として書き込むと、条件を変えるたびに数式を書き直す必要が生じます。セルに分離し B$1 のように行を絶対参照にしておくことで、スピル展開中の参照ずれを防ぎ、パラメータ変更に即座に追従する動的な実装になります。
  3. 自力実装の後に組み込み関数と照合を: NORM.DIST との差分計算による検証は、数式の誤りを発見するだけでなく、「自分が何を実装したのか」への理解を深めます。ブラックボックスを解体して再構築し、元の結果と照合する ―― この地味な一連の作業が、Excelで学ぶ"統計力"を高める実践的な方法となります。