統計学<中心極限定理の確認>

 中心極限定理は統計学において非常に重要な定理である。
母集団がどのような統計に従っていたとしても、無作為抽出するサンプルサイズが十分に大きければその標本平均は正規分布になる、というものである。

これを確認してみる。母分布は[0,1)の一様分布としよう。
標本集団を10000個用意してそれぞれの平均を求め、ヒストグラムにした。
ヒストグラムの階級は[0,1)を20分割している。
標本サイズは1~8まで変化させた。



標本サイズを大きくすると正規分布らしくなっていくことがわかる。
正規分布でフィッティングしてみる。Gnuplotで簡単にフィッティングできる。

f(x) = A/sqrt(2.0*3.14159265*s**2)*exp(-(x-mu)**2/2.0/s/s)
fit f(x) "hist8.txt" via A,s,mu

などと入力するだけ。

きれいにフィッティングできた。
これは分散約0.01の正規分布になっている。
中心極限定理によれば標本平均の分散は母分散/標本サイズとなる。
[0,1)の一様分布の分散は1/12、標本サイズ8より1/(8*12)~0.01となるため妥当な結果といえる。

計算に使用したソースは続きから。
続きを読む >>
ジャジャガッチ | 数学 | 23:46 | comments(0) | trackbacks(0) |

計算機で統計学の勉強

 最近統計学を勉強している。

勉強したことに確認を計算機を用いて行いたい。

その準備としてGSLで乱数、ヒストグラムを使ったサンプルをつくった。
一様乱数を生成してそれをヒストグラムに格納、ファイル出力している。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gsl¥gsl_rng.h>
#include <gsl¥gsl_histogram.h>
#include <gsl¥gsl_histogram2d.h>
#define N 10//階級数

int main()
{
    //乱数の準備
    const gsl_rng_type * T = gsl_rng_default;
    gsl_rng *r = gsl_rng_alloc(T);

    //ヒストグラムの準備
    gsl_histogram *h = gsl_histogram_alloc(N);
    gsl_histogram_set_ranges_uniform(h,0.0,1.0);//階級は[0,1.0)をN等分

    double x;
    for(int i=0;i<10000;i++)
    {
        x = gsl_rng_uniform(r);//[0,1)
        gsl_histogram_increment(h,x);
    }

    FILE *fp = fopen("hist.txt","w");
    for(int i=0;i<N;i++)
    {
        fprintf(fp,"%d %f¥n",i,h->bin[i]);
    }
    fclose(fp);

    gsl_rng_free(r);
    gsl_histogram_free(h);

    return 0;
}
ジャジャガッチ | 数学 | 23:26 | comments(0) | trackbacks(0) |

PGM形式の画像ファイル読み書き

 今日から画像処理を勉強する。
その準備としてPGM形式ファイルの読み書きをするサンプルプログラムを書いた。
PGM形式はすごく単純な形式で扱いやすい。

想定している形式はP5(グレースケールバイナリ)。
ImageJで作成したPGMを読み込むために作ったので一般的なPGMに対しては不備があるかもしれない。ちょっとした修正で対応できるはずだけど。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *fp = fopen("test2.pgm","rb");//読み込むファイル

    char type[256];
    fread(type,sizeof(char),3,fp);
    type[3] = '¥0';
    if(strcmp("P5¥n",type)!=0)
    {
        printf("P5形式ではありません¥n");
        return -1;
    }
   
    //コメント行への対処
    int pos = ftell(fp);//現在の読み込み位置を記憶
    while(fgetc(fp)=='#')
    {
        while(fgetc(fp)!='¥n');
        pos = ftell(fp);
    }
    fseek(fp,pos,SEEK_SET);

    //画像の幅、高さ、色深度取得
    int width,height,depth;
    fscanf(fp,"%d %d %d¥n",&width,&height,&depth);

    if(depth!=255)
    {
        printf("8bitではありません");
        return -1;
    }

    unsigned char **buffer;
    buffer = (unsigned char**)malloc(sizeof(char*)*width);
    for(int i=0;i<width;i++) buffer[i] = (unsigned char*)malloc(sizeof(char)*height);

    //画素値を読み込んでいく
    for(int i=0;i<width;i++)
        for(int j=0;j<height;j++)
        {
            buffer[i][j] = fgetc(fp);
        }

    fclose(fp);

    fp = fopen("aaa.pgm","wb");//書き込み用ファイルを開く
    fprintf(fp,"P5¥n%d %d¥n%d¥n",width,height,depth);

    for(int i=0;i<width;i++)
        for(int j=0;j<height;j++)
        {
            fputc(buffer[i][j],fp);
        }

    fclose(fp);

    for(int i=0;i<width;i++) free(buffer[i]);
    free(buffer);
   
    return 0;
}

ジャジャガッチ | C/C++ | 18:15 | comments(0) | trackbacks(0) |

最近読んだ本

 これまでSF小説はほとんど読まなかったのだが、手を出してみた。

ここ1ヶ月で4冊ほど読んだ。面白かった順に

1.「星を継ぐもの」(ジェイムズ・P・ホーガン)
2.「幼年期の終わり」(アーサー・C・クラーク)
3.「ソラリスの陽のもとに」(スタニスワフ・レム)
4.「たったひとつの冴えたやりかた」(J・ティプトリー・ジュニア)

4.「たったひとつの冴えたやりかた」は感動作としてよく挙げられているが、性に合わなくて途中で読むのをやめてしまった(三話中一話のみ読んで断念)。

1.「星を継ぐもの」、2.「幼年期の終わり」は読んでいてワクワクが止まらないという感じ。
大変おすすめ。

3.「ソラリスの陽のもとに」も結構面白い。ただ謎のままに終わっている部分が多くてちょっともやもやする。それは主題ではないのだろうけれど。

さて、次は何を読もうか。


ジャジャガッチ | その他 | 16:51 | comments(0) | trackbacks(0) |
1/1PAGES | |

06
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--
>>
<<
--
PR
RECOMMEND
RECENT COMMENT
MOBILE
qrcode
OTHERS
Since 2013/09/17
LATEST ENTRY
CATEGORY
ARCHIVE
LINKS
PROFILE
SEARCH