蛍光指紋パッケージの説明資料

2015.09.01
Vipavee Trivittayasil, 粉川美踏(和訳)

はじめに

蛍光指紋(Fluorescence fingerprint)は励起蛍光マトリックス(excitation-emission matrix, EEM)とも呼ばれ、励起波長(試料に照射する光の波長)、蛍光波長(試料が発する光の波長)、蛍光強度からなる三次元データです。励起波長と蛍光波長の二軸からなるデータであるため、通常の多変量解析を行う際にいくつかの工夫が必要になります。この解析パッケージには、無料解析ソフト「R」での解析を容易にできるよう、基本的な関数が含まれています。計測装置から出力されるデータの読み込み、散乱光の削除、三次元データの二次元への展開、蛍光指紋の描画など、一通りのことができるパッケージとなっていますので、ぜひご活用ください。また、このパッケージを使って蛍光指紋に特異的な前処理を行った後、他の汎用的解析ソフトを使用することもできます。

お役にたてば幸いです。

インストールの仕方

Rソフトウェアを開いてから次のコンマードを実行してください。

install.packages("EEM")
library(EEM)

インストールした後、library(EEM)コマードでパッケージをロード(呼ぶ)必要があります。これで、EEMパッケージに含まれる関数は使えるようになります。

計測データの読み込み

readEEM は、計測装置が出力するデータをRに読み込むための関数です。現在、FP8500(日本分光)が出力するcsvファイル、およびF7000(日立ハイテク)が出力するtxtファイルに対応しています。FP8500の場合は“XYPOINT”という文字列、F7000の場合は“Data Points”という文字列を検索し、それ以降のデータを読み込む設定になっています。今後、異なる書式のデータの読み込みが必要な場合はご連絡ください。

以下に示すコマンドを入力することにより、データの読み込みが可能になります。

# フォルダ名を直接入力する(folderの位置にフォルダ名を入れて入力してください)
data <- readEEM(folder) 

# 現在のフォルダからデータを読み込む
data <- readEEM(getwd()) 

データは list 形式として読み込まれ、 EEM というクラス名が与えられます。元のファイル名を出力する際は names(EEM)、その他の情報を出力する際は summary(data)と入力してください。

このパッケージには一例として、“applejuice” というデータセットが添付されています。data(applejuice)と入力することによって、このデータを読み込むことができます。また?applejuiceと入力することにより、このデータセットの情報を得ることができます。

# データセットの読み込み
data(applejuice) 

# サマリー(summary)機能を使って、その他の情報を出力
summary(applejuice)
## Number of samples: 24
## Sample names: 
##  [1] "Aomori-Fuji-1-1"  "Aomori-Fuji-1-2"  "Aomori-Fuji-2-1" 
##  [4] "Aomori-Fuji-2-2"  "Aomori-Jona-1-1"  "Aomori-Jona-1-2" 
##  [7] "Aomori-Jona-2-1"  "Aomori-Jona-2-2"  "Aomori-Ohrin-1-1"
## [10] "Aomori-Ohrin-1-2" "Aomori-Ohrin-2-1" "Aomori-Ohrin-2-2"
## [13] "NZ-Envy-1-1"      "NZ-Envy-1-2"      "NZ-Envy-2-1"     
## [16] "NZ-Envy-2-2"      "NZ-Fuji-1-1"      "NZ-Fuji-1-2"     
## [19] "NZ-Fuji-2-1"      "NZ-Fuji-2-2"      "NZ-Jazz-1-1"     
## [22] "NZ-Jazz-1-2"      "NZ-Jazz-2-1"      "NZ-Jazz-2-2"     
## Dimension [EmxEx]: 48x26
## EX range: 200~450 [nm]
## EM range: 230~700 [nm]

蛍光指紋の描画

蛍光指紋は通常、等高線グラフで表示されます。描画のために3つの関数が用意されています。

シンプルな描画コマンド:drawEEM

drawEEM は最もシンプルな関数です。

# applejuiceデータセットの中のサンプル1の蛍光指紋を描画
drawEEM(applejuice, n = 1) 

# サンプル1の蛍光指紋を異なる色(cm)で描画
drawEEM(applejuice, n = 1, color.palette = cm.colors) 

# x軸とy軸を交換させる
drawEEM(applejuice, n = 1, flipaxis = TRUE) 

蛍光指紋の前処理

通常、蛍光分光光度計を用いて取得した蛍光指紋には蛍光以外の情報も含まれており、多変量解析等を行う前に蛍光以外の情報を取り除く必要があります。また、中心化や規格化等を行い、データをそろえる工程も行われることが多いです。いくつかの論文[1,2]では、すでにこれらの前処理方法について述べていますので、ここでは詳細は省きます。

散乱光の削除:delScattering

