ある方から、「脳画像解析の他に心理検査と認知機能検査をやっているんだけれども、それらの検定を行う際は多重比較補正はしなくていいのでしょうか?」という質問をいただきました。
私がいつもいろいろ教わっている統計の専門家の佐賀大学の川口淳先生にお聞きしたところ、とてもわかりやすい説明をいただきました。川口先生の許可を得ましたので公開させていただきます。
ある方から、「脳画像解析の他に心理検査と認知機能検査をやっているんだけれども、それらの検定を行う際は多重比較補正はしなくていいのでしょうか?」という質問をいただきました。
私がいつもいろいろ教わっている統計の専門家の佐賀大学の川口淳先生にお聞きしたところ、とてもわかりやすい説明をいただきました。川口先生の許可を得ましたので公開させていただきます。
2021年4月9日にFSLのMLで、以下の情報が流れてきました。
The latest FSL installer script should be able to download and install FSL on Apple ARM machines.
You can download the latest installer here (after filling in the form):
https://fsl.fmrib.ox.ac.uk/fsldownloads_registration
FSL will run using Rosetta2 and passes the FSL test suite.
ということで、FSLはついにApple M1チップに対応したようです。
macOSをBig Surにアップグレードした後、VirtualBoxから仮想マシンを起動しようとすると、”Kernel driver not installed (rc=-1908)”というエラーが出て、起動しないという現象にぶつかりました。

