有志のための統計学メニュー考、管理編(改)
# 入力ファイルは、各行の第1列に気になる用語、 # 第2列以降、任意の列数で、第1列と関連する用語を記載 # タブ区切り my.knowledge.graph <- function(file,from=NULL,to=NULL,target.date=NULL,target.node=NULL,max.edge=NULL,alpha=1){ library(igraph) tmp <- as.matrix(read.table(file,sep="\t",fill=TRUE)) dates <- as.numeric(tmp[,1]) if(is.null(from))from<-min(dates) if(is.null(to))to<-max(dates) targets <- which(dates >= from & dates <= to) d <- tmp[targets,-1] # ノードとしてのユニークを取る u.d <- unique(c(d)) # 入力データをユニークノードIDで表す d.id <- d null.id <- which(u.d=="") v.label <- c() for(i in 1:length(u.d)){ d.id[which(d==u.d[i])] <- i v.label[i] <- u.d[i] } # エッジリストを表す行列を作る e <- matrix(0,0,2) for(i in 1:length(d[,1])){ if(length(d[i,]) > 1){ for(j in 2:length(d[i,])){ if(length(null.id)>0){ if(d[i,j]==""){ }else{ e <- rbind(e,c(d[i,1],d[i,j])) } } } } } # 入力ファイルはひたすら思いつくままに書くので、エッジ重複が出る # それを省く e.uniq <- unique(e) e.weight <- rep(0,length(e.uniq[,1])) for(i in 1:length(e.uniq[,1])){ e.weight[i] <- length(which(e[,1]==e.uniq[i,1] & e[,2]==e.uniq[i,2])) } selected.e <- 1:length(e.weight) if(is.null(max.edge)){ selected.e <- which(e.weight >= quantile(e.weight,1-alpha)) }else{ sort.w <- sort(e.weight,decreasing=TRUE) tmp.max.edge <- min(max.edge,length(e.weight)) tmp.w <- sort.w[tmp.max.edge] #print(tmp.w) selected.e <- which(e.weight >= tmp.w) #print(selected.e) } #print(e.uniq[selected.e,]) library(igraph) # 無向グラフオブジェクトにする g <- graph.edgelist(e.uniq[selected.e,],directed=FALSE) E(g)$weight <- e.weight v <- V(g)$name # ノードの色を付ける col <- rep(rgb(0.3,0.3,0.3,alpha=0.3) ,length(v)) if(!is.null(target.date)){ # ターゲットノードの文字列を指定して、そのノードの色を変える tmp.v <- which(dates[targets]==target.date) col[which(v %in% d[tmp.v,1])] <- rgb(1,0.3,0.3,alpha=0.5) #print(dates) #print(dim(d)) #print(tmp.v) } if(!is.null(target.node)){ col[which(v %in% target.node)] <- rgb(1,0.3,0.3,alpha=0.5) } e.w <- E(g)$weight #e.w.2 <- e.w #g2 <- g #E(g2)$weight <- e.w-1 #e.w.3 <- as.numeric(e.w.2 > 0) plot(g,vertex.color=col,edge.width = e.w) } #my.knowledge.graph("test.txt") my.knowledge.graph("統計基礎勉強会.txt",target.node="サポートベクターマシン") my.knowledge.graph("統計基礎勉強会.txt",from=-1,to=20140501,target.date=20140402) my.knowledge.graph("統計基礎勉強会.txt",from=-1,to=20131201,target.date=20140402) my.knowledge.graph("統計基礎勉強会.txt",from=-1,to=20131113,target.date=dd.u[i],max.edge=20) dd <- c(20131113,20131113,20131127,20131204,20131211,20131218,20131225,20131225,20131225,20131225,20140108,20140108,20140108,20140115,20140122,20140122,20140122,20140129,20140212,20140226,20140305,20140319,20140326,20140326,20140402,20140409,20140416,20140423,20140514,20140521,20140528) dd.u <- unique(dd) for(i in 1:length(dd.u)){ jpeg(paste(dd.u[i],"s.jpeg")) my.knowledge.graph("統計基礎勉強会.txt",from=-1,to=dd.u[i],target.date=dd.u[i],max.edge=20) dev.off() } for(i in 1:length(dd.u)){ jpeg(paste(dd.u[i],"k.jpeg")) my.knowledge.graph("統計基礎勉強会.txt",from=-1,to=dd.u[i],target.date=dd.u[i]) dev.off() }
- 入力ファイル
20131113 ヒストグラム 分布 最適化 20131113 カーネル密度推定 カーネル ヒストグラム 推定 近似 平滑化 20131127 楕円 回転 回転行列 固有値分解 20131204 固有値分解 逆行列 楕円 20131211 リサンプリング クロスバリデーション ギッブスサンプリング パーミュテーション法 ジャックナイフ法 推定 20131218 ニュートン法 最適化 微分 20131225 二項分布 ベータ分布 分布 20131225 共役事前分布 ベータ分布 20131225 二項分布 離散 20131225 ベータ分布 連続 20140108 ワイブル分布 故障 最弱リンクモデル 形状パラメタ 尺度パラメタ 20140108 分布 パラメタ 20140108 最弱リンクモデル 確率モデル モデル 20140115 連検定 離散 組み合わせ 順列 20140122 尤度関数 最尤推定 微分 極値 尤度 20140122 尤度 確率 事前確率 事後確率 ベイズ 20140122 尤度関数 ワイブル分布 20140129 TeX 数学 表記 20140212 アルゴリズム 線形計画法 動的計画法 貪欲法 分割統治法 数え上げ ヒューリスティック 遺伝的アルゴリズム モンテカルロ法 計算量 20140226 疑似乱数列 乱数 分布 シード ギッブスサンプリング 線形合同法 メルセンヌ・ツイスター 素数 20140305 MCMC 状態推移 状態推移行列 行列 モンテカルロ 乱数 20140319 p値 検定 20140326 LAPACK 線形代数 パッケージ 20140326 線形代数 行列 20140402 統計学 用語 定義 20140409 統計学 記法 20140416 データマイニング データベース データウェアハウス 分類 クラスタリング 20140423 スプライン曲線 近似 微分 平滑化 推定 20140514 オッカムの剃刀 ゲーム理論 ランダム モデル 自由度 20140521 自己相関 カーネル関数 周期性 畳みこみ 内積 20140528 サポートベクターマシン カーネル関数 内積 内積空間 分類 回帰
有志のための統計学メニュー考、ごちゃごちゃ編
- 「統計学」の講義は「これこれができるようになりたいんです」「これができるのが最低ラインです」というのを基準にして構成しがち
- なぜなら、需要がそこにあるから。「視聴率」を基準にすると、そこしか狙えない。マスコミ的講義構成は、「視聴率」主義
- そうでない需要:「統計学とはどんなものだろうか」ということに興味があり、それを学ぶことで「統計学的な考え方」を身につけて「万能」を目指したい、という需要が少数にあったとしたら、「ミニコミ」「ニコ動」主義と言うことになるのだろう。いわゆる大学発のe-learningは「特定の物理的距離」の範囲に、「頻度の低い需要」を集めることはもう無理だから、「空間」を広げることで「需要が低濃度」であっても「ある程度の個体数」を確保したい、という、そういう動きなのだろう
- 学会という制度もまあそんなもの
- とは言え「ある程度の個体数」を確保したい、というところに「真のミニコミ」主義と相いれないものがあって、「個体数が少なくてももういいや」という開き直りも必要かもしれない
- だらだらした蘊蓄はおいておいて
- じゃあ、「有志」が集えるとなったとき、そのメニューはどうしたらよいのだろう
- 『志はあるけれど、基礎はない』という前提で
- まず定義?
- 統計学とは
- 次いで分類?
- ほげ
- さらに亜分類?
- はげ
- 分けたら、閉じる。相互関係
- もげ
- とじた世界としての統計学と周辺との関連
- めげ
- この進め方はデジャヴゥな感じ。「数学に志はあるけど、基礎はない」というときにどうするの?というのを考えたことがあった…
- そのときは、「すごろく方式」にした(こちら)。興味のあるところを適当にクリックしよう、解らなかったら、いつでも適当なところに戻りましょう、戻らなくても、近いところに飛んでみましょう、「志」があれば、なんとかなります、と、そんな感じ
有志のための統計学メニュー考、目次〜試行錯誤編
- 目次
- 1. 定義
- 2. 分類
- 2.1 亜分類
- 3. 相互に関係づける
- 4. 周辺
有志のための統計学メニュー考、定義〜試行錯誤編
- 定義は定めるものだけれど、応用範囲が広いので、天下り式に定めるのではなく
- 『わたし・あなた』が「統計学」に求めているもの、それを(すり合わせて)「統計学」の定義としてみる
- 求めているものは何か
- 「よりよく解りたい何か」がある
- 「その何か」を「直接」的に「解る」ことはできない
- 「直接」的に「解る」ことはできないが、「間接」的に「解る」ヒントはある
- 「間接」的に「解る」ことがどういうことなのかの「説明」が欲しい
- 手垢のついた用語に翻訳(できるならば)してみよう
- 「解りたい何か」→「未来」「過去」「モデル〜疑似真実」〜「真実」
- 「直接は無理」〜Stochasticだから…(とは限らない???)
- 「間接的ヒント」→「データ」〜「データは離散的?」
- 「説明」→論理と言語〜曖昧は嫌だから「数学」的厳密さを求める?
- さて、定義
- 統計学とは
- 「『直接的に知りえない、未来・過去・確率過程』について、『すべてではない情報』に基づいて、『論理学・数学という定義が厳密な手法』を適用したときの振る舞いに関する学問」
- とでも言えるだろうか
有志のための統計学メニュー考、分類〜試行錯誤編
- 分類するには尺度が必要
- 尺度を列挙する
- 「解りたい何か」はどんなものか
- 目的に沿って
- 棄却
- 推定
- 他
- 時間に沿って
- 未来に関すること
- 過去に関すること
- 現在(の確率過程)に関すること
- 目的に沿って
- 「データ」はどんなものか
- 観測可能性に沿って
- 実観測可能なデータ
- 実観測可能でなくてもよい抽象的な「すべてではない情報」としてのデータ
- データの構成要素に沿って
- 「変数」なのかそうでないのか
-
- 変数はあるか、それは数え上げられるか
- 変数は便宜的なものか、実在か
-
- 「変数」ではないものとは
- 「変数」なのかそうでないのか
- 変数のデータ型に沿って
- カテゴリカル・量的
- 離散
- 連続
- データの構造に沿って
- デカルト座標的
- 1元
- 2元
- 多元
- 位相的
- その他
- デカルト座標的
- 観測可能性に沿って
- 「手法」はどんなものか
- アルゴリズムによる分類
- 『論理学』『数学』の種類だけ分類ができる
- 「解りたい何か」はどんなものか
有志のための統計学メニュー考、周辺〜試行錯誤編
- 概念的周辺
- 数学的周辺
- 論理・判断的周辺
有志のための統計学メニュー考、管理編
- 「体系立てずに進める」場合、色々、トピックを挙げながら、その関係をつなぎつつ、頭の整理をしていくことになる
- そうは言っても、「志あり、基礎なし」からだと、相互連携が見えてこないので、挫折しやすい
- たとえば、こちらで扱っているトピックを、上記のようなことに気をつけながら、単純に、関連がある単語のペアワイズ関係に還元してグラフ表示すれば(そして、今回は『共役事前分布』がお題、と示すなら)
# "test.txt"ファイルは、各行の第1列に気になる用語、 # 第2列以降、任意の列数で、第1列と関連する用語を記載 # タブ区切り d <- as.matrix(read.table("test.txt",sep="\t",fill=TRUE)) dim(d) # ノードとしてのユニークを取る u.d <- unique(c(d)) # 入力データをユニークノードIDで表す d.id <- d for(i in 1:length(u.d)){ d.id[which(d==u.d[i])] <- i } # エッジリストを表す行列を作る e <- matrix(0,0,2) for(i in 1:length(d.id[,1])){ if(length(d.id[i,]) > 1){ for(j in 2:length(d.id[i,])){ if(d.id[i,j]!="") e <- rbind(e,c(d.id[i,1],d.id[i,j])) } } } # 入力ファイルはひたすら思いつくままに書くので、エッジ重複が出る # それを省く e <- unique(e) library(igraph) # 無向グラフオブジェクトにする g <- graph.edgelist(e,directed=FALSE) # ノードの色を付ける col <- rep(rgb(0.3,0.3,0.3,alpha=0.3) ,length(u.d)) # ターゲットノードの文字列を指定して、そのノードの色を変える col[which(u.d=="共役事前分布")] <- rgb(1,0.3,0.3,alpha=0.5) plot(g,vertex.label=u.d,vertex.color=col)
- test.txtの中身
共役事前分布 ベータ分布 ベータ分布 二項分布 連続 分布 ベルヌーイ事象 二項分布 離散 ベイズ推定 推定 ベイズ推定 共役事前分布 事前分布 事後分布 事前分布 共役事前分布 スプラインカーブ 回帰 微分 近似 オッカムの剃刀 推定 モデル 自己相関 時系列 推定 近似 サポートベクターマシン 分類 回帰 ヒストグラム 分布 推定 近似 楕円 幾何 距離 分布 固有値分解 回転 楕円 線形代数 リサンプリング 推定 アルゴリズム ニュートン法 近似 アルゴリズム ワイブル分布 故障 連続 分布 連検定 検定 離散 尤度関数 尤度 てふ 数式 表記 アルゴリズムの分類 アルゴリズム 疑似乱数発生 乱数 アルゴリズム MCMC 乱数 アルゴリズム p値 確率 累積確率 検定 LAPAK 線形代数 アルゴリズム パッケージ 二項分布 離散 分布
- ごちゃごちゃしてきたら、「繰り返し登場するエッジ」だけでグラフを作り直したくなったり描き直したくなったりするはずなので、そのための小改変ソースが以下
# "test.txt"ファイルは、各行の第1列に気になる用語、 # 第2列以降、任意の列数で、第1列と関連する用語を記載 # タブ区切り d <- as.matrix(read.table("test.txt",sep="\t",fill=TRUE)) dim(d) # ノードとしてのユニークを取る u.d <- unique(c(d)) # 入力データをユニークノードIDで表す d.id <- d for(i in 1:length(u.d)){ d.id[which(d==u.d[i])] <- i } # エッジリストを表す行列を作る e <- matrix(0,0,2) for(i in 1:length(d.id[,1])){ if(length(d.id[i,]) > 1){ for(j in 2:length(d.id[i,])){ if(d.id[i,j]!="") e <- rbind(e,c(d.id[i,1],d.id[i,j])) } } } # 入力ファイルはひたすら思いつくままに書くので、エッジ重複が出る # それを省く e.uniq <- unique(e) e.weight <- rep(0,length(e.uniq[,1])) for(i in 1:length(e.uniq[,1])){ e.weight[i] <- length(which(e[,1]==e.uniq[i,1] & e[,2]==e.uniq[i,2])) } library(igraph) # 無向グラフオブジェクトにする g <- graph.edgelist(e.uniq,directed=FALSE) E(g)$weight <- e.weight # ノードの色を付ける col <- rep(rgb(0.3,0.3,0.3,alpha=0.3) ,length(u.d)) # ターゲットノードの文字列を指定して、そのノードの色を変える col[which(u.d=="共役事前分布")] <- rgb(1,0.3,0.3,alpha=0.5) e.w <- E(g)$weight #e.w.2 <- e.w #g2 <- g #E(g2)$weight <- e.w-1 #e.w.3 <- as.numeric(e.w.2 > 0) plot(g,vertex.label=u.d,vertex.color=col,edge.width = e.w)