小保方論文の本当の憂鬱

小保方晴子さんが iPS 細胞を超える STAP 細胞という大発見をしたとして、2014年1月にマスメディアの寵児となった。しかし、翌月には、論文に怪しい箇所があると雲行きが怪しくなり、そろそろ論文撤回*1が決まりそうだ。
その論文の疑惑については、小保方晴子のSTAP細胞論文の疑惑 というページが詳しい。ただ、図や文章がコピーというようなところは誰でも分かるように書かれているが、致命的な箇所は専門家と思しき人の掲示板への書き込み*2の引用しかない。だから、誰にでも分かるように解説してみたい。


まず、生物は細胞からできている。細胞の材料はかなりがタンパク質だ。タンパク質の設計図が、遺伝子。人間の遺伝子は3万くらいしかない。

一つの遺伝子から作られるタンパク質はだいたい一つに決まっているのだけれども、大きな例外が免疫システム。免疫システムでは、外来からのいろいろ侵入物を認識するために、いろんなタンパク質に結合できる様々な形の"抗体"を作るんだ。抗体ももちろんタンパク質でできている。
この多様な抗体を作る原理を説明したのが、利根川進ノーベル賞に選ばれた業績、V(D)J遺伝子再構成(遺伝子再編成)というやつだ。

遺伝子再構成っていうのは、要するに、本来必要なよりもずっと長い遺伝子を用意しておいて、無駄なところを後で捨てると、捨て方によって、色々な種類ができるということ。
例えば、英文で {I You He She We} {ate drank killed} {books chairs tables trees}. というのを考えると、これだけでも5*3*4=60通り作れる。

これが、免疫細胞ができる(分化する)ときに遺伝子に起きているというのが遺伝子再構成で、それまでの常識を覆すものだった。1976年の話ね。
つまり、免疫細胞になる時に、ある遺伝子は、その大部分を捨て去ることで抗体のタンパク質を生み出せるようになり、その捨て方によって色々な抗体を持った免疫細胞ができるという話だ。

さらに、遺伝子再構成以外にも免疫細胞の種類を増やす方法があって、諸々合わせて、最終的に作られるタンパク質は10^18通り以上とかあるらしい。1キロ=10^3、1ギガ=10^6、1メガ=10^9、1テラ=10^12、1ペタ=10^15、1エクサ=10^18だね。


小保方さんの Nature の論文は、さらに衝撃的で、遺伝子再構成されたものが、元に戻る万能細胞になる*3って言っているんだ。酸につけるだけで。
これ、食いかけのゆで卵をお酢につけたら、生卵まるまる一個に戻ったみたいなものだよ。だって、遺伝子の大半は捨て去られてるんだもん。「過去何百年の細胞生物学の歴史を愚弄するものだ」ろ?
「誰も信じてくれなかったことが何よりも大変だった」というか、信じないよね。これが本当だったとすると、元の遺伝子がどこかに隠してあって、元に戻せるようになっていたこれだけ複雑な変化をしたものが、簡単に戻るように作られていた*4ということだから。

というわけで、実は、Nature 論文が出た直後から話題になっていたけれども、医者みたいな生命科学のユーザーは大絶賛して夢が広がりんぐしていたけれども、近い分野の研究者は追試がなされるまでは信じないと言っていた人のほうが多そうだった。そりゃ、マスコミにマイク向けられたら、そんなこといわないけどね。「誠に驚くべき内容で、続報に期待する」とかいうでしょう。揉めたくないもん。

Nature は今でこそ権威があるけども、商業誌でもともとはゴシップ誌に近い。とある助教は、Nature に出たということは嘘だと冗談めかして言っていた。別にいいんですよ。論文っていうのは、研究者同士のコミニケーション手段だから、別に論文がでたところでどうということはない。あと、査読だけど、一流研究室だと、論文を出していいという教授の許可のほうが大変で、そこを通れば査読にはまず落ちない。まあ、だから、Nature に出た程度で信じない、ってことね。


ここまでが前提で、その捏造が疑われている箇所というのが、STAP ができている直接のSTAP 細胞が免疫細胞由来である証拠とされているんだけれども、よく考えると、とんでもなく不思議。

簡単にいうと、「細胞の中の特定の遺伝子だけ選んで、その長さの分布を測る」ことができる技術があるの。それを使うと、
{I You He She We} {ate drank killed} {books chairs tables trees}. <- 長い
She killed tables. <- 短い
と、細胞内にどういう長さの遺伝子があるかが分かる。

論文によるとね、遺伝子再構成の前(ES 細胞)の遺伝子の長さをはかると、長い。遺伝子再構成後(免疫細胞)の遺伝子の長さをはかると、短い。そして、それを酸で処理した STAP 細胞は一部だが長い短いものと長いものがある。だから、これは、STAP 細胞が一部万能細胞に戻った免疫細胞由来である証拠だ、っていうんだ。ところが、実はこの時点で何かがおかしい。

