論理の流刑地

地獄の底を、爆笑しながら闊歩する

「知的生産の技術」(梅棹忠夫, 1980)

Notes

関係ないけど最近一番嬉しかったことは、
小野 滋さんの「読書日記」が復活したことである。
twitterを拝見する限り、体調を崩して休養していたようだ)

博覧強記ってこういうことかと言わしめるこんな方が在野にいるんだなって思うと
私は怠けているなぁ。

Motivation

知的生産の技術 (岩波新書)

知的生産の技術 (岩波新書)

田舎な最寄りの図書館の最近入った本のなかに見つけた(昔の本なのに)。
梅田望夫(いま何やってるんだろう..)が著書で猛烈に推してたのは記憶にあるんだが、
実際この人の本を読んだことはないので、息抜きがてら。

Point

面白いと思ったところをメモ。

てか、思ったよりも具体的なツールの使い方指南みたいな本で、
私みたいな頭の悪い人間には、いまいち現代の仕事の仕方に対する応用方法が難しいのだが、
著者の文体には(偉大な先生なのに)えらぶったところがなくて好感が持てるので、それだけでずるずると読んでしまった。
あとひらがなが多いのがいい。癒される。

研究の「方法」「技術」を考える必要性について

(引用註:当時の日本の研究者は生産性がひくく、それは研究の方法をしっかりと考え論議しないからだ、という前置きにつづいて...)
知識において高度なものを身につけているくせに、研究の実践面においては、いちじるしく能力がひくい、というような研究者がでてくるのである。
じつは、わかい人たちのことばかり、いっておられないようだ。われわれ中堅どころにいる研究者だって、ほんとうは、おそろしく研究能力がひくいのではなかろうか。
それも、頭がわるいとか、なまけものだとかの理由からではなく、もっぱら研究の「やりかた」がまずいために、研究能力がひくい段階にとどまったままでいる、ということがあるのではないだろうか。いわば、技術の不足にもとづく研究能力のひくさである。
(pp.4-5)

大変耳と胃がいたい話。独行法化した今日の大学もあまり変わらない。
ヒラノ教授シリーズで、アメリカ(のtenure前の研究者)が"publish or perish"(論文を出さなきゃ消える)っていうカルチャーだということが
紹介されていた。

「おそろしく研究能力がひくい」研究者が忙しい忙しいといいながら論文を何年も出さないままになるのであるのを間近にみてきているので、なかなか考えさせられる。(研究能力がひくくない研究者がいろんなPJTの管理をまかされて自分の論文をpublishできないのも見ているが、それはまた別の話..)

(引用註:研究の方法をみんな公開したがらない、秘伝にしたがるという話の流れで..)

技術というものは、原則として没個性的である。だれでもが、順序をふんで練習してゆけば、
かならず一定の水準に到達できる、という性質をもっている。それは、客観的かつ普遍的で、公開可能なものである。
ところが、それに対して、研究とか勉強とかの精神活動は、しばしばもっとも個性的・個人的ないとなみであって、
普遍性がなく、公開不可能なものである、というかんがえかたがあるのである。
(中略)
しかし、いろいろしらべてみると、みんなひじょうに個性的とおもっているけれでお、精神の奥の院でおこなわれている儀式は、
あんがいおなじようなものがおおいのである。おなじようなくふうをして、おなじような失敗をしている。
それなら、おもいきって、そういう話題を公開の場にひっぱりだして、おたがいに情報を交換するようにすれば、進歩もいちじるしいであろう。
(p.8)

研究者は誰もが「自分は個性的」と思っている(が、みんな意外と似ている)というのは思い当たるところがあって苦笑させられる。

面白箇所ー"天才"梅棹ここに在りー

(引用註:メレジューコフスキーの「神々の復活」に描かれているダ・ヴィンチがメモ魔であるところから梅棹もメモ魔になったという話の流れ)
ところで『神々の復活』に感動したのは、わたしばかりではなかった。
わたしには、幾人かのしたしい友人のグループがあったが、みんなつぎつぎにこの本をよんで、それぞれにつよく感動した。
青年たちは、ダ・ヴィンチの偉大なる精神に魅せられて、それぞれのその偉大さに、一歩でもちかづこうとしたのである。

ただ、その接近法は、人によってちがっていた。いまは東京工大の教授になっている川喜田二郎くんなども、そのときのグループの一人だが、
かれはもともと左ききだった。ダヴィンチが左利きだったという事実は、かれを、ダ・ヴィンチにむすびつけるおおきい力となっていたかもしれない。
かれは、『神々の復活』をよんで以来、左手で画をかくのが目立ってうまくなったようだ。
(p.23)

個人的な面白エピソード部分。川喜多二郎って高校・大学で梅棹忠夫と同期で今西錦司門下でマブダチだったというね。
旧制高校→帝大のルートって、こういうやばい相乗効果のピアグループがいくつかあって、バカにできないのである。
(今も開成灘etc→東大京大etcで同じことは起きているかもしれないが)

しかし10年くらい前に謎の(というと失礼だけど)梅田望夫さんのブーム的なものがあって、任天堂の故岩田社長や糸井重里と鼎談したり、なぜだか将棋の観戦記をかいていたりした。
当時10代の私も少し影響を受けて「ウェブ時代をゆく」を愛読したりしていた(そしてそのことをすっかり忘れていた,,,というか黒歴史と認識しているのか!?)のだが、彼が私淑していた梅棹忠夫の同門(?)の川喜田二郎の弟子や孫弟子や曾孫弟子の先生方と仕事をする機会もあったりするので、人生って数奇ですね(何の話だ)

