niszetの日記

細かい情報を載せていくブログ

TokyoR66の宿題の続き

最後まで行ってなかったので。

この記事の続きです。 niszet.hatenablog.com

注意点

以下、とりあえずやれるところまでやってみたものの結果、よくわかっていませぬ。
コードはコピペしたら動きますが、それ以上の情報はここにはないのでご容赦ください。

つづき

ホクソエム親分の資料、

speakerdeck.com

のExercise 3です。

直前のコードのコピペだとこうなります

library(changepoint)
data("HC1")

data <- HC1
model <- cpt.meanvar(data, method= "PELT", test.stat="Exponential")

cpts(model)
#> integer(0)
param.est(model)
#> $rate
#> [1] 0.0008198639

plot(model, cpt.width=3)

f:id:niszet:20180106230034p:plain

cptsの結果から分かる通り、全然推定してくれません。まぁ、そもそもExponentialに見えませんしね…

分布はNormal, Gamma, Poisson, Exponentialしか指定できないので、せっかくだから全部やってみます。

  • Gamma f:id:niszet:20180106225956p:plain

こちらも全然ダメ。

  • Poisson

f:id:niszet:20180106230226p:plain お。出ます…が、点が多すぎて気持ち悪いですね…

ちなみに、

length(cpts(model))
#> [1] 1760

length(data)
#> [1] 23553
  • Normal

f:id:niszet:20180106230243p:plain

こっちなら変化点少なく出てくれますね。

length(cpts(model))
#> [1] 129

どれが正しいの?

どれでしょう…?

1番染色体のGC含有量…と言われてもピンと来ず…。

…が、含有量を時間に対してプロットしているので、今の値は直前の値に引っ張られているはずなので…つまりランダムウォークなのでは、と。 差分をとってプロット。

data <- data[2:length(data)]-data[1:length(data)-1]
plot(data,type="l")

f:id:niszet:20180106232651p:plain

でも、これをmeanvarにかけると

model <- cpt.meanvar(data, method= "PELT", test.stat="Normal")
cpts(model)
#> [1] 7926 7928
param.est(model)
#> $mean
#> [1]  0.01400454  7.00000000 -0.03321813

#> $variance
#> [1] 21828.13     0.00 16962.77

こんな感じに。平均7の分散0って何…。 このデータにコルモゴロフ-スミルノフ検定かけるとp<2.2e-16とか出てくるので正規分布ではないのかなー…

なお、Normal以外は負数があると使えないので差を取ったデータについてみてみるのはNormalのみです。

よくわからぬ…

とりあえずやってみたものの、今の自分では良く分かりませんでした…。いずれ解決させたいと思います。

状態空間とかの話のリンクの自分用のまとめ

時系列解析とディジタルフィルタと。

さて、今年はあまりR関係に注力しないと言いつつこれですよ。

背景

元々時系列の解析等々興味はあるものの、手元にデータはないしまぁいっかーなんて思っていたのですが、お仕事関係でディジタルフィルタにまつわる話があり、そこで状態空間の話があったことからこっちにも手を入れようという気持ちになりました。

で、わかったことを適当にシリーズで書いていこうと思いますが、現時点で手元にある情報はそのままリンク貼れば良いよねってことで、一旦自分向けにリンクをまとめておきます。
必要に応じて追加更新していくスタイル。

DFの方のSSは回路としては既に決まっているのに対して、時系列の方は入力がなく(ノイズとして入る)得られた観測値から状態を推定するというところが違うのだが、まぁ同じところと違うところをそれぞれちゃんと抑えらえれば大丈夫。たぶん。

web上

状態空間モデル

https://logics-of-blue.com/category/%E7%B5%B1%E8%A8%88%E3%83%BBr/%E7%8A%B6%E6%85%8B%E7%A9%BA%E9%96%93%E3%83%A2%E3%83%87%E3%83%AB/logics-of-blue.com

mathwords.net

www.slideshare.net

sinhrks.hatenablog.com

s0sem0y.hatenablog.com

kosugitti.net

www.slideshare.net

カルマンフィルタ

qiita.com

qiita.com

時系列解析全般

tjo.hatenablog.com

見せかけの回帰、単位根

tjo.hatenablog.com

www.slideshare.net

R

KFAS, dlm, bsts

www.slideshare.net

ill-identified.hatenablog.com

logics-of-blue.com

現在所有している時系列解析に関係する(あるいはカルマンフィルタに関係する)書籍一覧

www.kyoritsu-pub.co.jp

