雲雀は高く空を舞い このページをアンテナに追加 RSSフィード

「ひよこは高く空を舞い」について

2007-02-15

allegro20070215

[]Matlabでcolormapをいじるには。 Matlabでcolormapをいじるには。 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - Matlabでcolormapをいじるには。 - 雲雀は高く空を舞い Matlabでcolormapをいじるには。 - 雲雀は高く空を舞い のブックマークコメント

January 10th, 2007 の記事。気になったことをメモ。

rgbplot()
カラーマップのプロット

RGBPLOT(MAP) は、カラーマップをプロットします。MAP は、m行3列の行列で、COLORMAP に対する入力です。カラーマップ行列の3列は、赤、緑、青のラインでプロットされます。

brighten
カラーマップを明るく、または暗くします

BRIGHTEN(BETA) は、カレントのカラーマップを、基本的に同じ色を含む明るいカラーマップ、または暗いカラーマップで置き換えます。0 < BETA < = 1の場合はマップは明るくなり、-1 < = BETA < 0 の場合は暗くなります

BRIGHTEN(BETA) のつぎに BRIGHTEN(-BETA) を実行すると、オリジナルのマップをリストアします。

MAP = BRIGHTEN(BETA) は、表示を変えずに、現在使用されているカラーマップの明るいバージョンまたは暗いバージョンを出力します。

colormapをいじるにあたっては、colormapeditorが用意されている。

matlab 4以前ではデフォルトのcolormapはhsvだったが、それ以降はjetになっている。

また、Matlabでの色やカラーマップに関する情報はこちらにも詳しい。


commentsより

ひとつのfigureでの複数のカラーマップは将来のリリースで対応される予定。とりあえずFileExchangeにある(らしい)

大事。読もう。

下の図は上からcolormap(jet), colormap(jet)+brighten(-.5), colormap(jet)+brighten(.5)をそれぞれrgbplotしたもの。

jets

トラックバック - http://chick.g.hatena.ne.jp/allegro/20070215

2007-02-14

[]matlab compiler メモ matlab compiler メモ - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - matlab compiler メモ - 雲雀は高く空を舞い matlab compiler メモ - 雲雀は高く空を舞い のブックマークコメント

deploytoolというウィザードがある.結局はmcc -Fとやってるのとそう変わらないか?

mcc -Fで作成したアプリケーションを実行するとソースファイルが取り出されたりするのは、仕様なのかしら?

MATLAB Compilerチュートリアルより

mcc 事始

mcc使用のためには一番初めに

mbuild -setup

の実行が必要。

mcc -m M-function.m

アプリケーション実行のためには“M-function.exe”および“M-function.ctf"が必要。

コマンドプロンプトを非表示設定にするには

compiler初期設定ファイル「compopts.dat」を設定する。これはcorrent dirにあるものを優先して読み込む。

まず、compopts.datをコピー。

copyfile(fullfile(prefdir, 'compopts.bat'))
edit compopts.bat

編集

% Lcc C の場合
set LINKFLAGS=%LINKFLAGS% -subsystem windows

% Microsoft Visual C/C++ 
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup 

% Borland 
set LINKFLAGS=%LINKFLAGS% -aa

カレントディレクトリにcompopts.batが存在する場合、MATLAB Compilerはそれを参照してアプリケーション作成を行います。上記手順でコマンドプロンプトに文字列や計算結果を表示するアプリケーションを作成した場合、予期せぬエラーが発生する可能性がありますので、必要に応じてcompopts.batの編集・削除を行ってください。


配布ファイルについて

MATLAB Compilerで作成したスタンドアロンアプリケーションの動作に必要なファイルは以下の通り。

  • 実行ファイル(アプリ名.exe)またはライブラリ(アプリ名.dll)
  • CTFファイル(アプリ名.ctf)
  • FIGファイル(GUIを作成した場合)
  • ライブラリを呼び出すメインプログラム(ライブラリを作成した場合)
  • MCRInstaller.exe(<matlabroot>¥toolbox¥compiler¥deploy¥win32に用意されています)

上記ファイルを配布環境にコピーする。