数式をとりあつかうのに、暗算も筆算もそれぞれ特色があるように、思想を開発するにも、そらでやるのと字をかいてゆくのとでは、おのずから特徴がちがっている。それぞれの人の性質やくせにもよるけれど、ことの筋道の透察や、論理の組み立てについては、すくなくともわたしは、文章にかかないで、宙でかんがえるほうがうまくゆくことがおおい。
(p.27)

ここらへんは結構天才と凡人の分かれ道というか、知り合いの知り合い(つまり他人)の某天才数学者は、4次元が頭の中でイメージでき、暗算できるらしい。梅棹忠夫もどちらかというとそのタイプだったのではないか。

で、ここからは完全に推察というか妄想でしかないんだけれど、川喜田二郎ってあんまり頭の中での暗算が得意なほうではなくて、それでいて周りには暗算大好きっ子の梅棹とかもいて、それであんなsystematicなKJ法を生み出してしまったのではなかろうか。
この本と川喜田の「発想法」を両方ともよんでおもうのは、川喜田のほうが工学的、エンジニア的でヒューリスティックな方法を好み、梅棹のほうがより「職人芸」の領域を残したがるということなんだよなぁ

わたしも頭の中で宙で考えるのは得意ではないので、(私怨込みで)暗算モンスターよりも生産性を高めるためのツール作りにいそしんでしまうのである。まあ意外にちゃんと仕事に役立つからいいんだけどさ。

知的生産の技術のひとつの要点は、できるだけ障害物をとりのぞいてなめらかな水路をつくることによって、日常の知的活動にともなう情緒的乱流をとりのぞくことだといっていいだろう。精神の層流状態を確保する技術だといってもいい。努力によってえられるものは、精神の安静なのである
(p.96)

ここらへんがやはり天才っぽいところ。凡人は水路を引いて水を流すのにも一苦労するんだぜ、おやっさん....

第5章「整理と事務」

一見知的生産とはあんまし関係なさそうなこのような事項に一章を割いて、「いかに私は整理整頓のできない人生を送ってきたか」ということを滔々と語っているのが、まず面白い。
苦闘の末に梅棹御大がたどりついたのが、なんの変哲もない「書類をカテゴリごとにファイルにまとめて縦にする」という方法だったのも面白い。

その方法とは、基本的には、
・固有名詞レベルのカテゴリ分け(要するに、「学会関係」ではなく「XX経済学会」などにしておく」)をして、フォルダ(=「口座」)をつくり、処理中の書類を除きフォルダに収納・保存する
・フォルダ名によるアイウエオ順で、キャビネットに収納する
・処理中の書類については、別の仮保管場所(未決箱)をつくる
だけである。

仮保管場所を作るというのは盲点だったようで、以下のように書いている

手紙がきたら、まず要件を処理しなければならないのだ。それがすむまでは、手紙は机の上の未決箱に入れておかねばならない。返事をかくべきものはかく。それがすんだら、返事のコピーと一緒に、ファイルにいれるのである。つぎにその用件のつづきがおこったら、ファイルがものをいう。それに関する過去のいっさいのいきさつが、ファイルにおさめられているのだから。
(p.90)

たぶん下のまとめにのっているようなものを想像すればよいのであろう
GTD式・一般参照ファイルキャビネット管理術! - Togetterまとめ


整理というのは、ちらばっているものを目ざわりにならないように、きれいにかたづけることではない。それはむしろ整頓というべきだろう。
ものごとがよく整理されているというのは、みた目にはともかく、必要なものが必要なときにすぐ取り出せるようになっている、ということだとおもう。

(中略)

整理は、機能の秩序の問題であり、整頓は、形式の秩序の問題である
やってみると、整頓より整理のほうが、だいぶんむつかしい。たとえば、書斎のなかをきれいに整頓することは女中でもできるが、整理することは主人でないとできない。
(p.81)

要するに、何にどこがあるかをしっかりしていればいいよね、という話だが意外とそれができないんだよなぁ。
流罪人生活が終わったら、書類整理用の大きめのスチール棚を買おう(こうやってオシャレ部屋からだんだん乖離していくのである..)

ビジネスの世界と研究の世界との距離について

ざんねんながら、研究活動をはじめ、知的生産活動一般の技術は、
はなはだしく未開発のまま放置されているようにおもわれる。そういうことは個人の内面における深遠な個性的創造活動だから、技術化などはできないのだ、などとおもっているうちに、最も世俗的なビジネスの世界の、平明な技法の進歩に、たちまちおいこされてしまったのである。
今日においては、知的生産は、その技法において、ビジネスの世界にまなばなければならない点が、ひじょうにおおいようにおもわれる(p.94)

これは、心から同感(てか昔からそうだったのか...)。正直いって専門知の多寡以外のところで、研究者(top of topをのぞく)は、おおいに生産効率性の面で遅れをとっている。
これは、個人でやるかチームでやるかというところにも関わっている気がしていて、チームで動く企業だとそこまでtrainedでない労働力をどううまく最終的な知的(にみえる)outputの生産に動員するかっていうことが考えられているから、規格化・標準化の努力が自然に為される。理工系も、院生を動員してチームで何か研究することが多いから、結構考えてる。

