Zスコア計算機
はじめに
zスコア(または標準スコア)は、値が一群の値の平均に対してどのように関連しているかを示す統計的な測定値です。これは、要素が平均から何標準偏差離れているかを示します。zスコアは、異なるデータセットの標準化や外れ値の特定を可能にするため、統計学において重要なツールです。
公式
zスコアは、以下の公式を使用して計算されます:
ここで:
- = zスコア
- = 個々のデータポイント
- = データセットの平均
- = データセットの標準偏差
この公式は、データポイントが平均から何標準偏差離れているかを計算します。
計算
データポイントのzスコアを計算するには:
-
平均 () を計算する:
すべてのデータポイントを合計し、データポイントの数で割ります。
-
標準偏差 () を計算する:
-
分散 ():
-
標準偏差:
-
-
zスコアを計算する:
zスコアの公式に値を代入します。
エッジケース
-
ゼロの標準偏差 ():
すべてのデータポイントが同じ場合、標準偏差はゼロになり、zスコアは未定義になります。ゼロで割ることはできないため、この場合、zスコアの概念は適用されません。
-
データポイントが平均に等しい ():
データポイントが平均と等しい場合、zスコアはゼロになり、ちょうど平均であることを示します。
-
非数値入力:
すべての入力が数値であることを確認してください。非数値入力は計算エラーを引き起こします。
累積確率
zスコアに関連する累積確率は、標準正規分布からのランダム変数が指定された値以下である確率を表します。これは、指定されたzスコアの左側の正規分布曲線の下の面積です。
数学的には、累積確率 は標準正規分布の累積分布関数(CDF)を使用して計算されます:
ここで:
- = zにおける標準正規分布のCDF
累積確率は、特定の範囲内で値が発生する可能性を決定するために統計学で重要です。品質管理、金融、社会科学などの分野で広く使用されています。
SVGダイアグラム
以下は、標準正規分布曲線とzスコアを示すSVGダイアグラムです:
図:zスコアが塗りつぶされた標準正規分布曲線
このダイアグラムは、中央に平均 がある正規分布曲線を示しています。塗りつぶされた領域は、データポイント までの累積確率を示し、zスコアに対応しています。
使用例
アプリケーション
-
異なるスケール間の標準化:
zスコアは、データセットを標準化することにより、異なるスケールのデータを比較することを可能にします。
-
外れ値の検出:
平均から大きく離れたデータポイントを特定します(例:zスコアが-3未満または3を超える)。
-
統計的検定:
仮説検定、特にz検定で使用され、サンプル平均が既知の母集団平均と有意に異なるかどうかを判断します。
-
品質管理:
製造業において、zスコアはプロセスを監視し、出力が許容限界内に収まることを保証します。
-
金融と投資:
平均市場パフォーマンスに対するリターンを比較することで、株式パフォーマンスを評価します。
代替案
-
tスコア:
zスコアに似ていますが、サンプルサイズが小さく、母集団の標準偏差が不明な場合に使用されます。
-
パーセンタイルランク:
その頻度分布において、等しいかそれ以下のスコアの割合を示します。
-
標準偏差単位:
zスコアとして標準化せずに、生の標準偏差値を使用します。
歴史
zスコアの概念は、19世紀初頭にカール・フリードリッヒ・ガウスによって正規分布に関する研究から生まれました。zスコアの基礎となる標準正規分布は、アブラハム・ド・モワーブルやピエール=シモン・ラプラスなどの統計学者によってさらに発展しました。zスコアの使用は、20世紀の統計手法の進展とともに広まり、特に心理テストや品質管理において重要な役割を果たしました。
例
Excel
## Excelでzスコアを計算する
## データポイントはセルA2、平均はセルB2、標準偏差はセルC2にあると仮定
=(A2 - B2) / C2
R
## Rでzスコアを計算する
calculate_z_score <- function(x, mean, sd) {
if (sd == 0) {
stop("標準偏差はゼロにできません。")
}
z <- (x - mean) / sd
return(z)
}
## 使用例:
x <- 85
mu <- 75
sigma <- 5
z_score <- calculate_z_score(x, mu, sigma)
print(paste("Zスコア:", z_score))
MATLAB
% MATLABでzスコアを計算する
function z = calculate_z_score(x, mu, sigma)
if sigma == 0
error('標準偏差はゼロにできません。');
end
z = (x - mu) / sigma;
end
% 使用例:
x = 90;
mu = 80;
sigma = 8;
z = calculate_z_score(x, mu, sigma);
fprintf('Zスコア: %.2f\n', z);
JavaScript
// JavaScriptでzスコアを計算する
function calculateZScore(x, mu, sigma) {
if (sigma === 0) {
throw new Error('標準偏差はゼロにできません。');
}
return (x - mu) / sigma;
}
// 使用例:
const x = 100;
const mu = 85;
const sigma = 7;
try {
const z = calculateZScore(x, mu, sigma);
console.log(`Zスコア: ${z.toFixed(2)}`);
} catch (error) {
console.error(error.message);
}
Python
## Pythonでzスコアを計算する
def calculate_z_score(x, mu, sigma):
if sigma == 0:
raise ValueError("標準偏差はゼロにできません。")
return (x - mu) / sigma
## 使用例:
x = 95
mu = 88
sigma = 4
try:
z = calculate_z_score(x, mu, sigma)
print("Zスコア:", round(z, 2))
except ValueError as e:
print(e)
Java
// Javaでzスコアを計算する
public class ZScoreCalculator {
public static double calculateZScore(double x, double mu, double sigma) {
if (sigma == 0) {
throw new IllegalArgumentException("標準偏差はゼロにできません。");
}
return (x - mu) / sigma;
}
public static void main(String[] args) {
double x = 110;
double mu = 100;
double sigma = 5;
try {
double z = calculateZScore(x, mu, sigma);
System.out.printf("Zスコア: %.2f%n", z);
} catch (IllegalArgumentException e) {
System.err.println(e.getMessage());
}
}
}
C/C++
// C++でzスコアを計算する
#include <iostream>
#include <stdexcept>
double calculate_z_score(double x, double mu, double sigma) {
if (sigma == 0) {
throw std::invalid_argument("標準偏差はゼロにできません。");
}
return (x - mu) / sigma;
}
int main() {
double x = 130;
double mu = 120;
double sigma = 10;
try {
double z = calculate_z_score(x, mu, sigma);
std::cout << "Zスコア: " << z << std::endl;
} catch (const std::exception &e) {
std::cerr << e.what() << std::endl;
}
return 0;
}
Ruby
## Rubyでzスコアを計算する
def calculate_z_score(x, mu, sigma)
raise ArgumentError, "標準偏差はゼロにできません。" if sigma == 0
(x - mu) / sigma
end
## 使用例:
x = 105
mu = 100
sigma = 5
begin
z = calculate_z_score(x, mu, sigma)
puts "Zスコア: #{z.round(2)}"
rescue ArgumentError => e
puts e.message
end
PHP
<?php
// PHPでzスコアを計算する
function calculate_z_score($x, $mu, $sigma) {
if ($sigma == 0) {
throw new Exception("標準偏差はゼロにできません。");
}
return ($x - $mu) / $sigma;
}
// 使用例:
$x = 115;
$mu = 110;
$sigma = 5;
try {
$z = calculate_z_score($x, $mu, $sigma);
echo "Zスコア: " . round($z, 2);
} catch (Exception $e) {
echo $e->getMessage();
}
?>
Rust
// Rustでzスコアを計算する
fn calculate_z_score(x: f64, mu: f64, sigma: f64) -> Result<f64, String> {
if sigma == 0.0 {
return Err("標準偏差はゼロにできません。".to_string());
}
Ok((x - mu) / sigma)
}
fn main() {
let x = 125.0;
let mu = 115.0;
let sigma = 5.0;
match calculate_z_score(x, mu, sigma) {
Ok(z) => println!("Zスコア: {:.2}", z),
Err(e) => println!("{}", e),
}
}
C#
// C#でzスコアを計算する
using System;
public class ZScoreCalculator
{
public static double CalculateZScore(double x, double mu, double sigma)
{
if (sigma == 0)
throw new ArgumentException("標準偏差はゼロにできません。");
return (x - mu) / sigma;
}
public static void Main()
{
double x = 135;
double mu = 125;
double sigma = 5;
try
{
double z = CalculateZScore(x, mu, sigma);
Console.WriteLine($"Zスコア: {z:F2}");
}
catch (ArgumentException e)
{
Console.WriteLine(e.Message);
}
}
}
Go
// Goでzスコアを計算する
package main
import (
"errors"
"fmt"
)
func calculateZScore(x, mu, sigma float64) (float64, error) {
if sigma == 0 {
return 0, errors.New("標準偏差はゼロにできません")
}
return (x - mu) / sigma, nil
}
func main() {
x := 140.0
mu := 130.0
sigma := 5.0
z, err := calculateZScore(x, mu, sigma)
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("Zスコア: %.2f\n", z)
}
}
Swift
// Swiftでzスコアを計算する
func calculateZScore(x: Double, mu: Double, sigma: Double) throws -> Double {
if sigma == 0 {
throw NSError(domain: "標準偏差はゼロにできません。", code: 1, userInfo: nil)
}
return (x - mu) / sigma
}
// 使用例:
let x = 120.0
let mu = 110.0
let sigma = 5.0
do {
let z = try calculateZScore(x: x, mu: mu, sigma: sigma)
print("Zスコア: \(String(format: "%.2f", z))")
} catch let error as NSError {
print(error.domain)
}
参考文献
-
標準スコア - Wikipedia
-
Zスコアの理解 - Statistics Solutions
-
正規分布とZスコア - Khan Academy