チュートリアルMATLABを用いたアプリケーションソフト開発」より

MATLABを用いたアプリケーションソフト開発

MATLAB Compilerの制限。以下のものは変換不可能。

  • スクリプトM-file
  • オブジェクト変数
  • MATLAB Javaインターフェース
  • Workspace変数を使用するinput/eval関数
  • Simulinkコマンド

Matlab Compiler User's Manual

Documentはこちら。めんどうなのでぜんぜん読んでない。

CTF (Component Technology File)は1024-bit RSA keysを用いてAESで暗号化されている。取り出されたファイルも然り。

トラックバック - http://chick.g.hatena.ne.jp/allegro/20070214

2007-02-12

目次

  • [Matlab]matlabパフォーマンス改良の手法について
  • パフォーマンス改良の手法
    • ユーザのプログラムのパフォーマンスの解析
    • ループのベクトル化
    • 配列の前もってメモリを割り当てる
      • 倍精度でない行列の前もっての設定
      • 配列を拡大する必要がある場合に、repmat を使用
    • 高速化する他の方法
      • 高速化のために、ループをMEX-ファイルでコード化
      • ファンクションは、スクリプトより速い
      • load と save は、ファイルI/O関数より高速です。
      • 大きなバックグラウンドプロセスを避ける
  • パフォーマンスの高速化
    • MATLAB の高速化とは
    • 配列の型
    • ループに対して
    • 条件文
    • 配列サイズ
    • MATLAB が高速化できないもの
      • データタイプと配列の型
      • 関数コール
      • MATLAB 組み込み関数をオーバロードした関数:
      • ライン上に複数の演算が存在する場合
      • データタイプ、または、変数の型の変更
    • ページのファイルでのベクトル化と前もってのメモリの割り当て法
      • ループのベクトル化
      • 前もって、配列を割り当てる
      • MATLAB実行中に避けること
  • 高速化のサンプル
  • メモリの効率的な使用法
    • メモリ管理関数
    • 保護したメモリの使用
      • 変数の取り扱い
      • メモリ内でデータの圧縮
      • セル配列に対して必要なメモリ
      • 配列の構造体と構造体の配列との比較
      • 入れ子になった関数セル
  • 「MATLAB Programming(R2006b)」より
  • メモリの効率的な利用
    • 倍精度でない行列の事前設定
    • MEX-ファイル内のコーディングループ
  • 実数データの演算
    • 適当な論理演算子の使用
  • 配列に対するメモリの割り当て
    • 配列ヘッダ
    • 構造体とセル配列.
    • 関数引数
    • 大きなデータセットの取り扱い.
  • データ構造とメモリ
    • 数値配列
    • 符号付および符号なし整数
    • 浮動小数点数
    • 複素数配列
    • スパース行列
    • 大きな行列を予め割り当てる

パフォーマンス改良の手法  パフォーマンス改良の手法 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク -  パフォーマンス改良の手法 - 雲雀は高く空を舞い  パフォーマンス改良の手法 - 雲雀は高く空を舞い のブックマークコメント

ユーザのプログラムのパフォーマンスの解析

    • Profile
    • tic/toc

ループのベクトル

配列の前もってメモリを割り当てる

倍精度でない行列の前もっての設定

double でないタイプの行列をホールドすることで、メモリブロックを前もって割り当てる場合、repmat を使うよりも、よりメモリ効率が良くなり、しばしば高速になります。

下のステートメントは、zeros を使って、uint8 の100行100列の前もって設定します。まず、double のフル行列を作成し、uint8 行列に変換します。これは、不必要に時間とメモリを使います。

A = int8(zeros(100));

repmat を使って、double のものを一つだけ作成します。それで、必要になるメモリを減らします。

A = repmat(int8(0), 100, 100);
配列を拡大する必要がある場合に、repmat を使用

repmat は、拡張する配列に対して、メモリの連続するブロックを確保しようとします。

高速化する他の方法

高速化のために、ループをMEX-ファイルでコード化
ファンクションは、スクリプトより速い

スクリプトが、MATLAB で使われる場合はいつも、メモリにロードされ、一度に一つのラインが処理されます。一方、ファンクションは、擬似コードにコンパイルされ、メモリにロードされます。