人文社会科学の研究者(って括りが雑すぎるが)はあまりそこらへんを考えていないので、論文をかくための標準的な「マニュアル」を作って多少素養のある院生に渡したら、東大教授とか目じゃないほどの生産性を叩き出すのではないか、という分野が確かにある。

その他

・文章をかく方法として「こざね法」という、カード(単語、節、文がかいてある)を論理の筋道や内容の類似度によって、ホッチキスで止めて、見出しをつけて、それをさらに配列する....という方法があるが、これはKJ法の簡易版である。だから「発想法」を読んだほうがいいよ、と言ってしまっているのがまた奥ゆかしいところ。

・天才感が迸りまくってる御大も、自認としては凡人らしい。

(引用註:こざね法の利点について)
文章という点からいって大切なことは、この方法でやれば、だれでも、いちおう論理的で、まとまった文章がかける、という点である。
天成の文章家には、こんな技術はまったく不必要であろう。これは、凡人のための文章術である。

しかし、文章は天才だけが書いておればいいのではない。文章をかく能力を、
失文症や文章アレルギーをおこしている凡人の手にも、とりもどさなければならないのである。
(p.205)

ここらへんの、「いちおう論理的でまとまった文章がかける」状態を担保しておくことへの問題意識は、
なんか下の対談の、宮本茂を彷彿とさせる。
第10回 流れているほうがいい。 - 宮本 茂 × 糸井重里 ひとりではつくれないもの。 - ほぼ日刊イトイ新聞

質問者(糸井の部下):
それは、あれですかね?
宮本さんも糸井さんも
「大きくバケた」という経験が豊富だから、
その経験が乏しい人は、
覚悟を決めてアクセルが踏むことができない、
というようなところがあるんですかね?

糸井:
うーん、でも、小さい規模のことでも
同じことが起こりうるんだよ

宮本:
そうですね。
あの、よく言うことなんですが、
川が淀んでいるのと、川が流れてるのって、
川の大きさは関係ないんですよ。
流れる水の量の話をしたいわけなので。
(中略)
基本的に、どんな川であっても、
深くても浅くても広くても汚くても
「流れているほうがいい」と思う。
だいたいダメなときって、
「流れてない」んですよ。
そういう川をいくつもいくつも見てると、
「あ、これは流れる可能性あるよ?」とか、
そういうことがわかってくるんです。

(中略)
でも、そうですよね?
流れてたら、そこからこぼれたものが
薄くても、濃くても、利益になるんです。
そういう意味で、その企画が「流れてる」なら、
「利益薄くてもいいん違うの?」
という話ができるんです。
逆に、いろんなビジョンが描けたとしても、
まず「流れてない」となにも起こらないので、
利益の話をするまえに、そっちなんですよ。
「ずっと後で、これだけ回収して帳尻が合います」
って言われても、ねぇ‥‥

結論

宮本茂ってやっぱ神だわ。
まぁいろいろもっと深い読み方はあるんだろうが、これくらいで終わりにしとこう。仕事もあるからね。

Enjoy!!

「知的トレーニングの技術」+「アイディア大全」

執筆・リサーチの方法論がいまいちイケてないんじゃないか、
というのが最近の自分自身の疑念としてあるので、読んでみた。
忘却の前にちょいと書き残しておく...

ひとこと感想

「アイディア大全」

アイデア大全――創造力とブレイクスルーを生み出す42のツール
・ネット上では有名なブロガー、読書猿さんの著書。いろいろな方法論が載っていて大変に有益なブログ。
・ただし、レビューで絶賛されている割には使い勝手が...という印象。
・もちろんこの使い勝手の悪さは承知して、この形で執筆されているのだろう。
・(問題設定・仮説提示・分析・結論提示という)知的生産工程を
 ワンストップで最終成果物まで仕上げることが生業の人(自分含む)が読むと、
 (料理の全体工程ではなく)下処理の方法やソースの作り方ばかりが載っているような、
 片手落ちのレシピを提示されている気分になるのでは。
・部分工程の改善案集なので、全体工程にうまく取り入れられる人向けの本である。
・個人的には「バグリスト」「コンセプト・ファン」「仮定破壊」「さくらんぼ分割法」「等価変換法」らへんを意識的に作業フローに入れて中間成果物をデザインしとくともう少し、執筆のスピードが上げられるんだろうな。
・というか「発散」と「収束」をうまく分けられてないんだよなぁ私は。
・この本に対して「こんなことみんなやってるじゃん」という批判もあるが、意外と基礎技術と基礎技術として認識して研磨するのって大事やない?
 

「知的トレーニングの技術」

知的トレーニングの技術〔完全独習版〕 (ちくま学芸文庫)
・「アイディア大全」の著者がブログでプッシュしていたのに乗って購入。
・前菜とデザートは若干癖あるが、メインディッシュの部分はかなり良い本である。
・「知的生産過程のモデル」(p.111)は自作の執筆工程と、かなり符合していて
 驚嘆すると同時に少し笑ってしまった。似たこと考えるひとはどの時代にもいて面白いなぁ。
・「知的生産過程のモデル」の12工程をみていくと、
 「#6:構想(細部まで説明可能な概念図、思考の地図、観念の設計図を作成する段階)」から
 「#7:構成(観念図を小分けした「目次」につくり変えて、面を線に変換する段階)」までの流れが、なんというかKJ法AB型(川喜多「発想法」参照..)と同じ思想を感じる。
