「アンケート結果の分析で共分散を出したいけど、サンプルデータにはどの関数を使えばいいの?」
スプレッドシートには共分散を求める関数が複数あります。選び方を間違えると、サンプルデータなのに母集団用の関数を使ってしまいがちです。結果が過小評価されて、分析の精度が下がってしまうんですよね。
この記事では、サンプルデータに正しい関数を選べるようになるために、スプレッドシートのCOVARIANCE.S関数の書き方からCOVAR・COVARIANCE.Pとの違い、実務での使い分けまで解説します。
スプレッドシートのCOVARIANCE.S関数とは?標本共分散を求める関数
スプレッドシートのCOVARIANCE.S関数(読み方: コバリアンス・エス関数)は、2つのデータセットの標本共分散を返す統計関数です。「COVARIANCE」は英語で共分散、「S」はSample(標本)の頭文字です。
標本共分散とは、手元のデータが全体の一部(サンプル)であるときに使う共分散のことです。やっていることはシンプルで、2つのデータが一緒にどの方向にどれだけ動くかを、1つの数値にまとめます。
- 正の値: 一方が増えるともう一方も増える傾向(同じ方向に動く)
- 負の値: 一方が増えるともう一方は減る傾向(逆方向に動く)
- 0に近い: 2つのデータに関連性がほぼない
身近な例でいうと、全国チェーン100店舗のうち10店舗だけを抽出して「広告費」と「売上」を調べたとします。広告費が多い店舗ほど売上も多いなら正の標本共分散です。10店舗=全体の一部なので、COVARIANCE.S関数を使います。
COVARIANCE.S関数にできることをまとめると、次のとおりです。
- 2つのデータ間の標本共分散を数値で求める
- データが同じ方向に動くか逆方向に動くかを判定する
- サンプルデータ(標本)から母集団の共分散を偏りなく推定する
- CORREL関数やSTDEV関数と組み合わせてデータ分析の幅を広げる
NOTE
COVARIANCE.S関数はGoogleスプレッドシートの全バージョンで使えます。母共分散を返すCOVARIANCE.P関数やCOVAR関数とは計算結果が異なります。割る数が「n」か「n-1」かの違いです。
COVARIANCE.S関数の書き方(構文と引数)
基本構文
=COVARIANCE.S(データ_y, データ_x)
カッコの中に、共分散を調べたい2つのデータ範囲を指定します。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| データ_y | 必須 | 比較したいデータ範囲の1つ目(例: 売上データ) |
| データ_x | 必須 | 比較したいデータ範囲の2つ目(例: 広告費データ) |
引数はたった2つだけなのでシンプルですよね。注意点として、データ_yとデータ_xのデータ数は同じにする必要があります。データ数が異なると #N/A エラーが出ます。
TIP
範囲内の文字列・TRUE/FALSE・空白セルは自動的に無視されます。ただし、一方が数値で他方が空白というペアがあると、そのペアごと計算から除外されます。
標本共分散の計算の仕組み
COVARIANCE.S関数が内部で行っている計算はこちらです。
COVARIANCE.S = Σ((xi - x平均)(yi - y平均)) / (n - 1)
nはデータの個数です。各データから平均を引いた値同士を掛け合わせ、その合計を(n-1)で割るのがポイントです。
母共分散のCOVARIANCE.P関数は「÷n」で計算します。一方、COVARIANCE.S関数は「÷(n-1)」で計算します。この補正はベッセルの補正と呼ばれる仕組みです。サンプルデータから母集団の共分散を推定するときに、値が小さくなりすぎるのを防ぐ役割があります。
COVARIANCE.S関数の基本的な使い方
実際にCOVARIANCE.S関数を使ってみましょう。
全国チェーンの中から6店舗をサンプルとして抽出し、「広告費」と「売上」を調べたとします。
| A列(店舗) | B列(広告費・万円) | C列(売上・万円) | |
|---|---|---|---|
| 2行目 | 店舗A | 30 | 200 |
| 3行目 | 店舗B | 50 | 320 |
| 4行目 | 店舗C | 40 | 280 |
| 5行目 | 店舗D | 60 | 400 |
| 6行目 | 店舗E | 45 | 310 |
| 7行目 | 店舗F | 70 | 450 |
標本共分散を求める
=COVARIANCE.S(C2:C7, B2:B7)
結果は約 1,256.67 になります。正の値なので、広告費と売上は同じ方向に動くことがわかりますね。
ちなみに同じデータでCOVARIANCE.P関数を使うと約1,047.22です。COVARIANCE.S関数のほうが値が大きくなるのは、÷(n-1)で割っているためです。
マイナス共分散が出るパターン
次に、「気温」と「暖房費」のサンプルデータを見てみましょう。
| D列(気温・度) | E列(暖房費・千円) | |
|---|---|---|
| 2行目 | 5 | 10 |
| 3行目 | 10 | 8 |
| 4行目 | 15 | 6 |
| 5行目 | 20 | 4 |
| 6行目 | 25 | 2 |
=COVARIANCE.S(E2:E6, D2:D6)
結果は -25 になります。気温が上がると暖房費は下がるので、負の標本共分散です。逆方向の関連がはっきりわかりますよね。
WARNING
共分散の値そのものの大小で「関連が強い・弱い」と判断するのは危険です。共分散はデータの単位に依存するため、異なるデータセット間で比較できません。強弱を比較したいときはCORREL関数で相関係数を求めてくださいね。
COVARIANCE.S関数の実践的な使い方・応用例
アンケート結果の項目間関連性を分析する
COVARIANCE.S関数が特に活きるのは、母集団の一部を抽出して調査するアンケートです。
たとえば、全社員500名のうち50名にアンケートを実施したとします。D列に「業務満足度(10点満点)」、E列に「研修受講回数」が入っています。
=COVARIANCE.S(D2:D51, E2:E51)
50名は全社員の一部なので標本です。COVARIANCE.S関数を使うのが正しい選択になります。結果が正の値なら「研修を多く受けた社員ほど満足度が高い傾向がある」と読み取れます。
TIP
「全数データかサンプルか」の判断に迷ったら、次のように考えてください。分析対象の全員・全期間のデータがあれば母集団(COVARIANCE.P関数)です。一部を抜き出したデータであれば標本(COVARIANCE.S関数)です。
複数ペアの共分散をまとめて比較する
売上に影響しそうな要因が複数ある場合、それぞれの標本共分散を並べて方向を確認できます。
全国50店舗のうち10店舗をサンプリングし、売上(C列)と各要因の共分散を求めてみましょう。
=COVARIANCE.S(C2:C11, D2:D11)
=COVARIANCE.S(C2:C11, E2:E11)
=COVARIANCE.S(C2:C11, F2:F11)
結果の符号を見れば、各要因が売上と同じ方向に動くか逆方向に動くかがわかります。ただし、値の大小で影響の強さは判断できません。強さを比較するにはCORREL関数を使ってくださいね。
COVARIANCE.S関数から相関係数を手動計算する
COVARIANCE.S関数の結果を使って、相関係数を自分で計算することもできます。共分散と相関係数の関係が実感できますよ。
=COVARIANCE.S(C2:C7, B2:B7) / (STDEV(C2:C7) * STDEV(B2:B7))
この式は =CORREL(C2:C7, B2:B7) と同じ結果を返します。相関係数は共分散を標準偏差で割って正規化したものなんですね。
NOTE
ここで使っているSTDEV関数は標本標準偏差を求める関数です。COVARIANCE.S関数が標本共分散なので、標準偏差も標本用のSTDEV関数を使います。母集団用のSTDEVPを使うと計算が合わなくなるので注意してください。
データ数が少ないときの注意点
COVARIANCE.S関数は「÷(n-1)」で計算するため、データ数が少ないほどCOVARIANCE.P関数との差が大きくなります。
| データ数(n) | COVARIANCE.P(÷n) | COVARIANCE.S(÷(n-1)) | S÷Pの倍率 |
|---|---|---|---|
| 2 | ÷2 | ÷1 | 2.00倍 |
| 5 | ÷5 | ÷4 | 1.25倍 |
| 10 | ÷10 | ÷9 | 1.11倍 |
| 100 | ÷100 | ÷99 | 1.01倍 |
データが2件だとCOVARIANCE.Sの結果はCOVARIANCE.Pの2倍になります。データ数が100件を超えるとほぼ差がありません。サンプルサイズが小さいときほど、関数の選択が結果に大きく効いてくるということですね。
実務での意思決定に活かす流れ
スプレッドシートで共分散を分析する際は、次の3ステップで進めると判断ミスを防げます。
- データの性質を確認する: 全件データなのか、サンプルなのかを最初にはっきりさせる
- 符号で方向を見る: COVARIANCE.S関数の結果が正・負・ゼロ近辺のどれかで関連の方向を確認する
- CORREL関数で強さを測る: 関連が見られたら相関係数で強弱を数値化する
この流れにすると、共分散だけで結論を急がず、相関係数で裏取りした上で意思決定できます。
COVARIANCE.S関数のよくあるエラーと対処法
#N/Aエラー
COVARIANCE.S関数で最もよく見るエラーです。
| 原因 | 対策 |
|---|---|
| データ_yとデータ_xの行数が異なる | セル範囲の行数を揃える |
たとえば =COVARIANCE.S(B2:B13, C2:C10) のように行数がずれていると発生します。データ範囲を確認してください。
#DIV/0!エラー
COVARIANCE.S関数はCOVARIANCE.P関数より発生条件が厳しいです。
| 原因 | 対策 |
|---|---|
| 数値データが1件以下 | 2件以上の数値データを含む範囲を指定する |
| 配列が空(すべて文字列や空白) | セル範囲の中身を確認する |
COVARIANCE.S関数は「÷(n-1)」で計算するため、数値データが1件だけだとn-1=0で割り算できません。COVARIANCE.P関数はデータ1件でも0を返しますが、COVARIANCE.S関数は #DIV/0! エラーになります。最低2件の数値データが必要です。
#VALUE!エラー
引数に文字列を直接入力すると発生します。
=COVARIANCE.S("100", "200") → #VALUE!エラー
=COVARIANCE.S(A1:A5, B1:B5) → 正常に計算される
セル範囲内に文字列がある場合は自動で無視されます。引数として直接文字列を渡した場合にのみ発生するエラーです。
TIP
期待した結果にならないときは、セル範囲に空白や文字列が混ざっていないか確認してください。COVARIANCE.S関数は対応するペアが両方とも数値のデータだけを使います。
COVARIANCE.P・COVAR関数との違い・使い分け
COVARIANCE.P関数との違い
COVARIANCE.P関数との最大の違いは「標本用か母集団用か」です。
| 項目 | COVARIANCE.S関数 | COVARIANCE.P関数 |
|---|---|---|
| 計算方法 | 標本共分散(÷(n-1)) | 母共分散(÷n) |
| 用途 | データがサンプルのとき | データが全数あるとき |
| データ1件の場合 | #DIV/0!エラー | 0を返す |
| 結果の大きさ | COVARIANCE.Pより大きい | COVARIANCE.Sより小さい |
計算式の違いは割る数だけです。COVARIANCE.Sは「÷(n-1)」、COVARIANCE.Pは「÷n」で計算します。データ数が大きくなるほど両者の差は小さくなります。
COVAR関数との違い
COVAR関数はCOVARIANCE.P関数と計算結果が同じ母共分散を返す旧関数です。COVARIANCE.S関数とは結果が異なります。
=COVAR(C2:C7, B2:B7) → 母共分散(÷n)
=COVARIANCE.P(C2:C7, B2:B7) → 母共分散(÷n)← COVARと同じ
=COVARIANCE.S(C2:C7, B2:B7) → 標本共分散(÷(n-1))← 値が大きい
| 項目 | COVAR関数 | COVARIANCE.P関数 | COVARIANCE.S関数 |
|---|---|---|---|
| 計算結果 | 母共分散 | 母共分散 | 標本共分散 |
| 位置づけ | 旧互換性関数 | 後継関数(母集団用) | 後継関数(標本用) |
| 割る数 | n | n | n-1 |
どちらを使うかの判断基準
迷ったときは、次のように考えてください。
| 状況 | 使う関数 | 理由 |
|---|---|---|
| 全社員のアンケートデータ | COVARIANCE.P | 対象全員のデータ=母集団 |
| 顧客1,000人中100人のサンプル調査 | COVARIANCE.S | 一部を抜き出したデータ=標本 |
| ある店舗の全月次データ(12か月分) | COVARIANCE.P | 対象期間の全データ=母集団 |
| 全国チェーン中5店舗だけのデータ | COVARIANCE.S | 全体の一部=標本 |
TIP
実務では「このデータは全体なのか、一部なのか」が判断のポイントです。手元のデータが分析対象の全てならCOVARIANCE.P、一部を抜き出したものならCOVARIANCE.Sと覚えておけば迷いません。
よくある質問
COVARIANCE.SとCOVARIANCE.Pはどちらを使うべきですか?
手元のデータが分析対象の全件ならCOVARIANCE.P(母集団用)を使います。一部を抜き出したサンプルならCOVARIANCE.S(標本用)です。実務では対象全体のデータを持てないことが多いので、COVARIANCE.Sが一般的です。全社員のデータがあるなら.P、一部サンプルなら.Sと覚えておくと判断しやすいですよ。
共分散の値が大きいほど2変数の関連が強いということですか?
いいえ、共分散の値の大小で関連の強さは判断できません。符号(正・負・ゼロ付近)で関連の方向はわかりますが、強さを比較するには-1〜1の範囲に正規化された相関係数(CORREL関数)を使ってください。異なるデータセット間で共分散の絶対値を比べても意味がありません。
COVARIANCE.S関数で#DIV/0!エラーが出ます。なぜですか?
数値データが1件以下のときに発生します。COVARIANCE.S関数は「÷(n-1)」で計算するため、データが1件ではn-1=0となり計算できません。最低2件の数値データが必要です。なお、COVARIANCE.P関数はデータ1件でも0を返しますが、COVARIANCE.S関数は#DIV/0!エラーになります。
古いExcelのCOVAR関数とCOVARIANCE.Sは結果が同じですか?
いいえ、異なります。COVAR関数はCOVARIANCE.P(母共分散・÷n)と同じ計算です。COVARIANCE.S関数は標本共分散(÷(n-1))なのでCOVAR関数より大きい値になります。既存シートのCOVAR関数をCOVARIANCE.Sに置き換えると結果が変わるため、注意してください。
共分散の単位は何ですか?
共分散の単位は「データ_yの単位 × データ_xの単位」になります。たとえば売上(円)と広告費(円)なら「円²」、気温(度)と暖房費(千円)なら「度×千円」です。単位が混在するため、共分散の値そのものを別のデータセットと比べる意味はありません。比較したいときは無次元化された相関係数(CORREL関数)を使うのが基本です。
まとめ
スプレッドシートのCOVARIANCE.S関数は、2つのデータセットの標本共分散を返す関数です。
この記事のポイント
- 構文は
=COVARIANCE.S(データ_y, データ_x)で、2つのデータ範囲を指定するだけ - 「S」はSample(標本)の意味。データがサンプルのときに使う
- 共分散の符号(正・負・ゼロ付近)で2つのデータの関連の方向がわかる
- COVARIANCE.P関数やCOVAR関数は母共分散(÷n)。COVARIANCE.S関数は標本共分散(÷(n-1))
- データ数が少ないほどCOVARIANCE.PとCOVARIANCE.Sの差が大きくなる
- 値の大小で関連の強弱は判断できない。強さの比較にはCORREL関数を使う
次のステップ:関連する統計関数
COVARIANCE.S関数の使い方がわかったら、以下の関数もあわせて覚えてみてください。データ分析の幅が広がりますよ。