load と save は、ファイルI/O関数より高速です。
大きなバックグラウンドプロセスを避ける

パフォーマンスの高速化  パフォーマンスの高速化 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク -  パフォーマンスの高速化 - 雲雀は高く空を舞い  パフォーマンスの高速化 - 雲雀は高く空を舞い のブックマークコメント

MATLAB の高速化とは

配列の型

高速化は、3次元より高い次元をもつ配列を除いて、すべてのMATLAB 配列型に適用されます。

ループに対して

for ステートメントによりコントロールされるループは、MATLAB の中で、つぎの場合に、より高速に実行されます。

  • for ループに対するインデックスが、スカラ値の範囲で設定されている。
  • for ループに中のコードが、サポートしているデータタイプや配列の型にのみ使われている。
  • forループの中のコードが、いくつかの関数をコールしている場合、これらが、組み込み関数である。

ループパフォーマンスは、ループの中のすべてのコードが、高速化に対して、必要条件を満たしている場合に、最適化されます。このような場合、MATLAB は、for や end ステートメントを含む、すべてのループの実行をスピードアップします。

条件文

if, elseif, while, switch ステートメントは、ステートメントの中で条件文がスカラ値を計算する場合に限り、高速に実行します。

配列サイズ

配列を取り扱うとき、MATLAB が実行するために必要なオーバヘッド量があります。大きい配列に対して、この量は、データを取り扱うために必要となる時間と比べると小さいものになります。しかし、小さい行列に対して、オーバヘッドは、割合が大きくなり、より意味をもつものになります。

高速化は、配列を取り扱うために必要なオーバヘッドの量を小さくすることになります。従って、より小さい配列を使ったプログラムを記述することで、スピードアップが図られます。

MATLAB が高速化できないもの

データタイプと配列の型

ある種のデータタイプ、3次元以上の配列も高速化されていません。

関数コール

他の関数(M-ファイル、または、MEX-ファイル)、または、サブ関数のコールは、高速化と言う表現では意味が少ないもので、MATLAB の中では、高速化に寄与しません。コールされた関数を作っているコードは、高速化としては改良されていますが、セルを構成するメカニズム的には、効果が少なくなるものです。

MATLAB 組み込み関数をオーバロードした関数:

オーバロードされた関数の実行は、M-ファイル、または、MEX-ファイルをコールする関数を含んでいるので、MATLAB の組み込み関数をオーバロードすることは、実行速度を落とすことになります。たとえば、タイプ char に対して、組み込み関数 eq をオーバロードする場合、等価なキャラクタとの比較は、高速化をサポートしている MATLAB の組み込みの eq を使うときに比べ遅くなります。

ライン上に複数の演算が存在する場合

ある環境の基で、ユーザのプログラムの中の一つのラインに複数の演算を含んでいる場合、速度は遅くなります。ここで示される例題の中で、最初の演算は、構造体配列を含み、高速化でサポートされていないものです。

x = a.name;   for k=1:10000, sin(A(k)), end;

MATLAB は、同時にすべてのラインを、連続的にコードを処理しているので、同じライン上に効率の良くない演算が存在すると高速化は行なわれません。これは、この例題の中で、for ループが、別々のライン上にある場合に得る高速化の恩恵を受けていないことを意味します。

データタイプ、または、変数の型の変更

ユーザのプログラムが、存在している変数のデータタイプ、または、配列の型を変更する場合、 MATLAB は、一時的に、そのコードの高速化プロセスを停止し、変更を処理します。

ページのファイルでのベクトル化と前もってのメモリの割り当て法

ループのベクトル
前もって、配列を割り当てる
MATLAB実行中に避けること

メモリの効率的な使用法  メモリの効率的な使用法 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク -  メモリの効率的な使用法 - 雲雀は高く空を舞い  メモリの効率的な使用法 - 雲雀は高く空を舞い のブックマークコメント

メモリ管理関数

  • whos, pack, clear, save, load, quit

保護したメモリの使用

変数の取り扱い

