標準偏差を計算してみる
標準偏差を計算するプログラムだよ。
標準偏差とは?
標準偏差というのは、値の散らばり具合をあらわす数値なんだ。詳しくはWikipediaを見てほしいんだ。
標準偏差 - Wikipedia
基本的な公式は以下のとおりだよ。
<math>\bar{x} = \frac{1}{N} \sum_{i=1}^{N}x_i</math>
とした場合
<math>\sigma = \sqrt{\frac{1}{N} \sum_{i=1}^{N}(x_i - \bar{x})^2 }</math>
数学に慣れてないと、非常にわかり辛い…(^_^;)
要は…
- データ全体の平均を出す。
- それぞれの値と平均の差を出す。
- 差を2乗して合計する。
- データの数で「差の2乗の合計」を割る。
- その、平方根を出す。
ってことなんだ。
ソース
ということで、C♯のソースだよ。WPFのモデルのソースをそのまま貼り付けているから、必要に応じて修正してね。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace StandardDeviationSample
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
//リストに分析データを突っ込む
List<Double> l_ImputData = new List<Double>();
l_ImputData.Add(80.323);
l_ImputData.Add(80.279);
l_ImputData.Add(80.321);
l_ImputData.Add(80.221);
l_ImputData.Add(80.158);
l_ImputData.Add(80.073);
l_ImputData.Add(80.054);
l_ImputData.Add(80.08);
l_ImputData.Add(79.837);
l_ImputData.Add(79.811);
//標準偏差を計算
Double l_StandardDeviation = this.CalcStandardDeviation(l_ImputData.ToArray());
//結果を表示
MessageBox.Show("標準偏差は「" + l_StandardDeviation.ToString() + "」です。", "標準偏差");
}
/// <summary>
/// 標準偏差計算
/// </summary>
/// <param name="p_Values">データ</param>
/// <returns>標準偏差</returns>
private Double CalcStandardDeviation(Double[] p_Values)
{
//平均を取得
Double l_Average = p_Values.Average();
//「σの二乗×データ数」まで計算
Double l_StandardDeviation = 0;
foreach(Double f_Value in p_Values)
{
//乗数が固定ならMath.Powを使わないほうが高速!
l_StandardDeviation += (f_Value - l_Average) * (f_Value - l_Average);
}
//σを算出して返却
return Math.Sqrt(l_StandardDeviation / p_Values.Length);
}
}
}