2013-12-30

AlgDesign: 実験計画/解析用ツールについて考える

R の実験計画用パッケージを探してみたら、いろいろなパッケージが利用できるようでビックリです 1。常日頃から情報収集のアンテナをしっかり張っておけば良かったと反省しました。

中でも AlgDesign - Algorithmic Experimental Design は、D-, A-, I-最適計画 (Optimal Design 2) を生成する機能があるとのことで、個人的に大いに興味を持ちました。なぜなら、最適計画を RSM(応答曲面法)に活用した、エンジニアリングのための実験計画/解析ツールを作りたい、それが自分がコンピュータのプログラミングに取り組む最も基本的なモチベーションになっているからです。

以前、このブログの記事で [3] のような記事を書いたのもその一環でした。その当時は D-optimal を生成するルーチン作成については目処が立っていたので、手こずりそうな Contour Map(等高線図)の作成に手を付けたのですが、R が利用できるとなれば話は別です。遅々として進まない Project Ammonite [4] のコアとなる計算部分を R に任せられるのであれば、GUI の部分を再検討し、一気にそこそこ動作するぐらいまで進められそうです。

AlgDesign は、Fedora の RPM パッケージでは提供されていないので、install.packages("AlgDesign") でインストールしました。マニュアルoptFederov コマンドに記載されていた例を参考にして、3 水準 4 因子、二次モデル、16 回の実験について、D-optimal, A-optimal, I-optimal それぞれの計画を作成してみました。

> library("AlgDesign")
> dat <- gen.factorial(3, 4, varNames = c("A", "B", "C", "D"))
> dat
    A  B  C  D
1  -1 -1 -1 -1
2   0 -1 -1 -1
3   1 -1 -1 -1
...
(途中省略)
...
79 -1  1  1  1
80  0  1  1  1
81  1  1  1  1
> desD <- optFederov(~quad(A, B, C, D), dat, nTrials=16, eval=TRUE)
> desD
$D
[1] 0.4307032

$A
[1] 4.821205

$I
[1] 19.77447

$Ge
[1] 0.524

$Dea
[1] 0.404

$design
    A  B  C  D
1  -1 -1 -1 -1
8   0  1 -1 -1
9   1  1 -1 -1
13 -1  0  0 -1
21  1 -1  1 -1
25 -1  1  1 -1
30  1 -1 -1  0
34 -1  1 -1  0
38  0 -1  0  0
46 -1 -1  1  0
50  0  0  1  0
54  1  1  1  0
55 -1 -1 -1  1
63  1  1 -1  1
75  1 -1  1  1
79 -1  1  1  1

$rows
 [1]  1  8  9 13 21 25 30 34 38 46 50 54 55 63 75 79

> desA <- optFederov(~quad(.), dat, nTrials=16, eval=TRUE, crit="A")
> desA
$D
[1] 0.4038767

$A
[1] 3.930381

$I
[1] 18.78988

$Ge
[1] 0.418

$Dea
[1] 0.249

$design
    A  B  C  D
1  -1 -1 -1 -1
6   1  0 -1 -1
7  -1  1 -1 -1
13 -1  0  0 -1
21  1 -1  1 -1
26  0  1  1 -1
31 -1  0 -1  0
38  0 -1  0  0
41  0  0  0  0
45  1  1  0  0
46 -1 -1  1  0
57  1 -1 -1  1
62  0  1 -1  1
64 -1 -1  0  1
78  1  0  1  1
79 -1  1  1  1

$rows
 [1]  1  6  7 13 21 26 31 38 41 45 46 57 62 64 78 79

> desI <- optFederov(~quad(.), dat, nTrials=16, eval=TRUE, crit="I")
> desI
$D
[1] 0.4239604

$A
[1] 4.373075

$I
[1] 18.55387

$Ge
[1] 0.367

$Dea
[1] 0.178

$design
    A  B  C  D
4  -1  0 -1 -1
9   1  1 -1 -1
11  0 -1  0 -1
19 -1 -1  1 -1
24  1  0  1 -1
25 -1  1  1 -1
30  1 -1 -1  0
43 -1  1  0  0
50  0  0  1  0
55 -1 -1 -1  1
59  0  0 -1  1
61 -1  1 -1  1
69  1  0  0  1
75  1 -1  1  1
76 -1  0  1  1
81  1  1  1  1

$rows
 [1]  4  9 11 19 24 25 30 43 50 55 59 61 69 75 76 81

> 

例として full-factorial で候補の条件行列を用意しておいて、そこから最適な組み合わせを、それぞれの基準で探索したのですが、呆気ないぐらい即座に計算結果が返ってきます。

実験計画/解析ツールを作るのであれば、このパッケージを利用しない手はありません。いや R をコアに据えるのであれば、もう必要な機能は全て揃っています。あとはどんな GUI を用意するかが、どれだけ多くのユーザーに使ってもらえるツールになるかを左右するといっても過言ではありません。あまりにも突然、長年欲しかった機能を備えたパッケージに巡り会えてしまいました。

(冷静になって、これからの取り組み方を考える必要があるので)さしあたって、AlgDesign の Fedora 用 RPM パッケージを作りながら、どういう計算をしているのか調べてみようと思います。

  1. CRAN Task View: Design of Experiments (DoE) & Analysis of Experimental Data
  2. Optimal design - Wikipedia, the free encyclopedia
  3. bitWalk's: Contour Map - 5 月連休の成果
  4. bitWalk's: 【備忘録】JavaFX で複数のウィンドウを扱う


RSM について、参考になるようなスライドがないか探しましたが、解析に RSM を利用していた論文しかありませんでした。


JMP による DOE (RSM) の説明です。

こちらは SAS Institute 社による JMP 11 / DOE (RSM) のプレゼンテーションです (Discovery Summit 2013, Sept 9 - 13 at Grand Hyatt San Antonio)。

2013-12-29

【備忘録】tkrplot (TK Rplot)

tkrplot は、Tk ウィジェットの中に R グラフィックを配置するライブラリです。

昔、R のプログラムを GUI 化するためにこういうライブラリを探していたことがありましたが見つからず諦めていました。ところが先の記事でも書きましたように R を使うニーズがあり、調べている時に偶然見つけましたので、備忘録としてまとめておきます。

tkrplot は Fedora 20 の RPM パッケージでは提供されていませんので、R 上で install.packages のコマンドを使って直接インストールします。

Linux の環境において、R のパッケージを install.packages のコマンドでインストールする場合は、Windows 版のようにバイナリパッケージがダウンロードされるのではなく、ソースがダウンロードされて、それをコンパイルしてビルドすることでインストールされます。そのため Linux 側では事前に R-devel をインストールしておく必要があります。

gcc でコンパイルできる環境が整っており、R-devel がインストールされていることを確認して R を起動します。

パッケージをダウンロードするサイトを選択します。

ソースがダウンロードされると、コンパイルされてインストールされます。

このパッケージ tkrplot の場合は、問題なくコンパイルされましたが、パッケージによってはコンパイル中にエラーが出てインストールできない場合もあります。そういう時は、エラーメッセージを理解して、必要な処置を講じる必要があります。この記事の最後に書いていますが、RPM で提供されているパッケージであれば、最初からそちらを利用した方が無難です。

下記は tkrplot のマニュアルに記載されているサンプルを実行した例です。

library("tkrplot")
tt <- tktoplevel()
bb <- 1
img <- tkrplot(tt, function() plot(1:20,(1:20)^bb))
f <- function(...) {
  b <- as.numeric(tclvalue("bb"))
  if (b != bb) {
    bb <<- b
    tkrreplot(img)
  }
}
s <- tkscale(tt, command=f, from=0.05, to=2.00, variable="bb", showvalue=FALSE, resolution=0.05, orient="horiz")
tkpack(img, s)

tkrplot は、ちょっとした R のプログラムを GUI 化する際に重宝しそうです。


Fedora 20 で提供されている R のパッケージ

ちなみに、Fedora において、R で始まる R のパッケージを yum で探すときには、名前が単純であるため意外と手こずります。通常は下記のようにして探しています。

$ yum search "R-" | grep "^R"