変数を作成する場合、メモリを保護するには、

  • 大きなテンポラリの変数を作成することを避け、必要なくなった場合、すぐにテンポラリ変数を削除します。
  • 固定したサイズの配列を取り扱う場合、大きくする必要が生じる度に、MATLAB でリサイズしないで、前もって割り当てておきます。
  • 空行列に等しい変数をフリーメモリに設定するか、または、<clear variable_name>を使って、クリアします。
  • できる限り、変数を再利用します。
メモリ内でデータの圧縮

MATLAB は、メモリ管理をヒープ方式で行なっているので、拡張したMATLAB セッションは、メモリを分断する原因になります。メモリが分断された場合、フリースペースの部分が多くなりますが、新しい大きな変数をストアするには、連続したフリーのスペースが十分でない場合が生じます。MATLAB から、Out of Memory メッセージが表示されると、pack 関数は、メモリ内のユーザのデータのいくつかを圧縮し、連続したフリーな空間を作成します。

セル配列に対して必要なメモリ

連続したフリーのメモリは、セル配列全体に対しては必要ありません。セル配列は、他の配列へのポインタの配列なので、個々の配列に対するメモリは、連続している必要がありますが、全体のメモリの収集には、連続している必要はありません。

配列の構造体と構造体の配列との比較

配列の構造体は、構造体の配列より、保存するためには、多くのメモリを必要としません。また、配列の構造体を使うことは、スピードの面でも利点を示します。

たとえば、つぎの配列の構造体を作成しましょう。

struct_of_array.A = magic(100);
struct_of_array.B = rand(100);

また、同じ次元をもち、配列の構造体と同じデータをもつ構造体の配列を作ります。

for m = 1:100
    for n = 1:100
        array_of_struct(m,n).A = struct_of_array.A(m,n);
        array_of_struct(m,n).B = struct_of_array.B(m,n);
    end
end

2つのメモリの使用量を比べて見ましょう。そして、構造体の配列は、同じデータを含む配列の構造体に対して、約8.5 倍のメモリを必要としています。

NameSizeBytesClass
array_of_struct100x1001360128struct array
struct_of_array1x1 160248struct array
入れ子になった関数セル

入れ子になっている関数で使われるメモリの量は、連結したライン上でこれらをコールして使う量の総量と同じです。つぎの2つの例題は、同じ量のメモリを必要とします。

result = function2(function1(input99));
result = function1(input99);
result = function2(result);


メモリの効率的な利用  メモリの効率的な利用 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク -  メモリの効率的な利用 - 雲雀は高く空を舞い  メモリの効率的な利用 - 雲雀は高く空を舞い のブックマークコメント

倍精度でない行列の事前設定

(1) A = int8(zeros(100));
(2) A = zeros(100, 'int8');

(1)のステートメントに対して(2)のほうが効率的。(1)のステートメントは、まず完全な double の行列を作成することによって int8 の 100×100 の行列を事前割り当てし、各要素を int8 配列に変換します。 これでは時間もメモリも不必要に浪費してしまいます。

MEX-ファイル内のコーディングループ

for または whileループを使う必要がある場合、MEX-ファイルでループをコード化します。この方法により、ループ内の命令を実行するたびに翻訳する必要がなくなるため、ループの実行速度は上がります。

External Interfaces ドキュメントの "Introducing MEX-Files" を参照してください。

実数データの演算  実数データの演算 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク -  実数データの演算 - 雲雀は高く空を舞い  実数データの演算 - 雲雀は高く空を舞い のブックマークコメント

実数 (すなわち、 非複素数) の演算を行う場合、 実数に対して特別に設計された MATLAB 関数の使用がより効率的です。 つぎの関数は、実数である数値を返します。

  • reallog
    • 非負実数配列に対する自然対数の検出
  • realpow
    • 実数のみの出力に対する配列のベキの検出
  • realsqrt
    • 非負実数配列に対する平方根の検出

適当な論理演算子の使用

論理演算子AND または OR を実行する場合、それぞれのタイプの 2 つの演算子を選択します。

  • &, |
    • 要素毎に論理演算子 AND および OR を配列に実行する
  • &&, ||
    • ショートサーキットを使用して、論理演算子 AND および OR をスカラ値に実行する

