医療従事者・研究者用ノート

プログラミングの基礎知識 -MATLABによるデータ解析-

本日はプログラミングの基礎知識をMATLABという数値解析ソフトウェアに着目して例を用いながら説明していきたいと思います。

Tech Boost

MATLABは、プログラミング言語を用いるソフトウェアであり、数値線形代数、関数とデータの可視化、アルゴリズム開発などさまざまな機能を有しています。

正直、このソフトがなければ研究で解析を行うときにいくら時間があっても足りないと感じるくらいです。

また、実験で得られるデータは莫大な量であり、それをエクセルなどで処理していては、時間がなくなることはもちろんですが、解析ミスによって結果が異なる可能性があり、本人は気づいていなくてもデータを改ざんしている可能性が十分に起こり得ます。

そうならないためにもこれらの解析ソフトを用いることで改ざんなどのリスクをかなり低くできると感じています。

では、以下にサンプルを用いながら説明していきます(このデータは私が適当に作ったサンプルなので結果に意味はありません。)

サンプルは被験者21名に対して、9日間ある課題を行った時の反応時間を示したデータを用います。また、課題は1日1試行50回(図1)。

図1

では、このデータを用いて全ての被験者のデータを合わせて1日ごとの反応時間の平均と標準偏差を算出して、そのグラフを作成していきたいと思います。

これをエクセルでしようと思うと21人のデータをコツコツと合わせていかないといけないです。

単純計算で1日に1人50個のデータがあるので21人で1050個、それが9日間あるので9450個のデータ数になります。

まだこの数ならエクセルでできないことはないと思いますが、かなりの時間がかかります。もし、これ以上のデータ数になればさらに時間がかかり、データ数が増えるほどミスが起こる可能性が高くなります。

もし、MATLABを使用した場合、結論からいうと下記のコードを実行するだけで21名分の9日間のデータ9450個を一瞬で図2のグラフを作成することができます。

例えば、被験者の数が100人、日数が30日などに増えてもコード内の数値を変更するだけです。

図2は、21名分を9日間の平均値及び標準偏差を算出した図になります(横軸:day、縦軸:msec)。

(私が適当に作成したサンプルですので結果に意味はありません)

clear all

for i = 1:21
filename ="sample.xlsx";
data{i} = xlsread(filename,i);
end

data2 = vertcat(cell2mat(data(1,1)),cell2mat(data(1,2)),...cell2mat(data(1,21)));

for ii = 1 : 9
    data3 = mean(data2(:,ii));
    SD = std(data2(:,ii));
    result(1,ii) = data3;
    result_SD(1,ii) = SD;
end

figure()
plot(result,'-o');
hold on
xlim([0.5 9.5]);
for iii = 1 : 9
errorbar(iii,result(1,iii),result_SD(1,iii),'-k');
end
title('Reaction time');
図2

ここから各コードについて何が書いてあるのかを説明していきます。

下記のコードでエクセルのデータ(21名分)を読み込みます。

for i = 1:21
filename ="sample.xlsx";
data{i} = xlsread(filename,i);
end

次に下記のコードで21名分のデータを統合します。

data2 = vertcat(cell2mat(data(1,1)),cell2mat(data(1,2)),…cell2mat(data(1,21)));

次に下記のコードで統合した21名分のデータを9日分の平均値と標準偏差を算出します。

for ii = 1 : 9
    data3 = mean(data2(:,ii));
    SD = std(data2(:,ii));
    result(1,ii) = data3;
    result_SD(1,ii) = SD;
end

最後に下記のコードで図2のグラフを作成します。

figure()
plot(result,'-o');
hold on
xlim([0.5 9.5]);
for iii = 1 : 9
errorbar(iii,result(1,iii),result_SD(1,iii),'-k');
end
title('Reaction time');

このコードの基礎知識ポイントはfor文を用いていることです。

このfor文は最初に定めた数だけ、for文の中のコードを繰り返すことを行います。

もし、for文を用いない場合は、この例でいうと21個(被験者の数)のコードや9個(日数の数)のコードを全て書く必要があり、時間かかってしまいます。

プログラミングではfor文や本日は用いませんでしたが、if文は基本ですので、プログラミングをこれから始められる人はまずはこれらの構造を勉強したら良いかと思います。

ただ、私も大学院のときにMATLABや以前に紹介したProcessingを勉強し始めた頃はfor文やif文について全くわからず、何を勉強して、どういうコードを書いたらいいのかもわかりませんでした。

現在もまだまだわからないことが多く、スマートなコードは書けていませんが、私がしたことは、まずは簡単な解析、簡単なコードを何回も作成することを行いました。

今回の例でいえば、まずはエクセルデータを読み込むコードを書く。

次に1名の1日分のデータの平均値を算出するコードを書く(ここまではfor文を使わなくても書けます。

そして、1名の9日分のデータの平均値を算出する。

ここからはfor文を使った方が楽になり、コードがスマートになります。しかし、最初はfor文を使わずに書いてみるのも1つの方法だと思います。

おそらく、ここでfor文を使わないと9個(9日分)の同じコードを書かないといけなくなってくるので面倒だと感じてきます。

面倒だと感じたところでfor文を調べて使用したらいいと思います。for文を使わずにここまでのコードが書けるようになっていれば、コードを書くことが少し慣れてきていると思います。少し慣れてきた頃にfor文やif文を勉強することでこれらの文の構造もかなり理解できると思います。

for文やif文を理解できれば、後は自分の行いたい解析のコードを調べて書いていくだけです。

また、今回は説明しませんでしたが、t検定やANOVAはもちろんですが、多重比較などさまざまな統計処理も行うことができます。

本日は、MATLABの魅力を紹介しました。

これらのソフトを用いることにより、時間短縮になるだけでなく、ミスを防ぐことに繋がるのでかなり便利なソフトウェアです。

プログラミングを学びたい方は今であれば無料説明会もあるので参加してモチベーションを高めるもの1つです。

関連書籍

はじめてのMATLAB新品価格
¥2,673から
(2020/10/18 23:44時点)
MATLABではじめるプログラミング教室新品価格
¥2,860から
(2020/10/18 23:44時点)

投稿者

tsujimoto.kengo8762@gmail.com

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です