統計とイモリとバーベルと

勉強の備忘録メイン

ブラックゴーストを飼いたい欲に駆られている.あとスネークヘッド.

イモリ水槽リセットしました

イモリ水槽を立ち上げてからひと月ちょいになりましたが、水槽をリセットして底材を入れ替えることにしました。


f:id:kaizu_3324:20180128220933j:image

 

今回使用した底材はこちら(本当はCharmで買ったのですが…)

 

ストーンディーラーシンセー 津軽プレミアム 5kg

ストーンディーラーシンセー 津軽プレミアム 5kg

 

 色が暗めのほうがイモリの発色が良くなるらしいことと、粒を小さくしたかったためですね。プロポーズも問題なく使えるらしいので、3, 4日後の水換えが楽しみ。

ちなみにアナカリスは水カビが生えていたので処分しました.さすがにこのままだと寂しいのでアヌビアスナナとかを適当に入れるつもりです.

技術系の記事はQiitaに移転

これから技術系のネタはQiitaに書くことにしました.こっちのほうが数式書きやすいし...

qiita.com

体組成晒し 2018-01

2018年1月測定

うーんこのチキンレッグ(胸が厚いとは言っていない)

f:id:kaizu_3324:20180125230621j:plain

チキンレッグといえば,こんなフィギュアが出るらしい. ちょっと欲しい.

セット重量

BP: 60kg83 SQ: 100kg73

メモ: scipy.optimize.minimizeによる最尤法の実装

Missing Data関連の準備として. MCARとかMARとかMNARとかの話をするときにどうしても最尤法は必要になってくるので今のうちに実装.

# -*- coding: utf-8 -*-

import numpy as np
import pandas as pd

from scipy.stats import norm, poisson, uniform
from scipy.optimize import minimize

missing_ratio = 0.3
sample_size = 10000
seed = 123

def generate_sample(sample_size, random_state):
    np.random.seed(random_state)
    df = pd.DataFrame({
        "y1": np.random.normal(2, 5, sample_size),
        "y2": np.random.randn(sample_size),
        "r": np.ones(sample_size, dtype="int")
    })
    df["r"].where(df.y2 >= norm.ppf(missing_ratio), other=0, inplace=True)
    df["y1_obs"] = df["y1"].where(df.r == 1, other=np.nan)
    return df

def _loglike_norm(x, *args):
    return -np.sum(np.log(norm.pdf(args[0], x[0], x[1]))) 

def mle_norm(data, x0=None):
    if x0 == None:
        x0 = np.random.randn(2)

    estimates_ = minimize(_loglike_norm,
                          x0,
                          args=(data),
                          method='Nelder-Mead',
                          options={'maxiter': 100,
                                   'disp': True})
    return estimates_

def main():
    df = generate_sample(sample_size, seed)
    print(mle_norm(data=df.y1, x0=[1, 10]))

if __name__ == "__main__":
    main()

初期値によってはうまく収束してくれないので注意が必要. このあたり,最初にグリッドサーチをしていい塩梅の値を見つけるみたいなやり方ができそう. 最適化アルゴリズムにはNelder-Mead法を選択しているのですが,このあたりは不勉強につき... アウトプットはこんな感じ.欠測のないy1はN(2, 5)を想定したので,ほぼ期待通りの数字が出てきています.

Optimization terminated successfully.
         Current function value: 30264.885192
         Iterations: 43
         Function evaluations: 85
 final_simplex: (array([[ 2.04856667,  4.99058462],
       [ 2.04856811,  4.99053511],
       [ 2.0486284 ,  4.9905318 ]]), array([ 30264.88519227,  30264.88519265,  30264.88519369]))
           fun: 30264.885192273156
       message: 'Optimization terminated successfully.'
          nfev: 85
           nit: 43
        status: 0
       success: True
             x: array([ 2.04856667,  4.99058462])

おまけ

optimizeの仕様をよく理解していなかったがために,作ってしまったけど使わなかった関数(泣). 確率密度関数を引数にとれたらいいなと思って組んだのですが,optimizeの引数となる関数はf(params, args)の形をとる必要があるので,これはちょっと難しい.argsに確率密度関数を含められるような作りにしてもいいけど,args = (pdf, data, ...) みたいな感じになってわかりやすい作りではなくなりますよね...
クラスを定義すればいけるけど,まぁ今回はいいかなと.

def loglike(pdf, data, **kwargs):
    return np.sum(np.log(pdf(data, **kwargs)))

    df = generate_sample(sample_size, seed)
    params = {"loc": 0,
              "scale": 1}
    print(loglike(data=df.y1, pdf=norm.pdf, **params))

    d = np.random.random_integers(0, 10, 3)
    params = {"loc": 0,
              "scale": 10}
    print(loglike(data=d, pdf=uniform.pdf, **params))

イモリ飼育: 有尾目両生類(urodele amphibians)の消化について

イモリの給餌頻度はどんな感じがいいんだろうという悩みについて調べてみたのでまとめ.

「イモリ 餌 頻度」とかで検索しても,「週一でいいよー」とか,「毎日あげてます」とか,「3日に一回ぐらいがベスト」とか,回答に幅があってイマイチ確信が持てないので,論文をあたってみました. 一介の会社員なので,本文が読めないのが残念.

論文

Jiang, Suping, and Dennis L. Claussen. “The Effects of Temperature on Food Passage Time through the Digestive Tract in Notophthalmus Viridescens.” Journal of Herpetology, vol. 27, no. 4, 1993, pp. 414–419. JSTOR, JSTOR, www.jstor.org/stable/1564829.