・「蒐集」を分析・研究の基礎作業として重視するというのは目から鱗である。というかこれが個人的この本から得られた一番の示唆。以下、いくつか示唆的なところを引用。

あつめることは分析の第一歩だ。物でも情報でもいいが、あつめているうちに知らず知らずにそれについての鑑識眼が身についてくる(p.119)

ロラン・バルトのモード研究について)
これは、果てしない蒐集作業に一定の枠を与えて、研究対象の体系性を確保するという方法の好例で、
この枠づけが逆に、テーマを明確に限定することにもなっていることがわかるだろう。
だから、どこまでも趣味にとどまる蒐集ならともかく、知的生産を目標にした蒐集はなんらかの体系性・全体性をあたえる必要がある(p.122)

・個人的に目標としている某K先生も蒐集魔という話を耳に入れたことがある。要するにケース × 変数のマトリックスを蓄積していく、という作業が知的生産の「発散」のフェーズに(無論「収束」にも効いてくるが...)非常に有益であるということである。ここがおろそかだなぁ自分は。


ということでこれから何をするか

・また自分の執筆工程を少し変えていく。
・中間成果物をどうするかということについて、蒐集→発散→収束という段階を認識しながらテンプレートを改訂したい。
・人に説明できるように、進捗報告資料とも密連結にしておきたいところ。

Macで、回帰系の手法の結果を、Excelに貼るだけの状態で出力する関数

俺しか得しない関数シリーズ。要dplyr。

※主な今後の改善点を備忘のために、冒頭に書いておく
✔︎ glmやlmerへの対応を
✔︎ モデル指標のところ、小数点桁を指定可能に
✔︎ 変数をmodelごとに差し引きした時に、表側の変数名とCoefやS.E.の係数推定値の垂直位置がずれるのを直す(今は手動。そんなにめんどくさくないからね)

Motivation

・めっちゃRegression Tableつくらなあかんねんけど、いちいち整形するのめんどい。
・でも私はTex族じゃない→texregとかstargazerとかはぴったりこない。ExcelとかいうMicrosoft様のむっちゃ使いにくい神ソフトで表を整形したい
・でもたくさんあるRegressionのコードごとに関数定義するのはダサい

Source Code

## 便利関数定義 ##
# 引数①:  lm()関数の結果を格納したlist
# 引数②: 数値間の区切り文字(デフォルトはタブ区切り)
# 引数③: 回帰係数をExp()したものを表示するか否か ※対数変換済所得などを従属変数に指定したとき用
# 引数④: fileの出力場所  ※デフォルトはDesktopに"test.txt"という名前で出力する
# 引数⑤: どの関数を使ったか。Defaultはlm() # lm, clm(順序ロジット, ordinalパッケージ), rq(分位点回帰、quantregパッケージ)に対応( As of 17/6/27)

