データフレーム関連メモ
・行名・列名(ラベル)の変更
colnames, rownames
ref) 行列やデータフレームの列名・変数名の変更
・テーブルとして表示
rmarkdownで使う場合は、xtable, kable など
xtableで行番号ラベルを消すには、行ラベルを設定すればよい。
HTML用にはhtmlTableも使える
以下のサイトがよくまとまっている
ref) Tables with htmlTable and some alternatives
2015年9月13日日曜日
2015年8月31日月曜日
[R] ファイナンス関連計算メモ
・対数収益率
diff(log(x))
diff(log(c(100,101,102,103)))
0.009950331 0.009852296 0.009756175
# データフレームにreturn列を追加 (行数が減るので、先頭に0を追加する)
> head(returns)
date close
1 2004-05-19 10967
2 2004-05-20 10862
3 2004-05-21 11070
> returns$return <- c(0, diff(log(returns$close)))
date close return
1 2004-05-19 10967 0.000000000
2 2004-05-20 10862 -0.009620304
3 2004-05-21 11070 0.018968287
2015年5月15日金曜日
[Java] QuickFIX/J 1.6.0 (2) リリース
QuickFIX/J 1.6.0 がリリースされたようなので試してみた
・QFJ 1.6.0 release notes
□ ダウンロードと実行(java version "1.8.0_45")
ビルド済みのバイナリファイルをダウンロード
quickfixj-core-1.6.0.jar
quickfixj-messages-fixXX-1.6.0.jar (必要なバージョン、allなら全部込み)
をパスに指定する。
実行したところ、NewOrderSingleのインスタンス作成時 new NewOrderSingle() に以下のエラーが発生
SettlType はFIXのバージョンによってQFIX/Jのフィールド種別が異なっているようだ。
FIX4.4ではCharField、FIX5.0ではStringFieldで定義されている。
デフォルトでは、coreに定義されているSettlTypeはStringFieldを拡張している。
VerifyErrorはJDK7以降でclassファイルの検証方式が変更になったことによるものらしい。
既存プロジェクトをJDK8へ移行したら、java.lang.VerifyErrorが出た
とりあえずの解決法はフィールドのそろえればよい。↓のQAにも同様の回答があった。
[Quickfixj-users] Using multiple versions of FIX with Quickfix
□ ビルド
ソースをダウンロードして再ビルドする。
しかし、そのままビルドしたらテストが通らない。。。
原因を探すのが面倒なので、テストスキップでビルド
全体を一度ビルドした後で、messageの定義を変更して再ビルドする。
使用したいバージョンの定義ファイルを編集する。FIX4.4の場合は以下
quickfixj-messages-fix44\src\main\resources\FIX44.modified.xml
このあたりを変更する
・QFJ 1.6.0 release notes
□ ダウンロードと実行(java version "1.8.0_45")
ビルド済みのバイナリファイルをダウンロード
quickfixj-core-1.6.0.jar
quickfixj-messages-fixXX-1.6.0.jar (必要なバージョン、allなら全部込み)
をパスに指定する。
実行したところ、NewOrderSingleのインスタンス作成時 new NewOrderSingle() に以下のエラーが発生
java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
quickfix/fix44/NewOrderSingle.get(Lquickfix/field/SettlType;)Lquickfix/field/SettlType; @2: invokevirtual
Reason:
Type 'quickfix/field/SettlType' (current frame, stack[1]) is not assignable to 'quickfix/CharField'
Current Frame:
bci: @2
flags: { }
locals: { 'quickfix/fix44/NewOrderSingle', 'quickfix/field/SettlType' }
stack: { 'quickfix/fix44/NewOrderSingle', 'quickfix/field/SettlType' }
Bytecode:
0x0000000: 2a2b b600 3057 2bb0
SettlType はFIXのバージョンによってQFIX/Jのフィールド種別が異なっているようだ。
FIX4.4ではCharField、FIX5.0ではStringFieldで定義されている。
デフォルトでは、coreに定義されているSettlTypeはStringFieldを拡張している。
VerifyErrorはJDK7以降でclassファイルの検証方式が変更になったことによるものらしい。
既存プロジェクトをJDK8へ移行したら、java.lang.VerifyErrorが出た
とりあえずの解決法はフィールドのそろえればよい。↓のQAにも同様の回答があった。
[Quickfixj-users] Using multiple versions of FIX with Quickfix
□ ビルド
ソースをダウンロードして再ビルドする。
しかし、そのままビルドしたらテストが通らない。。。
原因を探すのが面倒なので、テストスキップでビルド
mvn install -DskipTests=true
全体を一度ビルドした後で、messageの定義を変更して再ビルドする。
使用したいバージョンの定義ファイルを編集する。FIX4.4の場合は以下
quickfixj-messages-fix44\src\main\resources\FIX44.modified.xml
このあたりを変更する
前)メッセージだけビルドして終了↓ 後)
2015年5月5日火曜日
[kdb] Q Math Library (qml) (2) 回帰分析
Q Math Library の使い方メモ (2)
□回帰分析
・単回帰分析
y=c+ax の回帰を行う。データをこの式に代入して行列で表現すると、Y=XA となる。
Yはデータ個数の縦ベクトル、Xはデータ個数行・2列の行列、A=(c a) の縦ベクトル
回帰分析の各種情報を取りやすくした関数がcontribのlinreg.qに定義されている
参考: Is there linear regression algorithms written by Q language?
https://groups.google.com/forum/#!searchin/personal-kdbplus/linear$20regression/personal-kdbplus/CRf-kOx-v4I/mqqo49tsvTIJ
・contribからソースを入手
http://code.kx.com/wsvn/code/contrib/azholos/linreg.q
□回帰分析
・単回帰分析
y=c+ax の回帰を行う。データをこの式に代入して行列で表現すると、Y=XA となる。
Yはデータ個数の縦ベクトル、Xはデータ個数行・2列の行列、A=(c a) の縦ベクトル
/ .qml.mlsq[X;Y] / 公式には.qml.mlsq[A;B] q)show X: flip (10#1;til 10) / 0-9で、1列目は固定で1 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 q)show Y: (10?10) + 2*til 10 / 切片5、傾き2 8 3 13 11 12 16 18 15 24 23 q).qml.mlsq[X;Y] / 1つめが切片, 2つめが傾き 4.654545 1.921212
回帰分析の各種情報を取りやすくした関数がcontribのlinreg.qに定義されている
参考: Is there linear regression algorithms written by Q language?
https://groups.google.com/forum/#!searchin/personal-kdbplus/linear$20regression/personal-kdbplus/CRf-kOx-v4I/mqqo49tsvTIJ
・contribからソースを入手
http://code.kx.com/wsvn/code/contrib/azholos/linreg.q
/ 単回帰分析
q)show X: (1;til 10) / flipせずに単純に係数を並べてOK
1
0 1 2 3 4 5 6 7 8 9
q)show Y: (10?10) + 2*til 10 / Yは上と同じ
5 8 8 7 11 13 19 22 18 19
q) linreg[Y;X]
| ::
X | (1 0f;1 1f;1 2f;1 3f;1 4f;1 5f;1 6f;1 7f;1 8f;1 9f)
y | 1 6 7 15 16 19 21 19 20 18f
S | (4.473113 -0.706281;-0.706281 0.1569513)
b | 5.145455 2.012121
e | -4.145455 -1.157576 -2.169697 3.818182 2.806061 3.793939 3.781818 -0.230303 -1.242424 -5.254545
n | 10
m | 2
df | 8
se | 2.114974 0.3961708
tstat| 2.432869 5.078923
tpval| 0.04101822 0.0009544019
rss | 103.5879
tss | 437.6
r2 | 0.7632818
r2adj| 0.733692
fstat| 25.79546
fpval| 0.0009544019
2015年5月1日金曜日
[kdb] Adverbs / each
Adverbsに関するメモ(主にeach)
※間違いがありそう。あればコメントください。
kxwiki - Adverbs
・adverb
function or verb を引数にとって、別の function or verb を作り出す。
each以外はスペースを空けてはならない。
adverbの引数はadverbの前にあるfunction or verbなので、adverbの後ろはfunction or verbの引数。
つまり、f each args の場合、eachの引数はfで、argsはfの引数になる。
個人的によく使いそうなもの
・eachを使った関数の応用
TBW, maybe...
※間違いがありそう。あればコメントください。
kxwiki - Adverbs
・adverb
function or verb を引数にとって、別の function or verb を作り出す。
each以外はスペースを空けてはならない。
adverbの引数はadverbの前にあるfunction or verbなので、adverbの後ろはfunction or verbの引数。
つまり、f each args の場合、eachの引数はfで、argsはfの引数になる。
個人的によく使いそうなもの
[eachなど]
each each -
' each both -
\: each left -
/: each right -
[関数fに作用]
f each X - fは1つ以上の引数をとる関数。
fからXのそれぞれに作用する関数を作り出す。
イメージ f[X[0]], f[X[1]],...
X f' Y - fは2つ以上の引数をとる関数。
fからXとYの両方にそれぞれ作用する関数を作り出す。
イメージ f[X[0];Y[0]], f[X[1];Y[1]],...
X f\: Y - fは2つ以上の引数をとる関数。
fからXのぞれぞれをYに作用させる関数を作り出す。
イメージ f[X[0];Y], f[X[1];Y],...
X f/: Y - fは2つ以上の引数をとる関数。
fからYのぞれぞれをXに作用させる関数を作り出す。
イメージ f[X;Y[0]], f[X;Y[0]],...
[実行例]
q)f:{sum x,y}
q)X: 1 2 3
q)Y: 10 20 30
q)f each X
{sum x,y}'[1 2 3]
q)
q)(f each X) Y
11 22 33
q)X f' Y
11 22 33
q)X f\: Y
61 62 63
q)X f/: Y
16 26 36
q)X f/:\: Y / "X (f/:)\: Y "と同じ, (f/:)を関数と見ればよい
11 21 31
12 22 32
13 23 33
[書き方]
f'[X;Y], f\:[X;Y], f/:[X;Y] とも書ける
q)parse "X f' Y" / parseすれば同じに見える
(';`f)
`X
`Y
q)parse "f'[X;Y]" / parseすれば同じに見える
(';`f)
`X
`Y
・eachを使った関数の応用
TBW, maybe...
登録:
投稿 (Atom)