if と whileステートメントにおいて、ショートサーキット演算子として、論理 AND に対して&& 、 論理 OR に対して、||を使用することがより効率的です。なぜなら、これらの演算子は、多くの場合、論理式全体を評価する必要がないためです。たとえば、 MATLAB は、入力引数の数が 3 より小さい場合、この式の最初の部分のみを評価します。

if (nargin >= 3) && (ischar(varargin{3}))



配列に対するメモリの割り当て  配列に対するメモリの割り当て - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク -  配列に対するメモリの割り当て - 雲雀は高く空を舞い  配列に対するメモリの割り当て - 雲雀は高く空を舞い のブックマークコメント

配列ヘッダ

変数に配列を割り当てる場合、MATLAB も、 ヘッダと呼ばれるメモリの断片に (データタイプや次元など) 配列についての情報をストアします。たいていの配列に対して、ヘッダをストアするために必要なメモリは、 大きくはありません。 大きなデータセットを少数の大きな配列にストアすることは、多数の小さな配列にストアすることに比べ、必要な 配列ヘッダがより少ないため、利点は少なくなります。

構造体とセル配列.

構造体とセル配列に対して、MATLAB は、各配列に対するのみでなく、 構造体の各フィールド、セル配列の各セルに対してもヘッダを作成します。このため、構造体またはセル配列をストアするために必要なメモリ量は、データの保持量のみならず、作成される方法にも依存します。 

たとえば、 フィールド R, G, B を持つ、スカラ構造体配列 S1、大きさ 100×50 の各フィールドは、 構造体全体を記述するために、 1 つの配列ヘッダ、 3 つのフィールド配列のぞれぞれを記述する 1 つずつのヘッダが必要であり、データ構造全体に対して、合計 4 つの配列ヘッダを作成します。

S1.R(1:100,1:50)
S1.G(1:100,1:50)
S1.B(1:100,1:50)

他方、 各要素がスカラフィールド R, G, B である 100×50 構造体配列 S2 は、構造体全体を記述する1つの配列ヘッダと、 構造体の 5,000要素の各々に対して、フィールド毎に 1 つの配列ヘッダを必要とし、 データ構造全体に対して、15,001 の配列ヘッダを作成します。

S2(1:100,1:50).R
S2(1:100,1:50).G
S2(1:100,1:50).B

こうして、S1 と S2 は、同じ量のデータを含みますが、 S1 は、かなり少ないメモリスペースを使用します。 より少ないメモリが要求されるだけでなく、同様に、 S1 のフォーマットを使用することにより高速化されます。


関数引数

MATLAB は、関数呼び出しで渡される引数を同様に取り扱います。関数に 1 つの変数を渡す場合、実際には、変数が表すデータに対するポインタも渡しています。入力データが呼び出される関数により修正されない限り、呼び出す関数内の変数と、呼び出された関数内の変数は、メモリ内の同じ位置を指します。呼び出された関数が入力データの値を修正する場合、 MATLAB は、メモリ内の新しい位置に、オリジナルの配列のコピーを作成します。 そのコピーを修正された値を使用して更新し、呼び出された関数内の入力変数をこの新しい配列に対してポイントします。

下記の例題では、 関数 myfun は、関数に渡された配列の値を修正します。 MATLAB は、 Aによりポイントされる配列のコピーをメモリに作成し、変数 X をこの新しい配列へのポインタとして設定し、その後、 X の1行をゼロに設定します。 A により参照される配列は、変更されません。

A = magic(500);
myfun(A);

function myfun(X)
X(400,:) = 0;

大きなデータセットの取り扱い.

再度、大きなデータセットを取り扱う場合、呼び出された関数が値を修正する時に、 MATLAB が Aの一時的なコピーを作成することに注意する必要があります。 この ため、配列のストアに必要なメモリが倍になります。これは、十分なメモリを利用できない場合、 MATLAB がエラーを出力する原因となります。

