メインメニューを開く

差分

標準偏差を計算してみる

3,483 バイト追加, 2019年7月22日 (月) 13:28
ページの作成:「標準偏差を計算するプログラムだよ。 == 標準偏差とは? == 標準偏差というのは、値の散らばり具合をあらわす数値なんだ。…」
標準偏差を計算するプログラムだよ。

== 標準偏差とは? ==
標準偏差というのは、値の散らばり具合をあらわす数値なんだ。詳しくはWikipediaを見てほしいんだ。<br/>
[http://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96%E5%81%8F%E5%B7%AE 標準偏差 - 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>


数学に慣れてないと、非常にわかり辛い…(^_^;)

要は…
<ol>
<li>データ全体の平均を出す。</li>
<li>それぞれの値と平均の差を出す。</li>
<li>差を2乗して合計する。</li>
<li>データの数で「差の2乗の合計」を割る。</li>
<li>その、平方根を出す。</li>
</ol>

ってことなんだ。

== ソース ==
ということで、C♯のソースだよ。WPFのモデルのソースをそのまま貼り付けているから、必要に応じて修正してね。

<source lang="csharp">
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);
}
}
}
</source>

== 関連項目 ==
*[[Linqのメソッドを追加してみる]]

[[Category:C♯]]
[[Category:数学]]