データのお砂場(158) R言語、哺乳類の睡眠時間データ、{ggplot2}

Joseph Halfmoon

さて今回は、哺乳類の睡眠時間に関するサンプルデータセットです。人間様を含む83種のデータです。どうやって測定したのか詳細は不明ですが、トータルの睡眠時間、レム睡眠の時間、睡眠サイクルの時間(長さ)などの記載があります。しかし、NAかなり多め、まあそんなデータを測定しようとすること自体難しそうなので、しかたないか。

※「データのお砂場」投稿順Indexはこちら

※使用させていただいている Rのversionは 4.3.1。RStudioは 2024.04.2+764 “Chocolate Cosmos” です。

msleepサンプルデータセット

皆大好き ggplot2 パッケージ内のサンプルデータセットであるので、下記のところに解説ページがあります。

An updated and expanded version of the mammals sleep dataset

83種の動物に関して11の変数が並んでます。分類に関して genus「属」と order「目」という変数がありますが「科」はありませぬ。

生物学素人のお惚け老人は、使われている用語(英語)に馴染みがないので結構辛いです。たとえばvore(食性と訳していいのかな?)には以下の4項目あり。

    1. carnivore 肉食
    2. omnivore 雑食
    3. herbivore 草食
    4. insectivore 昆虫食

4の昆虫食って誰よ?と思って眺めてみたら、蝙蝠さんとかアルマジロさんなどでした。なかなか奥が深いデータベースです。

また、睡眠と関係あるのか否かは不明ですが、conservationなる変数あり、どうもここには、絶滅危惧種などの分類記号が記されているみたいです。『環境省』様の以下のページによると

自然環境・生物多様性 レッドリストのカテゴリー

    • “nt” 準絶滅危惧
    • “vu” 絶滅危惧Ⅱ類
    • “en” 絶滅危惧ⅠB類

という解釈で良いのかな?略称でない “domesticated” は家畜ってことでしょうな。しかしどうも上記の環境省様の記号とは異なっているのか、”lc”とか、”cd”とか不明なものもあり。

肝心の睡眠に関しては、以下の4項目が記録されてます。

    • sleep_total、トータル睡眠時間[hours]
    • sleep_rem、レム睡眠時間[hours]
    • sleep_cycle、睡眠サイクルの長さ[hours]
    • awake、起きている時間[hours]

また、各動物さんごとに、

    • 体重
    • 脳の重さ

がkg単位で記されてます。

まずはサンプルデータ

サンプルデータをロードし、その概要を眺めたところが以下に。msleepRawData

動物どものお名前を列挙してみるとこんな感じ。name

中央付近に、何やら聞き覚えのある Human がいるのでそいつのデータを取り出してみると以下の如し。Human

HumanはHomo属に属す雑食(omni)動物で、霊長目。ConservationはNAとあるので、絶滅危惧はされていないみたい。蔓延っているのね。トータル睡眠時間は8時間、レム睡眠時間は1.9時間、睡眠サイクルは1.5時間、目覚めているのは8時間、脳の重さは1.32kg、体重は62kgだと。

まずは処理例

ggplot2パッケージの処理例を漁ってみると、このmsleepデータセットを題材に処理している例がいくつかあるのです。しかし、ggplot2のサンプルなのでプロット機能、特に対数プロットなどにフォーカスしていて、肝心な?睡眠時間にはまったく興味がないみたい。

とりあえず処理例から1つ。

p <- ggplot(msleep, aes(bodywt, brainwt)) + geom_point(na.rm = TRUE)
p + scale_x_log10(guide = "axis_logticks") + scale_y_log10(guide = "axis_logticks")

上記例のプロットが以下に。bodywt_brainwt

まあ、体重が重ければ、脳の重量も重いようです。まずは順当?

グラフの体裁にフォーカスしているので、こんなメンドクセー処理もしてます。

a <- ggplot(msleep, aes(bodywt, brainwt)) + geom_point(na.rm = TRUE) + scale_x_log10(breaks = scales::trans_breaks("log10", function(x) 10^x),labels = scales::trans_format("log10", scales::math_format(10^.x))) + scale_y_log10(breaks = scales::trans_breaks("log10", function(x) 10^x),labels = scales::trans_format("log10", scales::math_format(10^.x))) + theme_bw()
a + annotation_logticks(sides = "trbl")

結果が以下に。bodywt_brainwtLL

勝手に睡眠時間をグラフ化してみる。

処理例がまったく睡眠時間に触りもしないので、お惚け老人が勝手に「説」を立ててグラフ化してみましたぞ。まずは、睡眠サイクルと脳の重さの関係。

msleepSubset0 <- subset(msleep, !(is.na(msleep$sleep_cycle)))
s0 <- ggplot(msleepSubset0, aes(brainwt, sleep_cycle)) + geom_point(na.rm = TRUE)
s0 + coord_trans(x = "log10") + guides(x = "axis_logticks")

上記のグラフが以下に。brainwt_sleepCycle

どうも、脳が重いやつの方が、サイクルが長いような気します。個人の感想デス。なお、一番左上にいるのが、さきほども出てきたHumanっす。

一方トータル睡眠時間と脳の重さを見てみるのが以下に。

msleepSubset1 <- subset(msleep, !(is.na(msleep$sleep_total)))
s1 <- ggplot(msleepSubset1, aes(brainwt, sleep_total)) + geom_point(na.rm = TRUE)
s1 + coord_trans(x = "log10") + guides(x = "axis_logticks")

グラフが以下に。brainwt_sleepTotal

どうも脳が重い方がトータルは短い?これまた個人の感想デス。なお、グラフの右下にいるのが、ぞうさん(アフリカとアジア)2種です。ただし、ぞうさんの睡眠サイクル・データはNAだったので、残念ながら先ほどの睡眠サイクルのグラフには登場せず。

いろいろできるということで、食性とトータル睡眠時間の箱ヒゲ図を描いてみたものが以下に。

ggplot(msleep, aes(vore, sleep_total)) + geom_boxplot() + geom_jitter()

グラフが以下に。vore_sleepTotalBX

なにやら昆虫食の皆さんは良く寝ているみたい。。。Humanは雑食の中では短い方?草食獣より肉食獣の方が良く寝ているような印象だったのだけれども、このグラフだとそうでもない?意外と似たようなもん?

弄るといろいろ面白そうなデータです。

データのお砂場(157) R言語、米国の自動車の燃費データ再び、{ggplot2}へ戻る

データのお砂場(159) R言語、米国大統領の任期データ、{ggplot2} へ進む