2017-06-24 32 views
0

ヒートマップを1つの変数に作成したいと考えています。しかし、私は行列形式で持っていません。私は各項目のPCA1とPCA2の座標を持っており、これからヒートマップを作成する方法を知りたいと思います。これは私のデータは、(クラスタがクラスタ分類を、意味のkです)PCA座標からヒートマップを作成するR

ID      PCA1    PCA2   cluster 
echocardiography  -0.88   0.87   9 
infarction    -0.18   0.57   7 
carotid    1.13    -0.80   2 
aorta     -0.03   -0.06   5 
myocardial    -0.72   -0.02   3 
hemorrhage    0.23    -0.67   5 

ので、基本的に、私は(おそらく使用してPCAが距離座標)することを示しているIDとのヒートマップを希望する各IDがどのように相関するように見えるものです。

ノート:ヒートマップは、(密度の熱プロット対)のようになります。ここでは enter image description here

+1

、詳細にあなたのヒートマップの構造を説明してください。行と列によってどのような変数が必要ですか?各セルにどのような情報を表示する必要がありますか? –

+0

ヒートマップを上記の紫色のヒートマップに似せて欲しいです。私は各IDをお互いに関連づけたいと思っています(別名行= IDと列= ID)。プロット上のPCA座標は、IDが別のIDとどのように相関しているかを示しています。だから、ヒートマップの各セルに、おそらく各ID間の距離を(PCA座標を使用して)表示する必要があります。 IDが近いほど、セルは暗くなり、相関が示されます。 – sweetmusicality

答えて

1

はpossibileソリューションです。それがあなたを助けることを願っています。

df <- structure(list(ID = structure(c(3L, 5L, 2L, 1L, 6L, 4L), .Label = c("aorta", 
"carotid", "echocardiography", "hemorrhage", "infarction", "myocardial" 
), class = "factor"), PCA1 = c(-0.88, -0.18, 1.13, -0.03, -0.72, 
0.23), PCA2 = c(0.87, 0.57, -0.8, -0.06, -0.02, -0.67), cluster = c(9L, 
7L, 2L, 5L, 3L, 5L)), .Names = c("ID", "PCA1", "PCA2", "cluster" 
), class = "data.frame", row.names = c(NA, -6L)) 

# Define a distance function based on euclidean norm 
# calculated between PCA values of the i-th and j-th items 
dst <- Vectorize(function(i,j,dtset) sqrt(sum((dtset[i,2:3]-dtset[j,2:3])^2)), vectorize.args=c("i","j")) 

# Here is the distance between echocardiography and infarction 
dst(1,2,df) 
# [1] 0.7615773 
# This value is given by 
sqrt(sum((df[1,2:3] - df[2,2:3])^2)) 

# Calculate the distance matrix 
nr <- nrow(df) 
mtx <- outer(1:nr, 1:nr, "dst", dtset=df) 
colnames(mtx) <- rownames(mtx) <- df[,1] 

# Plot the heatmap using ggplot2 
library(reshape2) 
library(ggplot2) 
mtx.long <- melt(mtx) 
ggplot(mtx.long, aes(x = Var1, y = Var2, fill = value)) + geom_tile()+xlab("")+ylab("") 

enter image description here

+0

これは美しいです。ありがとうございました。いくつかのフォローアップの質問:1.値が小さいセルを表示するにはどうしたらよいですか?値が小さいほど、距離が小さくなり、相関が高くなるので、0.5未満としましょう。 2.私が投稿した元のサンプルデータセットから、「グループ」と呼ばれる別の変数が、「MH」または「RN」の各IDのどちらを指示するかを指示します。 「MH」と「RN」をプロットするにはどうすればよいですか?あなたの助けを大変ありがとう! – sweetmusicality

+0

"MH"と "RN"を上記のような2つの異なるデータフレームに分けることができます...このデータをX軸の "RN"とy軸の "MH" -軸? – sweetmusicality

+0

私の最初の 'mtx.long'コードの後に​​これを追加しました。これは' mtx.long < - mtx.long [mtx.long $ Var1%in%RN_only_df $ ID]] 'Var1 'はRNの言葉だけを含んでいます。 – sweetmusicality

関連する問題