原因を探ったところ、”VirtualBoxのバージョンをあげること”が解決法として挙げられていました。
以下の方法でなんとか解決できたので、紹介します。キャプチャは全てmacOS Big Surのものです。
*22/Jan/2022 様々な方々とのやり取りの中で、うまくいかないこともたくさんありました。Homebrew経由でいくのが一番確実そうです。従って、記事をアップデートします。
FSLにはFA画像を非線形変換する際、FA_2_FMRIB58_1mm という設定ファイルが準備されており、比較的簡単に非線形変換ができます。
しかし、MD画像を非線形変換したい場合にはすぐにはうまくできません。
この時、FA画像の非線形変換のパラメーターを利用することで、可能になります。
ポイントは、flirt, fnirt, applywarp を上手に使うことです。
以下、sub1_FA.nii.gz, sub1_MD.nii.gz があるという前提でこれらを標準化するコマンドを記載します。コメントに意味を記載しています。
# FA画像を線形変換で標準化
# パラメータを affine.mat として出力(変換後の画像は出力しない)
flirt -ref $FSLDIR/data/standard/FMRIB58_FA_1mm \
-in sub1_FA \
-omat affine.mat
# FA画像を非線形変換で標準化
# 非線形変換のパラメータ画像を、sub1_cout.nii.gz として出力
# FA画像の標準化された画像を、sub1_FA_fnirted.nii.gz として出力
fnirt --config=FA_2_FMRIB58_1mm \
--in=sub1_FA \
--aff=affine.mat \
--cout=sub1_cout \
--iout=sub1_FA_fnirted
# MD画像を非線形変換で標準化
# 上記で得られた、affine.mat, sub1_cout.nii.gz を利用して、
# sub1_MD を変換させる
# sub1_FA と sub1_MD は全く同じ次元なので、パラメータだけ当てはめることができる
# MD画像の標準化された画像を、sub1_MD_fnirted.nii.gz として出力
applywarp --ref=$FSLDIR/data/standard/FMRIB58_FA_1mm \
--in=sub1_MD \
--warp=sub1_cout \
--premat=affine.mat \
--out=sub1_MD_fnirted
eddy implemented in FSL is time-consuming program. FSL recommends using eddy_cuda, GPU version of eddy. They ship eddy_cuda8.0 and edddy_cuda9.1. If you use Ubuntu 18.04, you can make use of eddy_cuda9.1 with only 4 commands.
Disclaimer: Installing nvidia-driver could cause display problem. I am not responsible for the problem…
FSLにはeddyという拡散MRI画像の渦電流を補正するプログラムが搭載されています。
かつてはeddy_correctというシンプルなプログラムでしたが、
今のeddyは、計算量がとてつもなく大きな(=処理時間がかかる)プログラムとなっています。
Liux版のFSLには、eddy_openmp というCPU版と、eddy_cuda{8.0,9.1}というGPU版があります。
Ubuntu 18.04 が搭載されているLinuxで NVIDIA製のグラフィックボードが搭載されている場合、eddy_cudaを比較的簡単にセットアップできるので紹介します。
注意:NVIDIAのドライバを入れる時点で、ディスプレイの解像度が変になることがあります。現在の実働マシンに使う場合は相当注意しながら行ってください。個々人の環境があまりにも違うのでこの方法で不具合が起こっても責任は負いかねます。(すでに3台のマシンでセットアップを行い問題ないことを確認していますが…)
2021年1月30日(土)〜31日(日)に、完全オンラインで「第9回ABiS脳画像解析チュートリアル」を開催いたします。
多数の参加申し込みをお待ちしております。
2020年12月27日までに受講申し込みをしてくださった方々で、受講環境が整われた方々にZoomアドレスが周知されます。
UbuntuでRを使っていらっしゃる方は多いと思います。
R3.5以上を使う場合、https://cran.rstudio.com/bin/linux/ubuntu bionic-cran35 を使っている場合が多いです。
このリポジトリの署名が2020年10月16日に失効しました。
Appleは11月17日からCPUをこれまでのIntelからARMベースのApple M1を搭載したmacbookを発売しました。
脳画像解析をされる方は注意してもらいたいのですが、2020年11月18日現時点で、FSLはApple M1には対応していません。対応までに数カ月かかるとFSLのメーリングリストで中の人がおっしゃっていました。
その他にも未対応のソフトは多くあると思われるので注意してください。
個人的には、macに関しては「ちょっと枯れてから」がいいと思っています。
imglob or imcp provided with FSL requires numpy.testing.decorators. However, numpy.testing.decorators has been deprecated from numpy 1.18. So, if you use numpy >=1.18, you see the following error:
題名のとおりなのですが、
Lin4NeuroをmacOS上で仮想マシンで走らせようとしたら、私の持っている Mojave, Catalina のどちらでも以下のメッセージが出てきて仮想マシンが立ち上がりませんでした。
FreeSurfer 7が公開されています。recon-allの時間が短縮されたり、海馬のsubfield解析がよりグレードアップしたりとなっています。
macOSへのインストールはデモ動画が示されていますが、コマンドラインで一気にインストールしたいと思いました。
以下、必要なものを示します。
気づけばほぼ毎日Zoomで何らかの会議やワークショップに参加する日々です。
先日、あるワークショップでホストをする機会がありました。
ブレークアウトセッションを多く使うワークショップですが、
毎回、何人かブレークアウトセッションに移行できず落ちてしまうという現象が起こりました。
おそらくネットワークの負荷が大きく、タイムアウトを起こしているのだろうという仮説を立てました。
HCP Pipelineを準備するのは簡単ではありませんが、東京大学小池研の植松明子さんとディスカッションしている中で、Ubuntu 18.04にHCP Pipelineを設定する方法を確立できたのでご紹介します。植松さんのinputに感謝申し上げます。
タイトル通りの投稿ですが、よく忘れるので、備忘録として。
スクリプトを書いている時に、入力ファイルの改行を全部とって1行にしたいという時があります。
たとえば、
seq 5 > list cat list 1 2 3 4 5
となっている時、これを
1 2 3 4 5
としたいような時をイメージしてください。
これを sed でやろうとするとうまくいきません。
sed 's/\n//' list sed 's/\r//' list
などでいくかと思えどうまくいかず、いろいろはまることになります。
さらにmacとLinuxでは、sedがBSDのsedとGNU sed で違うため、ここもまたはまる原因になります。
でも、sedにこだわらず、Perlで
perl -pe 's/\n/ /' list
とすると、あっさりうまくいきます。
(細かく言うと、Windowsだと、\r\nだったりしますが、とりあえず、UNIX環境と仮定します)
なお、perlのオプション -e は引数をそのままプログラムとして実行するオプションで、ワンライナーでは必須のものであり、オプション -p は、入力の各行に対してプログラムを実行し、最後に結果を表示するオプションとのことです。こちらのサイトに詳しく書いてあり、勉強になりました。
ということで、シェルスクリプトで改行の削除に困ったら、sedにこだわらず、perl -pe を活用すると迷う時間が減るかもしれません。
あるプロジェクトで、csvファイルをxlsxに変換する必要がありました。
いろいろな方法がありますが、比較的やりやすかった方法がありましたので、備忘録として記載します。
方法は、gnumeric (とnkf)を使う方法です。インストールは簡単です。
sudo apt install gnumeric nkf
ここでは、例として、sample.csv を sample.xlsx に変換したいと考えます。
日本語が入っている場合、Shift-JISなどだとうまくいかない場合があるので、文字コードをUTF-8に変換します。
nkf -wLu --overwrite sample.csv
Gnumericについているssconvertというプログラムが簡単に変換してくれます。
ssconvert sample.csv sample.xlsx
簡単なのですが、この場合、sample.xlsxのシート名が sample.csv となってしまいます。これは気持ち悪いなと思いました。
なので、これを取り除く工夫が以下です。xlsxをxmlに変換し、xmlの中の.csvをsedで取り除き、そして、再度xmlをxlsxに変換します。
ssconvert --export-type=Gnumeric_XmlIO:sax:0 $sample.xlsx sample.xml sed -i 's/.csv//' sample.xml ssconvert --export-type=Gnumeric_Excel:xlsx sample.xml sample.xlsx rm sample.xml
これで望みどおりの変換ができました。
以上、まとめると、以下のようなスクリプトになります。
#!/bin/bash
#prerequisites: nkf and gnumeric
for f in *.csv
do
nkf -wLu --overwrite $f
base=${f%.csv}
ssconvert $f ${base}.xlsx
ssconvert --export-type=Gnumeric_XmlIO:sax:0 ${base}.xlsx ${base}.xml
sed -i 's/.csv//' ${base}.xml
ssconvert --export-type=Gnumeric_Excel:xlsx ${base}.xml ${base}.xlsx
rm ${base}.xml
mv $f csv
done
最近、あるワークステーションを新規にセットアップしました。
いつもファイルはDropbox経由で同期することによって楽しているので、今回も同じようにしたら、
1週間たっても同期がされません。
おかしいなと思っていろいろ調べてみたら、公式ドキュメントにヒントがありました。
同期できない場合 – 互換性のない特殊文字と不良なファイル名に関する問題の解決方法
Linux で 1 万件以上のフォルダを監視する
Linux 版の Dropbox デスクトップ アプリは、デフォルト設定により 1 万件以上のフォルダを監視することはできません。制限数を超えた場合は監視されないため、同期中に無視されます。簡単な回避策として、まずターミナルを開き、次を入力してください。
echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p
このコマンドでシステムに 10 万件までのフォルダを監視するように指示することができます。コマンドを入力しパスワードを入力したら、すぐに Dropbox が同期を再開します。
私のDropbox内のフォルダ数はどのくらいだろう?と思って、以下のコマンドでディレクトリ数を数えてみました。
find Dropbox -type d | wc -l
その結果ですが、14454 と出てきました。1万件超えています。
そこで、アドバイス通り、以下のコマンドを入力しました。
echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p
そうしたところ、同期がはじまりました!システムで何か変な設定をしてしまったのではないかと心配だったのでほっとしました。
普段使っているDropboxは、少しずつ増えていっているので、おそらく監視しているフォルダ数がそれほど多くないのかもしれませんね。