試料に光(励起光)を照射すると、一部の光は吸収され、残りの光は散乱されたり試料を透過します。吸収された光のうち一部が蛍光として再び試料から発せられますが、吸収・発光の工程でエネルギーを失うため、蛍光の波長は励起光よりも長くなります。この蛍光の情報のみを取り出すために、同時に計測される散乱光を除く操作を行う関数が delScattering です。厄介なことに、計測装置の特性上、散乱光は励起波長と蛍光波長が等しいときだけでなく、蛍光波長が励起波長の2倍、3倍となるときにも表れます。二次散乱、三次散乱とよばれるこれらの散乱光もこの関数を用いることによって除かれます。散乱光を除いた波長領域の蛍光強度を「0」とするか「NA」(データなし)とするかは、 rep の項目から指定できます。またこの関数は励起波長が蛍光波長より長い領域も削除します。

# applejuice のデータセットから散乱光にあたる波長領域のデータを削除し、NA で置き換える。
# さらにこのデータをapplejuice_dels として出力し、サンプル1を描画する。
applejuice_delS <- delScattering(applejuice, rep = NA) 
drawEEM(applejuice_delS, 1)

散乱光は通常、ある程度の波長範囲をもって観察されます。どの範囲の光を散乱光として除くかを手動で指摘することもできます。初期設定値は ?delScattering というコマンドを入力することによって見られます。

# applejuiceの散乱光の削除範囲を、一次光=30 nm、二次光=0 nm、三次光=0 nm、四次光=0 nmに指定。
# 削除した領域をNAで補間し、サンプル1を描画する。
applejuice_delS <- delScattering(applejuice, rep = NA, first = 30, second = 0, third = 0, forth = 0) 
drawEEM(applejuice_delS, 1)

ここでは削除された領域が見やすいように rep をNAに指定しています。しかし多変量解析の関数ではNAを入力値として受け入れないものもありますので、その際は rep を0に指定してください。

applejuice_delS <- delScattering(applejuice, rep = 0, 
                                 first = 30, second = 0, third = 0, forth = 0) 

蛍光指紋の一部分を削除する:cutEEM

蛍光指紋の波長範囲を指定し、一部のみを解析に用いる場合はcutEEM 関数を用います。削除する範囲を cutEX および cutEM で指定します(励起光はEX、蛍光はEM)。ただし、両端を残して中央部分を削除することはできません。

# applejuice_delsのうち、励起波長350-500 nm、蛍光波長500-700nmの領域を削除し、
# applejuice_dels_cut として出力。サンプル1を描画する。
applejuice_delS_cut <- cutEEM(applejuice_delS, cutEX = 350:500, cutEM = 500:700)
drawEEM(applejuice_delS_cut, 1)

蛍光指紋を二次元に展開:unfoldEEM

通常、多変量解析ではサンプル数×計測条件数 という二次元行列を扱います。蛍光指紋はそのままでは計測条件が励起光×蛍光という二次元になっているため、これを一次元に展開するのがunfold 関数です。

# applejuice_dels(サンプル数×励起波長×蛍光波長)をサンプル数×波長条件の二次元に展開し
# applejuice_dels_uf として出力
applejuice_delS_uf <- unfold(applejuice_delS) 

# 展開されたデータの次元を表示
dim(applejuice_delS_uf)
## [1]   24 1248
# 展開されたデータの1-5行目、1-5列目を表示
applejuice_delS_uf[1:5 ,1:5]
##                 EX200EM230 EX200EM240 EX200EM250 EX200EM260 EX200EM270
## Aomori-Fuji-1-1   1.584740   2.750280    2.71587    6.51603    21.1658
## Aomori-Fuji-1-2   0.480644   2.064270    4.72847    5.65419    27.9555
## Aomori-Fuji-2-1   2.430540   1.427630    3.28927    5.36893    23.0553
## Aomori-Fuji-2-2   0.461552   2.157030    3.26636    5.78505    28.7779
## Aomori-Jona-1-1  -0.170955   0.362999    2.46317    6.07851    22.4464

逆に fold 関数を用いることによって、元の三次元データに戻すことができます

正規化:normalize

多変量解析を行う前にスペクトルデータを正規化することがよくあります。正規化とは、すべてのスペクトルの下の面積が1になるように係数をかける計算のことで、サンプル表面の散乱特性、光源の強度の変動や検出器の感度の変動等を補正する役割を果たします。このパッケージでは normalize という関数を使うことによってデータの正規化が可能です。

# applejuice_dels_uf を正規化し、applejuice_dels_uf_normとして出力
applejuice_delS_uf_norm <- normalize(applejuice_delS_uf) 