reg_to_excel <- function( res_list , blk = "\t" , exp_coef = F , file_name = "/Users/Ronri_Rukeichi/Desktop/test.txt", reg_function = "lm" ){

def_funcs <- c("lm", "rq", "clm")

if(!reg_function %in% def_funcs ){
stop("指定された回帰関数は未対応です, clm or lm or rqのどれかを指定すべきです")
} #if

info_list <- lapply( res_list , function( rslt ){

#実装上の注意 ,,,, (A)回帰係数系(独立変数に付随する情報)と、(B)モデル指標系、は別個にみたほうがよいので、別の情報としてかえす
if( reg_function == "lm" ){
# - - -Case1: lm関数(通常のOLS)- - -#
# summary objectを取得
smr <- summary(rslt) 

## 回帰係数、S.E.を取得
coef_arr <-  coef(smr)[,1] #回帰係数
se_arr <- coef(smr)[, 2] #標準誤差
pval_arr <- coef(smr)[, 4] #p値
var_name_arr <- rownames(coef(smr)) #変数名
coef_df <- data.frame(Var = var_name_arr , Coef = coef_arr, S.E.= se_arr  , Pval = pval_arr )  #DF化

## Model指標を取得 ### 
N <-  length(smr$residuals) # 分析ケース数
nparam <-  slot(logLik((rslt)),"df") #number of parameters
val_logLik <- as.numeric(logLik((rslt))) #対数尤度 
val_AIC <- AIC( rslt) 
val_BIC <-  BIC( rslt)
r_squared <-  summary(rslt )$r.squared
adj_r_squared <- summary(rslt )$adj.r.squared
cri_names <- c("N" , "Number of Parameters" , "log-likelihood" , "AIC" , "BIC" , "R Squared" , "Adj. R Squared")
cri_values <- c( N , nparam,  val_logLik , val_AIC , val_BIC , r_squared , adj_r_squared )

#-- convert to data frame 
cri_df <- data.frame( Var = cri_names , Value = cri_values )

## Tableに記載する情報を返す ##
return(list(  Coef = coef_df ,  Model = cri_df ) )  #

}else if( reg_function == "clm"){
#- - -Case2: clm関数("ordinal" package , ordered logit/probit )  - - -#
# ordered logit modelの場合も同様に実装する..

#--Summary Object --
smr <- summary(rslt) 

# - - Coefに関する情報行列は、lmの場合と同様の実装- -
coef_arr <-  coef(smr)[,1] #回帰係数
se_arr <- coef(smr)[, 2] #標準誤差
pval_arr <- coef(smr)[, 4] #p値
var_name_arr <- rownames(coef(smr)) #変数名
coef_df <- data.frame(Var = var_name_arr , Coef = coef_arr, S.E.= se_arr  , Pval = pval_arr )  #DF化

#- - -Model Information Matirx - - -#
N <-  smr$nobs # 分析ケース数
nparam <-  slot(logLik((rslt)),"df") #number of parameters
val_logLik <- as.numeric(logLik((rslt))) #対数尤度 
val_AIC <- AIC( rslt) 
val_BIC <-  BIC( rslt) 

cri_names <- c("N" , "Number of Parameters" , "log-likelihood" , "AIC" , "BIC" )
cri_values <-  c( N  , nparam , val_logLik , val_AIC , val_BIC ) 

#- - -Convert to Data Frame - - -#
cri_df <- data.frame( Var = cri_names , Value = cri_values ) 

## Tableに記載する情報を返す ##
return(list(  Coef = coef_df ,  Model = cri_df ) )  #

}else if( reg_function == "rq"){
#- - -Case3 : rq関数(分位点回帰モデル , "quantreg" package ) - - -#


##  出力イメージ(他の回帰系との相違点)
# ・OLSやGLMの場合はregression tableに記載するときは, 「Model XX」の下に各情報が並ぶ感じになるけど、
#  Quantile Regressionの場合は、「Model XX」の下に 「YY%点」が併記される形になるので、一階層分深めにdata構造を作っておく

##--- summary object --- ##
smr <- summary( rslt ) 

coef_df_list <- list()
cri_df_list <- list()

for( i in 1: length( smr ) ){
## 回帰係数周りの情報 ##
#print(smr)

coef_arr <- ((smr[[i]])$coefficients)[,1]
se_arr <- (smr[[i]]$coefficients)[,2]
pval_arr <- (smr[[i]]$coefficients)[,4] 
var_name_arr <- rownames((smr[[i]]$coefficients))
coef_df <- data.frame(Var = var_name_arr , Coef = coef_arr, S.E.= se_arr  , Pval = pval_arr )  #DF化

coef_df_list[[i]] <- coef_df

## - - -Model Information --- ##
N <- nrow( rslt$residual)
nparam <- slot( logLik(rslt),"df")
val_logLik <- logLik(rslt)[i]
val_AIC <- AIC(rslt)[i]
val_BIC <-  -2 * val_logLik + log( N ) * nparam
val_tau <- smr[[i]]$tau
cri_names <- c("N" , "Number of Parameters" , "log-likelihood" , "AIC" , "BIC", "Quantile" )
cri_values <-  c( N  , nparam , val_logLik , val_AIC , val_BIC,  val_tau) 

#- - -Convert to Data Frame - - -#
cri_df <- data.frame( Var = cri_names , Value = cri_values ) 
cri_df_list[[i]] <- cri_df

} ##for

## Tableに記載する情報を返す ##
return(list(  Coef = coef_df_list ,  Model = cri_df_list ) )  #

} #if 回帰関数別
} ) #lapply

###====: info_listからテキストに変換:=== ###
## Quantileの場合が難しい → とりあえず、tauの下に各モデルを配置するような感じにしとく, 


# 関数定義: 文字列のvectorをk行空きにする関数
mix_blank <- function( str_arr ,k=1 , blank_str=" " ){
return(as.vector( matrix(c( str_arr , rep( blank_str , length(str_arr) * k  ) ) , nrow= (k + 1) , byrow=T ) ) )
} #function 

# - - 有意確率→Symbolの変換関数
pval_mark <- function( pval){
return(ifelse( pval >= 0.10  , " " , ifelse( pval  >= 0.05 , "†" , ifelse( pval >= 0.01 , "*" , ifelse( pval >= 0.001 , "**" , "***" ) ) ) ))
} #function


#整形用の関数を定義 
#・標準誤差は[ ] で囲んで回帰係数の下に表示. 
#・カスタマイズできるようにしてもいいが、とりあえず後回し。
library(dplyr) #dplyrパッケージを読み込む

coef_to_txt <- function( coef_df, exp_flag = F,  round_digit = 4  ){
#必要情報だけ抜いてくる
info_df <-  dplyr::select( coef_df, Coef, S.E., Pval)

# S.E.を [ ] で囲んでCoefの下にもってきて一列にする
se_str <-   paste("[", formatC(round(info_df$S.E. , round_digit ) , format= "f" , digits = round_digit) , "]" , sep="")
coef_str <- formatC( round( info_df$Coef ,  round_digit ) , format="f" , digits = round_digit )
est_str <-   as.vector( matrix( c( coef_str , se_str ) , byrow=T , nrow = 2 ) )

# 有意確率を表すsymbolの文字列生成 
p_smbl <-  pval_mark( info_df$Pval) 
p_smbl_arr <- mix_blank(p_smbl , k= 1 ) #1行空きにする

# expのCoef乗を返す(Flagに応じて)
if( exp_flag == TRUE ){
exp_beta <-  formatC( round( exp( info_df$Coef ),  round_digit )  , digits = round_digit , format="f" )
exp_beta_str <- mix_blank( exp_beta, k = 1 )  #一行空きにする。

# 行列型にして返す
return( cbind( est_str, p_smbl_arr , exp_beta_str) )

}else{
#行列型にして返す
return( cbind( est_str, p_smbl_arr ) ) #
} #if
} #function( coef_to_txt)

# 簡易関数, Model Criteria version
mdl_to_txt <- function( model_df , exp_flag=F){
cri_values <- formatC( model_df$Value  , format="f" , digits = 3 ) 
## exp(回帰係数)を表示するか否かで、何列空きにするかを変える ##
if( exp_flag ){
ret_mat <- cbind( cri_values , rep( " " , length(cri_values ) ),rep( " " , length(cri_values ) ) )
}else{
ret_mat <- cbind( cri_values , rep( " " , length(cri_values ) ) )
} #if
return(ret_mat ) 
} # function 

# 行数が違う行列をcbindするときに、数が少ない方を空の文字列で埋める関数
cbind_v2 <- function( mat1 , mat2 , blank_str = " "){
n1 <- nrow( mat1 ) 
n2 <- nrow( mat2 ) 

if( n1 > n2 ){
#第1の行列のほうが、第2の行列よりも行数が長い場合..
add_mat <-  matrix( rep(" " ,  ncol(mat2 ) * (n1- n2 )), ncol= ncol(mat2) )
# - -
mat2 <- rbind( mat2 ,add_mat ) 
ret_mat <- ( cbind( mat1 , mat2 )  ) 
}else if( n1 < n2 ) {

add_mat <-  matrix( rep(" " ,  ncol(mat1 ) * (n2- n1 )), ncol= ncol(mat1) )
# - -
mat1 <- rbind( mat1 ,add_mat ) 
ret_mat<- ( cbind( mat1 , mat2 ) )

}else if( n1 == n2 ) {
# なんもしない
ret_mat <- cbind( mat1 , mat2 ) 
}

return( ret_mat )  #統合した行列を返す。
} #function

##- - - 先に外枠を完成させてから、中に埋めるものを完成させる方式- - - ##
#- - とりあえず普通のOLSとかordered logitとかの、シンプルな場合から考えていく - - -#

if(reg_function %in% c( "lm" , "clm")){

##- - -通常パターン- - - ##
## ====表側の情報 ==== ##
# 変数名
var_names <- as.character( info_list[[length(info_list)]]$Coef$Var )  
# モデル指標の名前
model_info_names <- as.character( info_list[[length(info_list)]]$Model$Var )  

#- - 行列形式に変換してk × 1の行列で保存,, 
# 変数名に関しては一行空きにする。 


# 表側の表示テキストを格納した行列
left_side <-  matrix(c(as.vector( matrix(c(var_names , rep(" ",length(var_names))), nrow=2,  byrow=T)), model_info_names) ,ncol=1)

## ==== 表頭の情報 === ##
 if( exp_coef  == T){
title_arr <-  c("β", " ", "Exp(β)" )
}else{
title_arr <-  c("Coef." , " " ) 
}
 #回帰係数のexp()を表記するか(引数③)によって2列or3列が変わる。
model_name_arr <- paste( "Model" ,1:length( info_list )  ,sep = "" ) #
#print( title_arr)
#print(model_name_arr)

# 表頭の表示テキストを格納した行列
upper_side <- matrix( c( mix_blank( model_name_arr , k = ifelse( exp_coef ==T , 2 , 1 ) ) , rep(title_arr,length(res_list )  )) , byrow = T , nrow= 2)

## ==== 表のcontents(回帰係数の推定結果) ==== ##
tbl_content <- NA #初期化
lower_side <- NA #初期化


lapply( info_list ,  function( info_elm  ){
#print(coef_to_txt(info_elm$Coef, exp_flag = exp_coef))
if( is.na( tbl_content  ) ){
#初回の処理
tbl_content <<- coef_to_txt(info_elm$Coef, exp_flag = exp_coef)
lower_side <<- mdl_to_txt( info_elm$Model,exp_flag = exp_coef) 
} else{
# 2回目以降の処理
tbl_content <<- cbind_v2(tbl_content , coef_to_txt(info_elm$Coef , exp_flag = exp_coef)  ) #横につなげていく
lower_side <<- cbind( lower_side ,  mdl_to_txt( info_elm$Model,exp_flag = exp_coef)  )
} #if
}) #lapply

## ここまで生成した文字列行列を統合
ret_mat <-  cbind( rbind( matrix( c(" " , " ") , ncol=1 ) , left_side ) , rbind( upper_side , tbl_content , lower_side ) )

#return(ret_mat) 


}else if(reg_function ==  "rq"){
##- - -Quantile Regressionの場合  - - -##

info_list2 <- list()
#- - 入れ物だけつくっておく
for( i in 1:length(info_list[[1]]$Model) ){

info_list2[[i]] <- list()
} #for

cnt <- 0


lapply(info_list , function(info_elm){
cnt <<- cnt + 1 #インクリメント
#まずCoefの情報を、順番に、格納していく
coef_cnt <- 0 
lapply(info_elm$Coef  , function( coef_info){
coef_cnt <<- coef_cnt + 1 
#print(">>>> <<<<<")
#print(coef_cnt)
info_list2[[coef_cnt]][[cnt]] <<- list()
info_list2[[coef_cnt]][[cnt]][["Coef"]] <<- coef_info


} )#lapply Coef

#print(info_list2)
# 次はModelの情報
model_cnt <- 0 
lapply(info_elm$Model  , function( mdl_info){
model_cnt <<- model_cnt + 1 
info_list2[[model_cnt]][[cnt]][["Model"]] <<- mdl_info
} )#lapply Coef
}) #lapply info_list



ret_mat_list <- lapply( info_list2 ,function(info_list){
## ====表側の情報 ==== ##
# 変数名
var_names <- as.character( info_list[[length(info_list)]]$Coef$Var )  
# モデル指標の名前
model_info_names <- as.character( info_list[[length(info_list)]]$Model$Var )  

#- - 行列形式に変換してk × 1の行列で保存,, 
# 変数名に関しては一行空きにする。 

# 表側の表示テキストを格納した行列
left_side <-  matrix(c(as.vector( matrix(c(var_names , rep(" ",length(var_names))), nrow=2,  byrow=T)), model_info_names) ,ncol=1)

## ==== 表頭の情報 === ##
 if( exp_coef  == T){
title_arr <-  c("β", " ", "Exp(β)" )
}else{
title_arr <-  c("Coef." , " " ) 
}
 #回帰係数のexp()を表記するか(引数③)によって2列or3列が変わる。
model_name_arr <- paste( "Model" ,1:length( info_list )  ,sep = "" ) #
#print( title_arr)
#print(model_name_arr)

# 表頭の表示テキストを格納した行列
upper_side <- matrix( c( mix_blank( model_name_arr , k = ifelse( exp_coef ==T , 2 , 1 ) ) , rep(title_arr,length(res_list )  )) , byrow = T , nrow= 2)

## ==== 表のcontents(回帰係数の推定結果) ==== ##
tbl_content <- NA #初期化
lower_side <- NA #初期化


lapply( info_list ,  function( info_elm  ){
#print(coef_to_txt(info_elm$Coef, exp_flag = exp_coef))
if( is.na( tbl_content  ) ){
#初回の処理
tbl_content <<- coef_to_txt(info_elm$Coef, exp_flag = exp_coef)
lower_side <<- mdl_to_txt( info_elm$Model,exp_flag = exp_coef) 
} else{
# 2回目以降の処理
tbl_content <<- cbind_v2(tbl_content , coef_to_txt(info_elm$Coef , exp_flag = exp_coef)  ) #横につなげていく
lower_side <<- cbind( lower_side ,  mdl_to_txt( info_elm$Model,exp_flag = exp_coef)  )
} #if
}) #lapply

## ここまで生成した文字列行列を統合
ret_mat <-  cbind( rbind( matrix( c(" " , " ") , ncol=1 ) , left_side ) , rbind( upper_side , tbl_content , lower_side ) )

return(ret_mat) 
}) #lapply info_list


#return(ret_mat_list) 


#内容をタテにつなげる
ret_mat <- NULL
lapply( ret_mat_list , function(x){
ret_mat <<- rbind( ret_mat , x ) 
}) #lapply

#return(ret_mat)
} # IF


# 最後にfileに出力する。
write.table(ret_mat , sep=blk , file=file_name , quote=F , row.names = F  , col.names=F )
return( info_list ) 
} #reg_to_excel