というのもね、遺伝子のセットは両親から一組ずつ受け取る。だから、同じ遺伝子が二つずつあるんだ。これを対立遺伝子とかいう。対立遺伝子の組の挙動は、さまざまだ。たとえば、優性・劣性というのは、中学でやるね。つまり、優性な方の形質がでる場合がある。血液型のB型とO型の遺伝子を持っていると、B型が優性なのでB型になる。これが、A型とB型だと、両方の形質が出てAB型になる。
でも、抗体の場合はそうはならないんだ。対立する片方の遺伝子が発生の途中で使えなくなる(不活化する)んだ。同じ現象は、たとえば、三毛猫の毛の色でもみられる。「茶色で上書きする」遺伝子と「何もしない」遺伝子というのが対立遺伝子なんだ。他の遺伝子が、「黒地に白ぶち」なネコにしようとしているときに、「茶色で上書き」と「何もしない」が一つずつあると、一方が細胞ごとにランダムに使えなくなる。だから、「黒地に白斑」と「茶」の部分が体中にできる。これが三毛猫。遺伝子が使えなくなるといっても、捨てられるというよりは、鍵がかかる感じだ。オッドアイも同じ原理だ。

つまり、話を戻すと、「免疫細胞の遺伝子の長さをはかると、短い」っていうこと自体がおかしいんだ。対立遺伝子の一方は不活化しているから再構成されず、元の長さのまま、もう一方は抗体を作るために遺伝子再構成をうけて短くなる。だから遺伝子再構成後の免疫細胞の遺伝子の長さは「半分は短く、半分は長い」という結果が出るはずなんだ。このことは、免疫細胞の遺伝子再構成を知っている人なら、当然のことなんだ。ところが論文では長い方の存在がないんだ。


それでね、ここのところ、みんな悩んでるの。これ捏造だとしても、杜撰すぎる。なんで消しちゃったの??
しかも、同じ論文の別の figure では、免疫細胞の結果は、「半分は短く、半分は長い」になっていて、消されていないの。
一番素直に解釈すると、免疫細胞が全部短い遺伝子で、STAP 細胞に長い遺伝子が含まれていると、STAP 細胞の遺伝子の長さが元に戻ったという解釈になるから、そのように解釈できる余地を残すために消したということになるのだけれども、さすがに大変が捨てられた遺伝子が元に戻るというのは荒唐無稽だ。確かに、「半分は短く、半分は長い」免疫細胞が「半分は短く、半分は長い」STAP 細胞になっても、STAP 細胞が万能細胞になった証拠ではない。でも、そんな常識的なところを捏造してもバレるに決まってるよ。


でも、ここから、少なくとも一つのことが分かるんだ。
小保方さんだけじゃなくて、あの論文の共著者8人は全員「免疫細胞の遺伝子再構成」で対立遺伝子排除が働いていることを知らないってことだ。恐らく、問題があったのは小保方さんだけじゃない。

*1:撤回されそうな論文: Nature 505, 641–647 (30 January 2014) doi:10.1038/nature12968 Stimulus-triggered fate conversion of somatic cells into pluripotency | Nature

*2:問題の箇所はここである。「免疫で遺伝子やってるやつならわかる。TCRのDNA解析でレーン3のGLにバンドがない件は全然おかしい。……著者は意図的にGLがバンドがないように見せることによって、分化後のT細胞を用いたことを示そうと細工したようだ。しかし、TCRbetaでは対立遺伝子排除が働くので片方の相同染色体ではGL型の配列をもつはず(よってJEM論文のようにGLにバンドが出るはず)。それを知らずに馬脚を現した。」

*3:元に戻るとしたのは、推測が混じっていました。この推測は、画像の捏造のされ方や後出しのプロトコルと整合的に解釈したものですが、そこまでは書かれていませんでした。議論をしている最中に混同したようです。

*4:同上

言語雑感

Perl:とりあえず、怪しいことをしたくなると唱える。一行しか書けない。読めない。
Bash:気がついたら出来ている。これを使って管理。
Ruby:10行から100行くらいまではこれでいくようになった。
Python:好感がもてる。
C++:標準語。お互いに意思疎通するときに使う。たまにネイティブがいると流暢すぎてよく分からない。template は邪悪。
asm:祭祀用。吟ずるもの。
Java:System.out.println な言語。アプレットのため展示のために書いてた。
Haskell:電卓として最強。エラーメッセージが分からん。計算量見積もり間違う。
PHP:これは言語じゃない。
OCaml:300行超えるときはこれで書くらしい。まだ、そんなに長いものを"計画的に"書いたことはない。
C:システムとしゃべる用。あとは数値計算に。
Fortran:知らないけれども、数値計算にいいらしい。嫌われているらしいね。
Scheme:Scheme で min-scheme を作ったときには感動した。
BASIC:すこーぷすこーぷすこーぷ。
Javascript:手元に notepad と IE しかない緊急事態にも使える。あとは、Greesemonkey でごにょごにょ。

