統計

ワークシート内で選択したデータ(列や行、ワークシート全体)の統計処理を行いたい場合があります。 データで操作する:数値データ:データ範囲の章には、列/行のインデックスでデータ範囲を構築する方法があり、元のデータをベクターデータにします。

列と行の記述統計量

ocmath_basic_summary_stats関数は、元データの合計数、平均値、標準偏差、歪度などの基本統計量を計算します。 詳細は、Origin Cヘルプを参照してください。次のOrigin Cコードは、vDataというベクターオブジェクトのデータのポイント数、平均、平均の標準誤差を計算し、出力します。

int N;
double Mean, SE;
ocmath_basic_summary_stats(vData.GetSize(), vData, &N, &Mean, NULL, &SE);
printf("N=%d\nMean=%g\nSE=%g\n", N, Mean, SE);

度数カウント

ocmath_frequency_count関数は、FreqCountOptions 構造体に従って度数カウントを計算するのに使用します。

// 度数カウントを行うソースデータ
vector vData = {0.11, 0.39, 0.43, 0.54, 0.68, 0.71, 0.86};

// ビンサイズ、設定の開始と終了などのオプションをセット
int nBinSize = 5;	
FreqCountOptions fcoOptions;    
fcoOptions.FromMin = 0;
fcoOptions.ToMax = 1;
fcoOptions.StepSize = nBinSize;
fcoOptions.IncludeLTMin = 0;
fcoOptions.IncludeGEMax = 0;

vector vBinCenters(nBinSize);
vector vAbsoluteCounts(nBinSize);
vector vCumulativeCounts(nBinSize);
int nOption = FC_NUMINTERVALS; // 最後のビンを拡張

int nRet = ocmath_frequency_count(
    vData, vData.GetSize(), &fcoOptions,
    vBinCenters, nBinSize, vAbsoluteCounts, nBinSize,
    vCumulativeCounts, nBinSize, nOption);

if( STATS_NO_ERROR == nRet )
    out_str("Done");

さらに、離散/カテゴリーデータに対して度数カウントを計算する2つの関数があります。 1つはテキストデータに対する ocu_discrete_frequencies で、もう1つは数値データに対する ocmath_discrete_frequencies です。また、2次元データに対して度数カウントを計算する2つの関数があります。ocmath_2d_binning_statsocmath_2d_binningです。

相関係数

ocmath_corr_coeff関数は、Pearson rank, Spearman rank, Kendall rankの相関係数を計算するのに使われます。

matrix mData = {{10,12,13,11}, {13,10,11,12}, {9,12,10,11}}; 
int nRows = mData.GetNumRows();
int nCols = mData.GetNumCols();

matrix mPeaCorr(nCols, nCols);
matrix mPeaSig(nCols, nCols);

matrix mSpeCorr(nCols, nCols);
matrix mSpeSig(nCols, nCols);

matrix mKenCorr(nCols, nCols);
matrix mKenSig(nCols, nCols);

if(STATS_NO_ERROR == ocmath_corr_coeff(nRows, nCols, mData, mPeaCorr, mPeaSig, 
	mSpeCorr, mSpeSig, mKenCorr, mKenSig))
{ 
	out_str("Done");
}

正規性の検定

*ocmath_shapiro_wilk_test関数を使って、Shapiro-Wilkの正規性の検定を実行します。 *ocmath_lilliefors_test関数を使って、Lillieforsの正規性の検定を実行します。 *ocmath_kolmogorov_smirnov_test 関数を使って、Kolmogorov-Smirnovの正規性の検定を実行します。

vector vTestData = {0.11, 0.39, 0.43, 0.54, 0.68, 0.71, 0.86};

NormTestResults SWRes;
if( STATS_NO_ERROR == ocmath_shapiro_wilk_test(vTestData.GetSize(), vTestData, 
		&SWRes, 1) )
{
	printf("DOF=%d, TestStat=%g, Prob=%g\n", SWRes.DOF, SWRes.TestStat, SWRes.Prob);
}