How to Use

例えばOLSの場合。

#推定
ols_res1 <- lm( ols_fml , data = test_data  )
ols_res2 <- lm( ols_fml , data = test_data  )
ols_res3 <- lm( ols_fml , data = test_data  )

# 推定結果をlistにまとめる
ols_res_l <- list( ols_res1 , ols_res2,ols_res3) 

# 上記関数により出力
reg_to_excel(ols_res_l , reg_function= "lm", file_name  = "/Users/Ronri_Rukeichi/Desktop/ols_reg.txt" , exp_coef = T )

できあがり

出力したtxtファイルを全コピしてExcelにpasteするだけで
f:id:ronri_rukeichi:20170629112024p:plain

あらふしぎ!


Enjoy!!

至言

◆Revolution

明治安田生命J2リーグ 第20節 長崎戦前々日 監督会見|ニュース|名古屋グランパス公式サイト


─青木選手、杉森選手はこれまでのシーズンで出場機会もなかなかありませんでしたが、どういう部分に成長の可能性を感じられるのでしょうか?

1つは、彼ら2人は人にないものを持っています。スピードであったり、しなやかさです。そしてもう1つは、その分これまであまりサッカーを勉強してこなかったということです。それを1個ずつ、最初から2つをやると分からなくなるので1個ずつ、こちらも我慢ですが何度もやれば、彼らの中でも自分でやるようになっていきます。ただ、まだまだ足りているわけではありません。才能とは全員の中に埋まっているもので、あとは頭の中がフリーになっているかどうか、向かってこれるかどうか、人のせい物のせいにせず自分に期待しているかどうか、それを教えると若い選手はどんどん伸びてきます。これはベテランでも同じですが、扉を開けられるか、開けたらまた違う扉が出てきます。これまでは開けようとしていなかった、開けようとしているがどう開けるのか分からなかった。それが徐々に分かるようになってきた