# applejuice_dels_uf_normの要素の絶対値(abs)を行ごと(サンプルごと)に合算
# a <- abs(applejuice_dels_uf_norm)
# rowSums(a)
# と同等
rowSums(abs(applejuice_delS_uf_norm)) 
##  Aomori-Fuji-1-1  Aomori-Fuji-1-2  Aomori-Fuji-2-1  Aomori-Fuji-2-2 
##                1                1                1                1 
##  Aomori-Jona-1-1  Aomori-Jona-1-2  Aomori-Jona-2-1  Aomori-Jona-2-2 
##                1                1                1                1 
## Aomori-Ohrin-1-1 Aomori-Ohrin-1-2 Aomori-Ohrin-2-1 Aomori-Ohrin-2-2 
##                1                1                1                1 
##      NZ-Envy-1-1      NZ-Envy-1-2      NZ-Envy-2-1      NZ-Envy-2-2 
##                1                1                1                1 
##      NZ-Fuji-1-1      NZ-Fuji-1-2      NZ-Fuji-2-1      NZ-Fuji-2-2 
##                1                1                1                1 
##      NZ-Jazz-1-1      NZ-Jazz-1-2      NZ-Jazz-2-1      NZ-Jazz-2-2 
##                1                1                1                1

蛍光指紋の解析

主成分分析 (Principal component analysis, PCA)

主成分分析にはstats パッケージに含まれているprcompという関数を用います。入力値は展開された二次元行列です。

# applejuice_dels_uf_normを使って主成分分析を行う
# 初期設定では中心化が自動的に行われます
result <- prcomp(applejuice_delS_uf_norm) 

# 各主成分の分散(=情報量)をグラフ(screeplot)で表す
# result はprcomp コマンドで出力された結果。npcsで表示する主成分の数を指定、typeはグラフの種類
screeplot(result, npcs = 10, type = "lines", main = "Screeplot")

主成分得点(score)および主成分ローディング(loading)はそれぞれ plotScore および plotLoadingで表示できます。

# 主成分1と主成分2をそれぞれx軸、y軸にして、各サンプルの主成分得点を表示
plotScore(result, xPC = 1, yPC = 2) 

# 主成分1のローディングを表示。ncompで主成分の番号を指定。
plotLoading(result, ncomp = 1) 

ここに挙げる例では、異なる産地や品種のりんごを区別できるかどうかを主成分分析でみていきます。まず、りんごの産地や品種に関する情報を出力します。

# applejuiceデータセットの中から各サンプルの名称をsNameに出力。
# 名称は 産地-品種-サンプル番号 という構成
sName <- names(applejuice) 

# 産地をcountryに出力
# サンプルの名称を”-” で分けたときに、最初の部分が産地名
country <- sapply(strsplit(sName, split = "-"), "[", 1) 
table(country) # 国一覧とサンプル数の表
## country
## Aomori     NZ 
##     12     12
# サンプルの名称を"-" で分けたときに、2番目の部分が品種名
cultivar <- sapply(strsplit(sName, split = "-"), "[", 2) 
table(cultivar) # 品種一覧とサンプル数の表
## cultivar
##  Envy  Fuji  Jazz  Jona Ohrin 
##     4     8     4     4     4

上記のグループごとに色付けした主成分得点のグラフは plotScore または plotScorem で描画することができます。plotScoremでは、複数の主成分を指定することにより、すべての組み合わせで主成分得点グラフを描画することができます。

# グループ分けを色で表現した主成分得点グラフ
# resultはprcompの出力結果、legendlocationは凡例の位置
plotScore(result, xPC = 1, yPC = 2,country, legendlocation = "topright")

# グループ分けを色で表現した主成分得点のグラフ。主成分1-5のすべての組み合わせで主成分得点グラフを描画する。
plotScorem(result, ncomp = 5, country)

plotScorem(result, ncomp = 5, cultivar, pointsize = 1) # 点の大きさを「1」に指定

PLS回帰分析 (Partial least-squares regression)

PLS回帰分析は plsパッケージの中のplsr 関数を使って行うことができます。潜在変数の係数(ローディング)を等高線図として描画するには plotLoading 関数を用います。同様に、回帰係数を等高線図として描画するには、plotReg関数を用います。

# グルテンのモデルデータを読み込む
data(gluten)
gluten_uf <- unfold(gluten) # 二次元行列に展開する

# NAとなっている列の削除
index <- colSums(is.na(gluten_uf)) == 0
gluten_uf <- gluten_uf[, index]
gluten_ratio <- as.numeric(names(gluten))

require(pls)
model <- plsr(gluten_ratio ~ gluten_uf, ncomp = 3)
plotLoading(model, ncomp = 3)

plotReg(model)

現在、plsパッケージの内容のみ出力できますが、必要があれば将来機能を追加します。

参考文献

  1. Murphy, K. R., Stedmon, C. A., Graeber, D., & Bro, R. (2013). Tutorial Review: Fluorescence spectroscopy and multi-way techniques. PARAFAC. Analytical Methods.

  2. Fujita, K., Tsuta, M., Kokawa, M., & Sugiyama, J. (2010). Detection of deoxynivalenol using fluorescence excitation-emission matrix. Food and Bioprocess Technology, 3(6), 922-927.