Abstract
Movement of food through digestive tracts of red-spotted newts from southern Ohio was studied to better understand seasonal changes in energy processing. To determine minimum food passage time through the gastrointestinal tract, blood-worms marked with carbon black were consecutively intubated five times to one group of newts at 25 C and twice to a second group at 5 C. Minimum food passage time at 25 C averaged 33 h, with no significant differences among the five feedings. The newts tested at 5 C required an average of 220 h for the passage of food, with significant differences between the two feedings: 157 h for the first and 284 h for the second. Other newts, intubated with worms labeled with iron powder, were X-rayed at periodic intervals to investigate passage of food through the digestive tract. Full stomachs were completely evacuated in 2 d at 25 C, with a half evacuation time of 20 h, but only after 15 d or more at 5 C, with a half evacuation time of 55 h. Maximal amounts of food in the intestines were attained by 20 h at 25 C, but were achieved only after 3 d at 5 C. Evacuation of labeled food from the intestines was completed in about 40 h at 25 C, whereas most of the food was still in the intestines after 15 d at 5 C. It appears that newts are able to process food in all seasons; however, passage time is greatly influenced by temperature.

まぁ要約すると,

  • ブチイモリ(red-spotted newts)の消化管通過時間をさまざまな温度・餌について測定した
実験1
  • blood-worm(チロリ?)を25℃で飼育するイモリと5℃で飼育するイモリにそれぞれ複数回与え,消化管通過時間の平均値を計算した
  • 25℃では平均33時間,5℃では平均220時間を要した
実験2
  • 鉄粉で標識したワームを与えて,X線で定期的に消化状況を観察した
  • 25℃では,胃袋が完全に空になるには2日,満腹時の半分になるまでには20時間を要した
  • 5℃では胃袋が完全に空になるまでに15日以上,半分空くのに55時間かかった
  • 腸内の食料が最大量に達するまでに,25℃では20時間,5℃では55時間を要した
  • 25℃では20時間で食べたものが完全に排泄されたが,5℃では15日が経過した時点でもほとんど消化管に残っていた

ブチイモリは北米大陸に広く分布するイモリで,ほぼ水生,高温に弱い,体長10cm前後,有尾目イモリ科といった具合に,日本の固有種(アカハラ,シリケン)とそれほど大きな違いはないと見て良さそうです.

しかし消化が遅い(笑) 体温=水温じゃ仕方ない気もするし,逆に体温維持をしない分,この早さでも十分なのかな.

イモリとしては高めの水温(25℃)で胃袋が空になるまで2日を要するようなので,通常の飼育温度を20〜25℃とするなら,給餌には少なくとも3日は間を開けた方が無難でしょうね.ヒトと違って少々断食しても大丈夫なので,特段痩せていなければ1週間おきで問題ないと思います.

冬場の屋外など*1では,給餌間隔を1週間以上開けたほうがよさそうですね.

本文がオンラインで読めないので,特に実験2でどのくらい餌を与えたのかだとか,15〜20℃くらいで調べてくれているのかだとかがわからないのが残念.

うちのイモリ

f:id:kaizu_3324:20180122005015j:plain

*1:冬眠狙い以外でそんな環境で飼っている人がいるのかは置いといて

Missing Data: ① ありがちな対処法とその影響

個人的に,欠測値の処理はデータ分析にあたって考えたくないことの筆頭です.
とりあえず早く結果を出したいから暫定の処理をして分析を進めるも,「欠測値をなんとかしなければ」というのは常に頭の片隅にこびりついている.それをストレスに感じつつも,目の前のタスクに追われていたり,モデル選択・特徴量設計に取り組む魅力のほうが大きかったりと,つい後回しにしてしまう.そんなこんなで,気づいた頃には分析も佳境に......
治験関係の統計解析では,欠測値の処理も含めてすべての条件を本番データが揃う前に決定してしまうので,ここまでわたわたすることもないのですが,それにしても,欠測処理が退屈で考えたくないことだ,という印象に変わりはありません.

欠測値について考えたくない理由5選
1. 理論はともかく,実データの欠測処理は面白くない(賛否ありそうですが…)
2. 早く何らかの分析結果を出したい
3. うまくやったところで評価されない
4. どのような害がどの程度起こるのか想像しづらい
5. いざ実データに相対すると,何をするのが正しいのかわからない

3は諦めるしかないでしょうね.前処理全般に言えることなのでしょうが…. 今回はシリーズで欠測処理についてまとめる予定です.可能な限り手早く,頭を使わずに欠測値処理を行えるように勉強を進めます.

シリーズを通して,こちらの書籍を参考にしていきます.調査観察データの統計科学で有名な星野崇宏教授も編集・執筆に加わっておられるようです.

欠測データの統計科学――医学と社会科学への応用 (調査観察データ解析の実際 第1巻)

欠測データの統計科学――医学と社会科学への応用 (調査観察データ解析の実際 第1巻)

今日のお題は「① ありがちな対処法とその影響」. 「とりあえずデータがあるものだけで分析した」「とりあえず平均値を代入しておいた」といった方針がどの程度結果を歪ませるのかを見ていきます.

続きを読む

筋トレログ 2017.12.14

体組成晒し

ジムに体組成計があるので,月イチで測定して結果を晒していく予定. まずは約1ヶ月前,昨年12/14の測定記録から...

f:id:kaizu_3324:20180108202810j:plain

ザコ過ぎて泣けてくる. 辛うじて上腕が標準以上の筋肉量を示しているものの,それなりにあると思っていた脚が標準未満. デッドをやっていた頃は脚は実質週2でトレーニングできていたが,現環境でデッドは厳しいので,何か考えなければ. 胸の日か背中の日にレッグプレス1セット挟んでいこうかな.

現時点のセット重量

BP: 60kg SQ: 90kg