お前は頭の中がフリーになっているか?

「 1対21 」 のサッカー原論 「 個人力 」 を引き出す発想と技術 p.96

指導時には、「こうやって蹴れ」と強要する必要はありません。
指導者と選手は違うので、何が正解なのかは、選手が自分で見つけるしかないのです。

ですから、「こういう結果を出してみなさい」という教え方で、
自分で考えられるように持っていくとよい
と思います。

人を導くときは、細かいHow toではなく中間成果物で誘導しろ!


Enjoy!!

6/21 朝

◆体調まわりのlog

6/20 夜

体重:67.0kg(たしか23時頃に測定)

トレーニング:

腹筋ローラー 10× 3 + 5 × 1 セット

プッシュアップバー 10× 3 + 5 × 1 セット

スクワット(負荷なし):50回

 

6/21昼

体重:66.8kg


心を乱さず漸進してゆくことが大事に思う。
記録やトレーニングを2ヶ月くらい続けて行った時に、どのような変化が現れるのか。

 

◆将棋

ウォーズ

3戦を朝のうちにこなす。

1戦目 vs 初段(通算勝率0.626, 得意戦法△33角型空中戦法)

角換わりから右玉。相手の方は62金型から腰掛け銀を経て右玉へ。
ゆったりと受け潰され、歩切れになったところでカウンターをくらい完敗。
香車を上ずらされた後に角を打ち込まれ、無理やり龍をつくられたが、そのタイミングで攻め合いにいくべきだったか..

