チラシの裏の落書き日記

統計とか,研究とか,日常についての備忘録的なもの。

考えることのヒント

適切な思考を展開するために、いくつか必要となる要素が存在する。それは、言葉の定義、前提、根拠だと思われる。

 

まず、言葉の定義を明確にすること。これにより、用語の境界を明確にできる。言葉を定義しないと、主題のズレや言葉の用法のズレに気がつくことができない。

 

さらに、議論の前提としてどのような状況を設定するのかを明示的に述べることが必要となる。言葉の定義とも重なるが、必要な状況設定、仮定を示さない限り具体的な議論を行うことは難しい。

 

推論を行うための根拠なく、「思われる」、「考えられる」のみで話を展開しても読者の納得は得られない。レゴブロックを組み合わせるように、1つ1つの推論に客観的な根拠や論拠をつけることで、確実な議論を展開することが出来る。

HHKBをWindowsで使用するときにMac風のキーバインドにする

以下のページから引用

qiita.com


ポイントは次の部分:
Google日本語入力のプロパティを開き、「一般」タブの「キー設定」に「キー設定の洗濯」という項目があると思います。ここで「MS-IME」を洗濯した上で横の「編集」ボタンを押します。

この中の「モード: 直接入力, 入力キー: Henkan」のコマンドを「IMEを有効化」にします。さらに、「モード: 入力文字なし, 入力キー: Muhenkan」のコマンドを「IMEを無効化」にします。”


これで,WindowsでもMac風のキーバインドを使用できるので,快適に文字入力ができる。

Wordめも(1)

1ページあたりの設定について。
1行の文字数,1ページあたりの行数の競って地には,形式→文書のレイアウトから設定すること。

後ほど追記すること。

スタイルは使わないとシヌ。

最高の初期値職人を目指して

潜在クラス分析(有限混合モデル)やら,k-meansとかいろいろと初期値に依存する分析するがある。

また,Latent variableモデリングではEMアルゴリズムを使った最尤推定を行うことが多いが,複雑なモデルになるほど解が収束しないこともしばしばある。
とくに,因子分析と潜在クラスを組合せた場合や,いわゆるGrowth mixture modelなどは収束しないだけでなく,局所解のオンパレードである。
そんな時に,いい感じの初期値を設定する方法について,まとめておく。

  1. モデル全体を最小二乗方による推定がうまくいくかを確認する。

上手くいけば,その解を初期値として分析を行う。だめであれば次へ。

  1. 一度にモデルを推定するのではなく,部分的に推定する。

このときキチンと収束することを確認する。推定方法はなんでもいい。

  1. すべての部分モデルを推定する。

因子分析を含んでいるのであれば,因子得点を推定して,それを顕在変数として分析する。たとえば,growth mixtureモデルの切片,傾き得点など。

  1. これらの解を初期値として,使って全体のモデルを最尤推定する。
  2. これでもだめなら,ベイズ推定で。

ベイズ推定をした場合にも,事後分布が収束することなどをキチンと確かめる必要がある。

  1. その他関連する話題。

構造パラメータの段階推定について。
測定モデルを推定して,測定パラメータを固定して,潜在変数得点を推定する。
その潜在変数得点を使って,構造パラメータを推定する。この構造パラメータは一致推定量であることが示されている(光永・星野・繁桝・前川, 2005;
ci.nii.ac.jp
)。
段階推定をすることはあまり無いかもしれないが,知っておいて損ではない話題かと。


基本的には,部分的に分析してみてそれを初期値にするという戦略が重要。
初期値の指定の方法については,分析ソフトによってさまざまなので,使っているソフトのマニュアルを参考にすること。

研究について思うこと。

「研究とは何か」ということについて。

研究とはどんなゲームか。
分野にとって解く事ができる,価値のある重要な問題に効率的に解を与えるゲーム。

  1. 人を納得させればよい
  2. ゴールの見極めが大事。
  3. 報告はフォーマットに則って行う。

ルールをキチンと理解することがゲームを上手く進めるコツ。

list操作めも

Rのリスト操作について改めてまとめる。
特に,purrrなどを用いた操作を理解すること。

purrrの使い方についてのページ
purrr: ループ処理やapply系関数の決定版 - Heavy Watal
Hadley神のListについてのページ
Lists · R for Data Science

forループ的なlapplyやらmapの使い方が便利。
forループを使う場合には,

df <- 
df <- data.frame(
  a = rnorm(10),
  b = rnorm(10),
  c = rnorm(10),
  d = rnorm(10)
)

temp <- numeric(length(df))
for(i in 1:length(df)){
temp[i] <- mean(df[[i]])
}
temp

などと事前に結果を入れるオブジェクトを容易しないといけない。
一方,lapplyやsapplyを使うと,わりと簡潔に書ける。

lapply(df, mean)
sapply(df, mean)

purrrパッケージのmapなどはlapplyを今風に処理するためのもの。
map_dfなどは型を指定して,結果をベクトルで返すもの。結果はベクトルなので注意。

library("purrr")
map(df,mean)
map_dbl(df, mean)
map_df(df, mean)

さらに,mapやlapplyをforループ的に使うこともできる。これは言われれば納得だが,知らないと確かに書けない。今後使って行きたい。

# for loop的な使い方
map(1:3, ~df[,.])
map(1:5, runif) 

また,特定の条件を満たす要素に関数を適用する,map_ifとmap_atも地味に便利。

# 0より大きい要素に対して,なんか処理をする。
-2:2  %>% map_if(.,.>0, as.factor)

# 部分的に適用して,残りのリスト全体を返す。
? map_if
iris %>% map_if(is.factor, as.character) %>% str()
# 全部数値
mtcars  %>% str()
# 1,4,5列画文字に
mtcars %>% map_at(c(1, 4, 5), as.character) %>% str()

purrrパッケージにはまだ良くわかってない使い方があるので,今後もまた調べていきたいところ。

Rの関数のソースコードなど見たいときの方法

一番有名な,関数名をタイプするものでは見れないものについて。
あまり日本語の記事が無いようなきがしたので,メモを残してておく。

library("Matrix")
Matrix
# Matrix関数の中にある謎の関数。このままだとエラーが返ってくる。
spV2M
# コロン3つなのがポイント
Matrix:::spV2M
# あるいは以下の関数を使うと中身がみれる。
getAnywhere("spV2M")
untar(download.packages(pkgs = "Matrix", 
                  destdir = ".",
                  type = "source")[,2])

とすると,作業ディレクトリにパッケージがダウンロードされてuntarされて中身を見ることができるようになる。
srcフォルダにC++ソースコードなどがあるのでみてみること。

Rの組み込みのプリミティブな関数についてはpryrパッケージのshow_c_souceなんかで見れるらしい。

このページが非常に勉強になる。
stackoverflow.com