www.kyoritsu-pub.co.jp

www.tdupress.jp

岩波データサイエンス Vol.6 - 岩波書店

今年もよろしくお願いします

あけましておめでとうございます(いまさら)

なんか既に今年1つめの記事かいちゃいましたけど。今年もよろしくお願いします。

今日はMATLABのコードやN88-BasicのコードをRに移植することを色々やっていました。BASICはともかく、MATLABは結構簡単に移植できそうです。良かった。

さて、今年はInputを増やしたいため、Outputを少し抑えていこうと思っています。
が、そうするとやったことを忘れていくので、紙の日記と、作業日記をそれぞれつけることとしました。あれ?私日記つけすぎ…?

ことし前半は本業が忙しい見込みですので、出来る範囲で色々とやっていこうと思います。

抱負は手元にメモったので、適当なタイミングでアウトプットともに出していきますか…

そんなわけで、今年もよろしくお願いいたします。

midiを読んでヒストグラムをプロットしてみる

ピアノロール以外の表示をやってみる

以前、midiを読み込んでプロットしました。

niszet.hatenablog.com

これをもうちょっとやってみます。

J.S.Bach の インヴェンション は2声なので上と下の音をそれぞれ取り出すとほぼ単音になります。
これはもとのmidiデータの作りによりますが、tuneR::getMidiNotesで取り出したdata.frameのtrack列が五線譜の上下それぞれを表していたりします(そう作れば、ですが)

確かめてみます。

inv1 <- tuneR::readMidi("Bwv772_Inventionen_1.mid")
inv1 %>% tuneR::getMidiNotes() %>% select(track) %>% distinct()
#>   track
#> 1     2
#> 2     3

内部的にtrack2と3でデータを持っています。2が上パートになっているのでこれを使います。

前回同様にプロットしてみます。

inv1 %>% getMidiNotes() %>% filter(track==2) %>% mutate(endtime=time+length) %>%
  ggplot()+geom_segment(aes(x=time, y=note, xend=endtime, yend=note, color=as.factor(note%%12), size=1))+scale_color_brewer(palette = "Paired")

f:id:niszet:20180101210741p:plain

最後に単音じゃなくなってますけど、まぁ今回は気にしない…

ということで、ヒストグラムにしてみます

library(tidyverse)
library(tuneR)

inv1 %>% getMidiNotes() %>% filter(track==2) %>%
  ggplot() + geom_histogram(aes(x=note, fill=as.factor(note%%12)) ,binwidth = 1) +
  scale_fill_brewer(palette = "Paired")

f:id:niszet:20180101205441p:plain

前回同様、音色ごとに色分けをしています。noteの数値から音階がパッとわからないので色を分けていますが、真ん中の一番高い水色の棒、72番はドの音です。
インベンション、1番はハ長調なので、ドレミファソラシドの音がよく出やすく、それ以外は出現しにくいことがわかりますね。

ちなみに、この表示の仕方だと音の長さが考慮されません。lengthを考慮するならこんな感じですかね…やっつけであまり自身がないですが。

inv1 %>% getMidiNotes() %>% filter(track==2) %>% group_by(note) %>% summarise(sum_note=sum(length)) %>% 
  ggplot() + geom_point(aes(x=note, y=sum_note, color=as.factor(note%%12)) )+scale_color_brewer(palette = "Paired")

f:id:niszet:20180101215058p:plain

これだとあまりわかりやすくはないかな…(hist系はyの値を指定できないので…) もう少し頑張ってみよう…

2017年お疲れ様でした。振り返りの日記

一応ね

まぁ振り返り書かなくてもいいのではという気がしますが。まぁ一応。
いつになく殴り書きです。思いつくままに。

仕事

今年は1月に異動がありました。まぁこれがなければ転職していましたが、今となっては良い思い出(今後はまたどうするか考えないとね) まぁそれなりに成果は出ているのだが、やはりまだまだ。というか、色々忘れていてそれをどうにかしないといけない。それとともに先に進めることもしなくてはいけない。どうするか。考えよう。

R

1-3月はR4DSを購入して通勤時間中に読んでいました。
5月ごろからTokyo.Rに参加し、LTも1回やらせていただき。HijiyamaにもLT参加し、Japan.Rにも行ってRづくしでした。

技術書典とか

一方で技術書典の2、3にも行って、コミケも1日だけですが行ってきましたね。HW関係は書けることがあまりないので、出す側にはなかなかなれそうではない…。何か開拓したいですね。