この方法だと、i686 のパッケージが混じります。参考までに以下に重複を省いたリストを下記に示しました (Fedora 20)。

R-Biostrings-devel.x86_64 : Development files for R-Biostrings
R-BufferedMatrix-devel.x86_64 : Development files for R-BufferedMatrix
R-IRanges-devel.x86_64 : Development files for R-IRanges
R-Rsamtools-devel.x86_64 : Development files for R-Rsamtools
R-Rsolid-devel.x86_64 : Development files for R-Rsolid
R-bigmemory-devel.x86_64 : Development headers for R-bigmemory
R-preprocessCore-devel.x86_64 : Development files for R-preprocessCore
R-ALL.noarch : Data of T- and B-cell Acute Lymphocytic Leukemia
R-AnnotationDbi.noarch : Annotation Database Interface
R-BSgenome.noarch : Infrastructure for Biostrings-based genome data packages
R-BSgenome.Celegans.UCSC.ce2.noarch : Caenorhabditis elegans genome (UCSC Release ce2)
R-Biobase.x86_64 : Base functions for Bioconductor
R-BiocGenerics.noarch : Generic functions for Bioconductor
R-Biostrings.x86_64 : String objects representing biological sequences
R-BufferedMatrix.x86_64 : A matrix data storage object method from bioconductor
R-BufferedMatrixMethods.x86_64 : Microarray Data related methods that utlize
R-DBI.noarch : Database interface module for R
R-DynDoc.noarch : Functions for dynamic documents
R-GeneR.x86_64 : R for genes and sequences analysis
R-GenomicFeatures.noarch : Tools for making and manipulating transcript centric
R-GenomicRanges.x86_64 : Representation and manipulation of genomic intervals
R-IRanges.x86_64 : Low-level containers for storing sets of integer ranges
R-RCurl.x86_64 : General network (HTTP/FTP) client interface for R
R-RM2.noarch : Revenue Management and Pricing for R
R-ROC.x86_64 : Utilities for ROC
R-RODBC.x86_64 : An ODBC database interface for R
R-RSQLite.x86_64 : SQLite database interface for R
R-RScaLAPACK.x86_64 : An interface to perform parallel computation on linear
R-RUnit.noarch : R Unit test framework
R-Rcompression.x86_64 : R Package for in-memory compression
R-Rsamtools.x86_64 : R interface to samtools
R-Rsolid.x86_64 : Quantile normalization and base calling for second generation
R-XML.x86_64 : Tools for parsing and generating xml within r and s-plus
R-abind.noarch : Combine multi-dimensional arrays
R-acepack.x86_64 : ACE and AVAS methods for choosing regression transformations
R-affy.x86_64 : Methods for Affymetrix Oligonucleotide Arrays
R-affydata.noarch : Affymetrix data for demonstration purpose
R-affyio.x86_64 : Tools for parsing Affymetrix data files
R-biglm.x86_64 : Bounded memory linear and generalized linear models
R-bigmemory.x86_64 : Manage massive matrices in R using C++, with support for
R-biomaRt.noarch : R Interface to BioMart databases
R-bitops.x86_64 : Functions for Bitwise operations
R-caTools.x86_64 : Tools: moving window statistics, gif, base64, roc auc...
R-car.noarch : Companion to Applied Regression package for R
R-combinat.noarch : R routines for combinatorics
R-core.x86_64 : The minimal R components necessary for a functional runtime
R-core-devel.x86_64 : Core files for development of R packages (no Java)
R-devel.x86_64 : Full R development environment metapackage
R-fibroEset.noarch : ExprSet for karaman et al. (2003) fibroblasts data
R-hdf5.x86_64 : Interface to the NCSA HDF5 library
R-hgu133acdf.noarch : HG-U133A.cdf data file
R-hgu95av2cdf.noarch : HG_U95Av2.CDF data file
R-hgu95av2probe.noarch : Probe sequence data for microarrays of type hgu95av2
R-java.x86_64 : R with Fedora provided Java Runtime Environment
R-java-devel.x86_64 : Development package for use with Java enabled R components
R-lmtest.x86_64 : Testing Linear Regression Models for R
R-mAr.x86_64 : R module to evaluate functions for multivariate AutoRegressive
R-maanova.x86_64 : Analysis of N-dye Micro Array using mixed model effect
R-msm.x86_64 : Multi-state Markov and hidden Markov models in continuous time
R-multcomp.noarch : Simultaneous inference for general linear hypotheses R
R-multtest.x86_64 : Multiple hypothesis testing library from Bioconductor
R-mvtnorm.x86_64 : Multivariate normal and T distribution R Package
R-nws.noarch : R functions for NetWorkSpaces and Sleigh
R-pls.noarch : Multivariate regression by PLSR and PCR
R-preprocessCore.x86_64 : A collection of pre-processing functions
R-qcc.noarch : SQC package for R
R-qtl.x86_64 : Tools for analyzing QTL experiments
R-qvalue.noarch : Q-value estimation for false discovery rate control
R-rlecuyer.x86_64 : R interface to RNG with multiple streams
R-rtracklayer.x86_64 : R interface to genome browsers and their annotation
R-sandwich.noarch : Robust Covariance Matrix Estimators
R-sciplot.noarch : Scientific Graphing Functions for Factorial Designs
R-statmod.x86_64 : Statistical modeling
R-systemfit.noarch : Simultaneous Equation Estimation R Package
R-timeDate.noarch : Rmetrics - chronological and calendrical objects
R-tkWidgets.noarch : Widgets to provide user interfaces from bioconductor
R-waveslim.x86_64 : R module, Basic wavelet routines for 1,2 and 3-dimensional
R-wavethresh.x86_64 : R module, Software to perform wavelet statistics and
R-widgetTools.noarch : Bioconductor tools to support tcltk widgets
R-xtable.noarch : Export tables to LaTeX or HTML
R-zoo.x86_64 : Z's ordered observations for irregular time series