この状況でメモリの不足を避ける1つの方法は、入れ子関数を使用することです。入れ子関数は、外側の関数すべてのワークスペースを共有し、入れ子関数の通常のスコープの外側のデータに入れ子関数がアクセスできるようになります。 ここで示す例題において、入れ子関数 setrowval は、外側の関数 myfunのワークスペースに直接的なアクセスができ、関数呼び出しにおいて、変数のコピーを渡すことが不要になります。 setrowval が A の値を修正する場合、呼び出し関数のワークスペース内で修正します。呼び出される関数に対して別の配列を保持するために追加のメモリを使用する必要はありません。また、 Aの修正された値を返す必要もありません。

function myfun
A = magic(500);

   function setrowval(row, value)
   A(row,:) = value;
   end

setrowval(400, 0);
disp('The new value of A(399:401,1:10) is')
A(399:401,1:10)
end

データ構造とメモリ  データ構造とメモリ - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク -  データ構造とメモリ - 雲雀は高く空を舞い  データ構造とメモリ - 雲雀は高く空を舞い のブックマークコメント

メモリ必要量は、MATLABの様々なデータ構造で異なります。MATLABのストア方法を考慮することにより、これらの構造に使用されるメモリ量を減らすことができる可能性があります。

数値配列

符号付および符号なし整数

8-bits1-byte16-bits2-bytes32-bits4-bytes64-bits8-bytes

浮動小数点数

single4-bytesdouble8-bytes

複素数配列

MATLAB は、複素数データを実部と虚部として別にストアします。複素配列変数のコピーを作成し、 その後、配列の実部または虚部のみ修正する場合、 MATLAB は、実部と虚部の両方を含む新しい配列を作成します。

スパース行列

スパース形式で大部分ゼロであるような値を持つ行列をストアすることが最良です。スパース行列は、より少ないメモリを使用し、フル行列の操作よりも高速になります。 sparse 関数を使用して、フル行列をスパース形式に変換することができます。

大きな行列を予め割り当てる

MATLAB では、カレントの変数を保存するために、MATLAB ヒープの中で利用可能なメモリが足りない場合、オペレーティングシステムのメモリを要求します。必要なメモリセグメントのサイズがMATLAB ヒープで利用可能な限り、ヒープの中でメモリを再使用します。

たとえば 1 台のマシン上で、つぎのステートメント群が約 15.4 MBの RAM を使うとします。 

a = rand(1e6,1);
b = rand(1e6,1);

つぎのステートメントは、約 16.4 MB の RAM を使います。

c = rand(2.1e6,1);

つぎのステートメント群は、約 32.4 MB の RAM を使います。 これは、MATLAB では 2 つの 1 MB の配列に占領されていた空間に 2.1MB の配列を入れることができないためです。

a = rand(1e6,1);
b = rand(1e6,1);
clear
c = rand(2.1e6,1);

メモリの過剰な割り当てを防ぐ最も簡単な方法は、最初に大きなベクトルを割り当てることです。 つぎのステートメント群は、約 16.4 MB の RAM のみを使います。

c = rand(2.1e6,1);
clear
a = rand(1e6,1);
b = rand(1e6,1);
トラックバック - http://chick.g.hatena.ne.jp/allegro/20070212

2007-02-04

[]「論文が書ける統計」 - (3) - 分布を表現する数値 「論文が書ける統計」 - (3) - 分布を表現する数値 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - 「論文が書ける統計」 - (3) - 分布を表現する数値 - 雲雀は高く空を舞い 「論文が書ける統計」 - (3) - 分布を表現する数値 - 雲雀は高く空を舞い のブックマークコメント

第2章より

代表値 / average

  1. 平均値 /mean
    1. 算術平均 / arithmetric mean
    2. 幾何平均 / geometric mean
      • 算術平均を逆対数変換した値。データの変換をした際に用いられたりする、とか。
    3. 調和平均 / harmonic mean
      • 逆数の算術平均の逆数\frac{1}{\frac{\sum_{i=1}^n\frac{1}{x_i}}{n}}
  2. 中央値 / median
  3. 最瀕値 / mode