2戦目 vs 初段(通算勝率0.562 , 得意戦法: 対振り持久戦)

流れが悪いと感じたので、珍しく先手番だが四間飛車にする。
早めに角道を止められたので、振り飛車穴熊に。
銀冠の角頭を狙い先攻するも、駒損で苦しい形に。
しかし今度は相手が馬を切ってきたことで玉頭に嫌味をつけて逆転。
逃げ切り方針だったら負けていたか。

3戦目 vs 初段(通算勝率 0.616, 得意戦法:▲4五歩早仕掛け)

後手番だったのでいつも通りKKS。
棒銀を見せてきたので32金型で対応。
無理気味な仕掛けに対し、相手の居玉を咎めてカウンターから短手数で快勝。
今回は急戦だったが、とりあえずはKKSで相手が棒銀できたら32金型でよい、という結論でいいのだろうか。
実急戦になって、発展の仕方が難しいが銀上がって桂馬跳ねて一段飛車くらいか。

新兵器?

増田四段著、「堅陣で圧勝!銀冠穴熊」を買う。
段位者とやると対振り持久戦でもうまくいかない場合が多い気がする(終盤力の問題ももちろんある)
ので、最新の戦術をinputしたい。

増田4段、この本の著者インタビューをみても、
なかなか面白い人物のようである。応援したい。

Q8、好きな将棋の格言は?
「特にないです」

――ないんですか(笑)?
「ええ、格言とか、あまり学んでこなかったのでよく知らないんです」

――「玉の早逃げ八手の得」とかあるじゃないですか。格言を軸に考えたことがない、ということでしょうか。
「そうです。格言、意味ないですよ。場合によるじゃないですか。最近は玉と飛車が接近したほうがいいこともありますし。柔軟な考え方ができなくなります」

とくにここがいい。セオリーも時と場合によるし、
うまくいく条件・前提を常に考えておくということは、大事なこと。


 

17/6/19 夜

◆結局はフィジカルだよな?

体重計測

22:43計測 67.2kg(体脂肪率 25.0%)

トレーニング開始

プッシュアップバー&腹筋ローラーを購入。
これはやばい。腹筋が踊り出しそう。そしてトレーニング量も日々記録していきたい。

きょうは
・プッシュアップバーによる腕立て 10 × 3セット
・腹筋ローラー 10 × 3セット
である。


腹筋ローラーの使い方!初心者編

プッシュアップバーで大胸筋を鍛える!Tシャツの似合う胸板を作る効果的なトレーニング方法。

Enjoy!!

17/6/19

◆体重

17/6/19 7:45測定 65.8kg
排泄前後でだいたい0.6kgくらい違う。条件を整える必要あるかも。
自宅でのトレーニング器具がもう少しで届くので、トレーニング記録と体重の推移、できれば(近似でよいので)食べたものとカロリーの記録を毎日コツコツつけていくといいのでは。

◆将棋

千田六段@将棋フォーカス


異色の棋士千田翔太

動画で8:02〜あたりのところ、コンピュータ同士の棋譜を(前後の指し手=線を参照せずに)局面=点で形勢判断するトレーニングについて紹介。
もととなる棋譜は、「手入力で1,0000局面くらい入力した」とのこと。

細かいことを膨大にやるのが私のモットー

との言葉は、どの世界にも通ずるものだ。
もうちょっと言葉を足せば「細かいことを膨大に、素早く、的確に道筋付けてやる」ことが大事だろう。

矢倉左美濃急戦

これまでは見ようみまねで将棋ウォーズで使ったりしていた(それで格上の相手に一発入れる原動力にはなっていたが..)斎藤七段の本を買った。
常識破りの新戦法 矢倉左美濃急戦 基本編 (マイナビ将棋BOOKS)

46角型による対抗策に対して、いくつかの左美濃側の対応を解説してくれていて、なかなかの親切設計。
これまでは83飛型を使っていたのだが、これを選択するのは相手に正しく指されると難しいらしい。
これからは63金型でいこうと思う。

ただ、実戦的には(そこまで高い棋力同士の戦い出ない場合は尚更)、33角を上がらないと横歩を取られる場合が多いので
そのパターンが解説されていないのは片手落ち感がある。ただし、そこは次作できちんとカバーするとのこと...