haskell の fib は遅くない

http://d.hatena.ne.jp/nishiohirokazu/20100622/1277208908
に驚愕するような話が書かれていて、要するに、

fib = 1:1:zipWith (+) fib (tail fib)

は遅いと。何に驚愕したかというと、3点しかとらずに、「O(N ** 2.6)である。」と結論づけていることだ。空間使用量が O(N**2) で増えていくコードなのだから、そんなの空間計算量が一時的に影響与えたと考えるのが自然だろうに、その可能性も潰さずに原因も考えずに結論を出している。そんな適当な実験をするんだ、ということだ。

ランダウの記号 O(f(n)) は n が無限大でどのような関数で押さえられるか、についての表現だ。なので実行時間を論じているときには、n が 10^6 みたいな小さい値の周辺でフィットする行為は実行時間のオーダーを推測する補助手段でしかない。

fib !! n は、理論的に実行時の動きを考えると O(n**2) になる。
遅延評価ではサンクをつくるがそれは定数倍しか時間に影響を与えないのは当然だと思う。

import System
import List

fib = 1:1:zipWith (+) fib (tail fib)

main = do
  args <- getArgs
  print $ (0 *) $ (fib !!) $ read $ args !! 0

はじめにとったデータ。

10000 0.06
20000 0.16
30000 0.28
40000 0.44
50000 0.66
60000 0.9
70000 1.23
80000 1.62
90000 2.1
100000 2.56
110000 3.18
120000 3.92
130000 4.48
140000 5.31
150000 6.21
160000 7.24
170000 8.33
180000 9.27
190000 10.56

ここまでは、綺麗に O(n**2) にのっている。

perl -e '$i=10000;while($i<10000000){print "$i ".substr(`/usr/bin/time -o /dev/stdout -f "%e %U %S %t %K %p %F %R %c" ./a.out $i +RTS -K200M`,2);$i+=10000;}' | tee out.txt

(ただし、定数はこのままではない)

10000 0.03 0.01 0.00 0 0 0 0 797 11
20000 0.08 0.06 0.00 0 0 0 0 836 16
30000 0.19 0.16 0.00 0 0 0 0 937 37
40000 0.33 0.30 0.01 0 0 0 0 1277 50
50000 0.50 0.45 0.01 0 0 0 0 1297 83
60000 0.81 0.71 0.02 0 0 0 0 1572 137
70000 0.99 0.93 0.02 0 0 0 0 1978 75
80000 1.32 1.27 0.02 0 0 0 0 2270 53
90000 1.75 1.70 0.02 0 0 0 0 2271 46
100000 2.19 2.15 0.02 0 0 0 0 2564 25
200000 11.23 11.15 0.07 0 0 0 0 4398 32
300000 30.13 29.99 0.13 0 0 0 0 6782 68
400000 63.98 63.55 0.22 0 0 0 0 8004 739
500000 114.39 114.01 0.33 0 0 0 0 9736 706
600000 180.20 179.69 0.44 0 0 0 0 11987 892
700000 270.16 269.50 0.59 0 0 0 0 13974 1217
800000 409.71 408.42 0.74 0 0 0 0 15703 3437
900000 579.54 578.00 0.93 0 0 0 0 16923 4353

はじめは O(n**2) にのっているが、3*10**6 あたりからわずかにはずれる。ここをとりだして O(n**2) じゃないと騒いでたって事だね。

遅延評価だと(正格評価のつもりでいると予想しないところでメモリを食う、ので、メモリを食うとGCの影響やメモリ階層の影響がフクザツなので)実行時間が読みづらい、というのはあると思う。けど、実行される演算の回数は、必要な演算は結局最後には全部呼ばれるので、深く考えず普通に数えればok

http://twitter.com/kinaba/status/16854299925

法学は社会科学か

日本十進分類法の話か。それならよく知っている。納得。ちなみに、僕はジュンク堂書店新宿店で法律書コーナーにいるといわれ、実用書の階->人文書の階->社会科学の階と全部回ったことが。


たぶん、私が法学を社会科学に分類しないのは、中世ヨーロッパでは、神学・法学・医学・哲学の四学部に分けていたことの印象が強いからだ。だから、神学は科学ではないし、医学も科学ではないし、法学も科学ではない。科学の影響を受けていてもね! そして残りは哲学の末裔。


ラムザイヤーの法と経済学の序文から。