ばらつき具合

  1. 四分位点 / quartile
    • 全体の順位の25%, 75%にあたる値
  2. 標準偏差 / Standard Deviation
    • 個々の値の平均値からのずれの平均値

歪度 / skewness

尖度 / kurtosis

これらはn次のモーメントとして一般化され、たような。そこらへんは、過去日記を参考、と書こうとしたら書いてなかった。訳たたずめ。

[]「論文が書ける統計」 - (2) - 正規性の検定手法 「論文が書ける統計」 - (2) - 正規性の検定手法 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - 「論文が書ける統計」 - (2) - 正規性の検定手法 - 雲雀は高く空を舞い 「論文が書ける統計」 - (2) - 正規性の検定手法 - 雲雀は高く空を舞い のブックマークコメント

第2章より

  • コルゴモロフ・スミルノフ検定 / Kolmogorov-Smirmnov test
  • \chi^2適合度検定 / Chi square test for goodness of fit
  • シャピロ・ウィルクス検定 / Shapiro-Wilks test

[]「論文が書ける統計」 - (1) - パラメトリック,ノンパラメトリック 「論文が書ける統計」 - (1) - パラメトリック,ノンパラメトリック - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - 「論文が書ける統計」 - (1) - パラメトリック,ノンパラメトリック - 雲雀は高く空を舞い 「論文が書ける統計」 - (1) - パラメトリック,ノンパラメトリック - 雲雀は高く空を舞い のブックマークコメント

もう悩まない!論文が書ける統計

もう悩まない!論文が書ける統計

第一章より

  • パラメトリック(parametric):「母集団特性値の/母数の」
    • 母集団についてある仮説(正規性・等分散性など)が設けられている手法
  • ノンパラメトリック(nonparametric)
    • 母集団について仮説を設けない手法/distribution free method

パラメトリックな手法は母集団に付いて色々と前提条件があるが、観測値の大小の程度まで考慮して解析できる方法で有意差も出やすい方法であるが、ノンパラメトリックな手法は前提条件は無いがパラメトリックな手法よりは有意差の出にくい方法である。

[]多群比較を二重比較の繰り返しで行なうのは不適 多群比較を二重比較の繰り返しで行なうのは不適 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - 多群比較を二重比較の繰り返しで行なうのは不適 - 雲雀は高く空を舞い 多群比較を二重比較の繰り返しで行なうのは不適 - 雲雀は高く空を舞い のブックマークコメント

  • 比較対象が3群以上存在し、帰無仮説が複数個になると、検定の多重性の問題が生じる。(第一種の過誤が発生する可能性が高まる)

なぜ3群以上を比較するときに、2群間の検定ではいけないか? 

A, B, Cの3群があり、A-C間、B-C間で、p値=0.05として2標本間でStudentのt検定を2回繰り返し行った場合、「少なくとも一つが有意差あり」となる確率は、p=1-(1-0.05)^3=0.09となってしまい、設定したp=0.05よりも高くなる。

[] 平均の差の検定におけるt検定と多重比較法の使い分け  平均の差の検定におけるt検定と多重比較法の使い分け - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク -  平均の差の検定におけるt検定と多重比較法の使い分け - 雲雀は高く空を舞い  平均の差の検定におけるt検定と多重比較法の使い分け - 雲雀は高く空を舞い のブックマークコメント

複数回の検定において「それらの検定すべて」において有意差があるという結果のみに意味がある時はt検定を使用.

複数回の検定において「少なくとも1つ以上の検定」での有意差に意味がある時は多重比較法を使用.


多重比較法とは、第1種の過誤を避ける為に検定全体としての有意 水準を公称の値にコントロールできるように 個々の検定における有意水準を調整する.そのため,多重比較法で有意差が検出されなかった検定では (例えば、CとAに有意差がなかったとすると) 「AはCよりも優れているという結果が得られなかった」だけで 「帰無仮説を保留する」 ということになる.

これは多重比較法では 有意水準を調節しているため 単回の検定よりもさらに、積極的には帰無仮説が支持されないことを示している.(ロバストでない)