2013-12-27

R の統合開発環境 (IDE) RStudio

R を久しぶりに使うニーズがあったので、Eclipse のプラグイン StatET を使ってみましたが、いまいちうまく使いこなせなかったので、前から気になっていた RStudio を Fedora 上にインストールしてみました。

RStudio には、デスクトップ版と、ブラウザを使って利用するサーバ版がありますが、今回はデスクトップ版をダウンロードしています (v0.98)。デスクトップ版は Windows, Mac OS X, Linux (deb, rpm) 用のパッケージがダウンロードできます。

まだ十分には使いこなしているとは言えませんが、気に入った機能を挙げます。

  • いくつもプロットしたものを出力形式やサイズを指定してエクスポートできる。
    • 定型の集計をするときに、サイズを決められるのが嬉しい。RStudio でできるということは、知らなかっただけで、コマンドレベルでもできるということですが。。。。
  • ? で(ブラウザに表示されず)マニュアルがすぐ見れる。
    • いくつも画面が残らないので意外と重宝。
  • R Markdown (knitr) の機能と連携している。
  • (IDE として当然ですが)コーディングのためのさまざまなサポート機能がある(評価中)。

前述の StatET も使いこなせるよう再トライして、比較してみようと考えています。RStudio はとても使いやすそうなのですが、その一方で、開発環境をあれやこれやとむやみに増やしたくない事情もあるからです。

昔、半導体製造のコンサルをする米国の会社に勤めていたことがありましたが、その時には Insightful 社の S-PLUS を使って大量のデータ解析をしてました。S-PLUS は S 言語の商用パッケージで、R と高い互換性がありました。当時は、便利な開発環境がなくてデバッグに苦労したことを覚えています。その S-PLUS を開発、販売していた Insightful 社は 2008 年に TIBCO 社に買収されました。昔の S-PLUS は Spotfire に名前を変えたように見て取れるのですが1Wikipedia によると、どうやら現在では R を計算するエンジンに利用しているようです。オープンソース強し、です。ただ、日本ではまだ S-PLUS 8.2Jが販売されているので2、一体どうなっているのか謎です。

  1. What's New in Version 8.1, Product Name Changes
  2. データ解析/統計解析ソフトウェア S-PLUS: マーケティング、品質管理、医療情報への導入実績

2013-12-13

Linux と プリンタ:Epson PX-105 の使用感