米国の法学教育がロー・スクールという大学院のレベルで行われるため、法学を学びに来る学生は、必ず他の分野を専門科目として勉強した経験を持つ。10年前のハーバード大学等には、他の分野においてすでに修士号や博士号を持ちながら、米国の1970年代のオーバー・ドクターの状況を前にして、もとの分野をあきらめてロー・スクールに入って来た者もいた。正直にいえば、私もその一人であった。
ロー・スクールに入る前に大学院で他の分野の研究を行っていた学生は、法学を他の学問と絶えず比較していた。私たち方向転換組の学生は、他の学生と同じように講義に出て、判例を読み、優秀なものは、ロー・レビューの編集委員になったが、他の社会科学分野における経験を有していたため、伝統的な法学研究に対して、どうしても不満を持つことが多かった。はっきりいえば、それは、不満というよりも、根本的な点における法学に対する失望であったといえよう。
ロー・スクールで、私たちは、判例の整理・分析の仕方を習った。すなわち、各分野の判例や立法をどのように筋の通った形で整理するかを習い、無秩序に存在する判例や法律にどのように秩序正しい外観を与えるかを習ったのである。それは、私たちが弁護士として自立するために必要な技術であり、また、現在でも、私は学生に対して、そのような技術を教えている。そして、私が、学生時代に、そのような知的ゲームに一種の面白さを感じたのも事実であった。
しかし、判例や立法の整理が学問でないことだけは、明らかであろう。簿記の研究と同じく、それは単なる技術であり、社会科学的研究でもなければ、哲学でもなかった。そのような疑問は、ロー・スクールの講義で習った判例の整理についてだけではなく、ハーバード・ロー・レビューの編集委員として読んだ論文の大多数にも及んだ。その中には、講義と同じく判例に理屈を付けようとしている論文もあった。しかし、それらは私にはやはり物足りなかった。規範的研究も、実際の世界に及ぶ法の効果をシステマティックに研究した上で法制度の改革を提案したものではなく、著者の個人としての単なる政治的価値判断を発表したものにすぎなかったからである。若い研究者の多くが「法と経済学」の方法論を用い始めた理由は、この失望にあったと思う。
米国の伝統的な法学研究の誤りは、法を「法学」という学問として取り扱おうとしたところにあったのである。なぜなら、学問には研究の方法論 (methodology) が必要であるが、法学には (判例や立法の整理以外には) 何の方法論もなく、作ろうと思っても作れないからである。それは、「法」が研究方法の人つではなく (また、社会科学の分野の一つでもなく)、社会の一つの「現象」にすぎないからである。いい換えれば、「法」、「社会に対する法の影響」、または「法に対する社会の影響」等は、研究の方法ではなく、研究し得る客体にすぎないのである。そして、その法という客体を研究するには何らかの方法論が必要であり、法学にはその方法論が全くないため、社会科学的研究を行うには他の分野から方法論を持ち込まざるを得ないのである。
そこで現われた研究方法論と研究現象の一つの一致が「法と経済学」である。一言でいえば、それは経済学で発展させられた方法論を通して、法的現象を研究する学問なのである。もちろん、葬式の慣行を研究するのに、経済学だけではなく、人類学、社会学、心理学等を用いることが可能であるのと同じく、法制度の研究にも、様々な方法論を用いることができる。経済学は、多くの法的問題を解決するにあたっての重要な方法ではあるが、最終的には、多くの研究方法の一つにすぎない。したがって、経済学を用いてもよいし、社会学を用いてもよいが、何らかの方法論を社会科学から持ち込まなければ法学が学問になり得ないことだけは、明らかである。

遺伝的に反社会的行動が行われることが分かってきたので、責任主義に対する批判が米国では行われているが、日本ではどうかと聞かれてこう答えた。
法学というのはローマ時代から続く古い学問(?)というか社会現象であり、近代以前のロジックが残っています。アメリカでも、他分野のポスドクロースクールに流れ込んだ70年代80年代以降に初めて社会学としてのディシプリンを持ったと聞きますので、日本は30年は遅れるのではないかと思います。
少なくとも、大学院で説明される学説(、大抵はいくつかの主要な学説をやりますが、その)レベルでは、責任主義を認めないものはなかったと思います。
私も責任主義には、どこかしら不合理なものを感じるのですが。


日本の文系という語は、数学理科ができないことしか意味していない。僕は自分で簡単な計量社会学の調査をして、法学部生に見せたところ、「へえー、理系の研究は面白いね」っていわれてショックだった。ちげえよ、これはどっちかといえば法学よりも文系に分類されるよ!

科学の価値

自然科学の研究をした人は、いかに自然が豊かな構造をもち、いかに人の浅慮の及ぶものではないか、を知っている。だから、謙虚だ。それに対し、多くの分野は人が理解できるものしか扱わないから極めて尊大な態度をとる人が多い。この比較だけからも科学に触れる価値は十分導けると思う。