第1種の過誤?と第2種の過誤? [[第1種の過誤]]と[[第2種の過誤]] - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - [[第1種の過誤]]と[[第2種の過誤]] - 雲雀は高く空を舞い [[第1種の過誤]]と[[第2種の過誤]] - 雲雀は高く空を舞い のブックマークコメント

  • 第一種の過誤?
    • type I error
    • 「有意差がない」のに、「有意差がある」とする誤り
    • 帰無仮説が正しい場合に,誤って仮説を棄却する誤り」の判断の基準となる確率
  • 第二種の過誤?
    • type II error
    • 「有意差がある」のに、「有意差がない」とする誤り
    • 帰無仮説が誤っているのに,仮説を採択してしまう誤り

||検定|表は後で書く

帰無仮説を棄却
トラックバック - http://chick.g.hatena.ne.jp/allegro/20070204

2007-02-03

[]前口上としての統計曼荼羅(三中 信宏氏) [http://cse.niaes.affrc.go.jp/minaka/R/preamble.html:title=前口上としての統計曼荼羅(三中 信宏氏)] - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - [http://cse.niaes.affrc.go.jp/minaka/R/preamble.html:title=前口上としての統計曼荼羅(三中 信宏氏)] - 雲雀は高く空を舞い [http://cse.niaes.affrc.go.jp/minaka/R/preamble.html:title=前口上としての統計曼荼羅(三中 信宏氏)] - 雲雀は高く空を舞い のブックマークコメント

三中 信宏氏による。この方は「系統樹思考の世界」の著者でもある*1

系統樹思考の世界 (講談社現代新書)

系統樹思考の世界 (講談社現代新書)

統計学を学習するにあたっての前書き。統計学を始める、あるいは舐めるにあたっては必読かと。また、「403 Forbidden」から辿れる「大統計大曼荼羅」は「統計学の世界の鳥瞰」にうってつけ。

他のページも読んでみたい。

以下、気になったところを写経。

続きを読む

[]Matlabによる仮説検定の基礎(2) - 検定手法 Matlabによる仮説検定の基礎(2) - 検定手法 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - Matlabによる仮説検定の基礎(2) - 検定手法 - 雲雀は高く空を舞い Matlabによる仮説検定の基礎(2) - 検定手法 - 雲雀は高く空を舞い のブックマークコメント

1標本

  • データから「母集団平均」を検定
    • 母分散が既知 - 「z検定(ztest)」
    • 母分散が未知 - 「(studentの) t検定(ttest)」
  • データから「母分散」を検定
    • 母平均が既知 - 「\chi^2検定」
    • 母平均が未知 - 「\chi^2検定」

2標本

「データの分布が正規分布である2群の母平均に差があるかの検定」

  • 2群に互いに対応がある - 「(studentの) t検定」
  • 2群に互いに対応がない
    • 分散が等しい事の検定を行なう - 「F検定」
    • 分散が等しい - 「(studentの) t検定」
    • 分散が等しくない - 「(welchの) t検定」

多標本

取り扱い無し

[]Matlabによる仮説検定の基礎(1) - はじめに Matlabによる仮説検定の基礎(1) - はじめに - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - Matlabによる仮説検定の基礎(1) - はじめに - 雲雀は高く空を舞い Matlabによる仮説検定の基礎(1) - はじめに - 雲雀は高く空を舞い のブックマークコメント

Matlabによる仮説検定の基礎(pdf)

1. はじめに

このテキストで取り上げるのは主に「平均値と分散に関する仮説検定」

仮説検定の位置づけ

基礎的見地で統計を分類すると、記述統計と推測統計の二つに大別できる。

  1. 記述統計

得られたデータの特徴を客観的・効果的に記述するための方法

標本から確率論的に、母集団の特製に着いて推測するための方法

推測統計は統計的推定と、統計的検定(含仮説検定)に分けられる(ある程度)。

仮説検定の適用分野

仮説検定を行なうメリットは、検定者に共通の判断基準を設ける事で、データ解釈の主観性を押さえること

*1:この本はnosemさんも読まれてたhttp://d.hatena.ne.jp/nosem/20060720#p3

トラックバック - http://chick.g.hatena.ne.jp/allegro/20070203
テクノラティプロフィール