音楽

今年は家電祭に行けたのは良かった。楽しかったなぁ…。
あとは比較的コンスタントにライブに行っていましたね。均しても月1以上では。

演劇とか

なんだかんだで今年は4回見に行っていたらしいです。思ったより結構行ってるもんだ。来年も既に2つ予定がある。
つながりがあるのは良いことです。

その他

その反面、楽器は全然手付かず、読書はまぁまぁ?、音楽はあまり大きく開拓せず。電子工作とかも全然でしたな…。
あと、家族旅行に草津に行けましたね。これはイベント的に大きかったかな。行けて良かったわ…。

まとめ

良いことも良くないこともまぁ色々ですね。
しかし、去年まではホント、全然何もできなかったのだから、今年は自分としては非常に大きな収穫のある一年だったのです。去年までは一体何だったんでしょうね(もう考えない

来年に向けて

来年はもうちょっとR踏み込みつつ、力を蓄える年にしようと思います(たぶんアウトプット少な目になる) また、本業が忙しいのが目に見えているので前半はそれに全力だと思います。楽器もやりたいけど、うーむ、時間がね。

とにもかくにも、来年はWLB重視で行こう。残業を出来るだけ0に近づける。そのために雑用をどうにかして減らしていきたい。
まわりの理解を得ないとできませんが、意識を変えていくところからでしょうね。

がんばろー

pandoc filterを書かねばならない…のか?

とりあえず、knitrとかは触らなくて良さそう。

結果として、pythonの環境を入れなおさないと話が始まらないことがわかりました。本当にありがとうございました。

さて、

Rmarkdownにpumlを埋め込みたい。

…ので、色々調べていました。

zousanパッケージも見てみようと思いましたが、

github.com

その前に、こちらのスライドから、大まかな流れをつかみました。結果、knitの呪文詠唱周りやpandocのあとはあまり関係なく、pandoc_argsだけでなんとかなりそうなことがわかりました。

R Markdownの内部と テンプレート開発

pandocに送っている呪文自体はこちらの記事から。

qiita.com

keep_mdを書く場所はここで確認。

rmarkdown.rstudio.com

pandoc_argsはこちらを参考に。

rmarkdown.rstudio.com

で、pumlはpandocに対してはpandoc-crossrefとfilterを使うことで使えることは調べると出てきて。今時点だとこちらの記事が凄い参考になりそう(python3対応)

takec.hatenablog.jp

というところまではわかりました。

あとはやるだけでは?

しかしまぁ、pythonが思った通りの挙動をしてくれないのでした。 そろそろanacondaと決別しなくてはいけない時が来たようです。2年前はコレ入れとけって言っていたはずのpython界隈…今は一体どうすればいいの…

また、それはそれとしてpandocのfilterは一応仕様を見ておきたいなぁという気持ち。 Pandoc - Pandoc filters

まぁ、急いでやることでもないし、いい機会なのでこのあたりちゃんと理解しながらやりますかね…。

という気持ちです。楽しみは来年に取っておこう(?)

pumlで何やりたいのかとかはまたそのうち。

Enjoy!?

(R) symbolについて調べる

メモ

formulaを、symbol直打ちではないように作るには…?ということを考えていたのですが、途中で目的が変わっています。 とりあえずメモしないと忘れてしまうので、メモ。

data.frameの列名をsymbolにしてみる。

さて、素朴にやってみると、

iris %>% colnames %>% as.symbol()
#> Sepal.Length

ふむ。。。ひとつだけしか表示されない…?

実は、

とのことで、colnamesのあとas.listでlistにしてからunlistしたり色々やったのですが、最終的に得ようとしているsymbolのベクトルがそもそも存在しないので出来ないのでした。
また、data.frameにもsymbolの列を含むことはできません。

しかし、tibbleなら要素にsymbolを持つことが出来ます。

iris %>% names(.) %>% rlang::syms() %>% tibble()
#> # A tibble: 5 x 1
#>          .
#>     <list>
#> 1 <symbol>
#> 2 <symbol>
#> 3 <symbol>
#> 4 <symbol>
#> 5 <symbol>

まぁどちらもyutannihilationさんに教えていただいたことのままなのですが…。

さて、肝心のformulaですが、まだ答えを持っていません…。どうするのが良いのかな…。modelrあたりが出来そうな気もするんだけど(使い方完全に忘れた)

ツイートをまとめただけみたいになってしまった…。 symbolについてはもうちょっと調べていきます。

Enjoy!!