Windows と Linux を一台の PC で切り替えて使うようになってずいぶん経ちましたが、ここ数年はすっかり Linux だけで用が足りるようになってしまいました。そこで Fedora 20 のリリースを機に Windows との切り替えを止めて、自宅のメイン PC を Linux 専用に使うことにしました。

Linux だけの環境で唯一の不安はプリンタです。

自宅でのプリンタの需要はそれほどありませんが、それでも年末になると年賀状印刷に必要となります。ここ何年かは持ち運びに便利な Canon PIXUS iP90v を使っていましたが、64bit 版 Linux 対応のプリンタドライバがリリースされておらず Fedora (x86_64) からうまく印刷ができなかったので、印刷をするときだけ Windows に切り替えて使っていました。そう、Windows は 12 月のこの時期しかほとんど使っていなかったのです。当然、これだけの目的に新しい Windows へバージョンアップすることは馬鹿げているので、Windows Vista を最後に Windows は購入していません。

一方、持ち運びに便利だと思って買ったこのプリンタも、外へ持ち出して使ったことは皆無でした。

ちなみに(ベータ版の)Fedora 20 をインストールした状態で CUPS は Canon PIXUS iP90v を認識しますが、右の設定ではテスト印刷もまともにできません。

いろいろと試行錯誤をして使えるようにする余地はありましたが、時間的な余裕が無いことから、諦めが速いことは良くないと思いつつも使うことを断念してしまいました。

そんなわけで Linux で安心して使えるプリンタが欲しいと思い、あれこれ品定めをした結論が Epson PX-105 でした。

選定のポイントは以下の三点です。

  1. 消耗品が入手しやすいこと
    • Linux に対応したプリンタと言えば HP(ヒューレットパッカード)という印象がありますが、いかんせん大都市に居住していないので、今すぐインクカートリッジを買いたいという時にどうにもならない可能性が高く、最初から除外。
    • ブラザーのプリンタにも興味があったのですが、個人用途でのランニングコストなどを考えると、国内大手のキャノンやエプソンを選択する方が無難と判断しました。
  2. 機能はそこそこで良いので安価なインクジェットプリンタ
    • Amazon.jp で安価なプリンタを調べ、Canon PIXUS IP2700 (3,845円) と EPSON PX-105 (6,358 円) に絞りました。
  3. Linux(64bit) 用の ドライバが、メーカーから公開されていること
    • PIXUS iP2700 用プリンタドライバは、Debian/RedHat 系のパッケージが公開されていましたが 32bit 用のみでしたので、この時点でボツとしました。
      • もちろん、32bit/64bit 両方のライブラリをインストールしておけば、32bit 版のプリンタドライバでも対応できますが、ディスク領域を無駄に使っているようで、そのような方針は取っていません。
    • EPSON Download Center で Linux 用のプリンタドライバが入手可能か容易に調べられます。ざっと見てみたところ Debian/RedHat 系パッケージの対応ばかりか、32bit/64bit 用によく対応しているように思え、PX-105 についても同様でしたので、このプリンタに決めて Amazon.jp に発注。12/8 日曜日のことでした(翌日配達されました)。
    • プリンタドライバは、下記からダウンロードして、プリンタを接続する前に予めインストールしておきました。

PX-105 は安価にも関わらず、USB 接続の他に有線/無線 LAN 接続にも対応している優れものです。

不覚にも、最初 USB ポートがどこにあるか判らず、やむなくプリンタ用にルータのポートを空けて有線 LAN でセットアップしましたが、何の問題もなくプリンタを認識し、テスト印刷も無事できました。

その後、マジマジとプリンタ本体を眺めると、なんで気が付かなかったのかというところ、プリンタ本体側面に USB ポートがあったので、セットアップをし直しました。

さらにその後、考え直して、ヤマダ電機で 8 ポートのルータを買ってきて LAN ポート不足を解消して、ネットワークプリンタに戻しました。

印刷が始まる時の音が結構大きいと思いますが、気になるのはそのぐらいで、今のところ大変満足しています。Linux で使っている時の、プリンタのインクの減り具合がどのようになるかが今後の興味になります。