Rで解析 クラスタリング
今回は、生物の群集構造をクラスター解析していく際のコード例。地点間とか、時間ごととか、まあとりあえず複数の群集構造解析に使えそうなデータがあれば、クラスター解析ができる(多分)。
色々やり方はあるはずで、しかもこのコードはあまりスマートなものではないかもしれない(知っている方、助言下さる方がいると大変ありがたいです)。
データセットは、以下の様なものを想定しています。(データセット例は超適当なので気にしないで下さい)
(データセット例)
標準和名\地点名 沖縄 和歌山 東京 宮城
マルタ 5
シロザケ 10
ボラ 15 15 50 30
コボラ 10
メナダ 20 15 20
クロダイ 50 30 30
ミナミクロダイ 50
リボンスズメダイ 10
カワスズメ 70
ゴマフエダイ 30 10
ゴマアイゴ 30
オキナワフグ 20
繰り返しになりますが、このデータは私がテキトーに考えた、本当に何の意味も無いデータセットです。要は、こんな形式のデータを想定しているということさえ伝わってくれれば良いのです。(PCで表示すると上手くいっていますが、所詮はカクヨムに打ち込んでいるだけなので、スマホだと崩れて表示されてしまうかも。縦軸が種名、横軸が地点名になっています)。数字は、各地点で得られた個体数。
さて、以下はコード例。今回はWard法を使っています(詳しくはググってね)。
library(tidyverse)
library(vegan)
library(cluster)
setwd("適切なパス")
Result = read.csv("読み込みたいファイル名.csv", fileEncoding = "CP932")
DATASET <- Result
# NAを0に変換(NA=空欄、空欄の無いデータセットを使うときは省略可)
DATASET2 = DATASET
DATASET2[is.na(DATASET)] = 0
# クラスタリングに使用する数値データを作成(標準和名列を除外)
numeric_data <- DATASET2[, -1]
# データフレームの行と列を入れ替える
transposed_data <- t(numeric_data)
# クラスタリング
dis.mh = vegdist(transposed_data, method="horn")
dis.bc = vegdist(transposed_data, method="bray")
resmh.ward <- hclust(dis.mh, method="ward.D2")
plot(resmh.ward)
#クラスター数の最適解を推定
asil = numeric(nrow(transposed_data))
for (i in 2:(nrow(transposed_data)-1)){
sil <- silhouette(cutree(resmh.ward, k=i), dis.mh)
asil[i] <- mean(sil[,3])
}
asil
resmh.ward.g <- cutree(resmh.ward, k=which.max(asil))
resmh.ward.g
sil <- silhouette(resmh.ward.g, dis.mh)
rownames(sil) <- row.names(transposed_data)
plot(sil)
# デンドログラムの葉の高さを揃える
plot(resmh.ward, hang = -1)
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます