2017-11-02 10 views
0

完全に異なる尺度にもかかわらず、同じboxplotグラフで表示する必要があるいくつかの測定値があります。各グループ(=測定タイプ)には固有の上限と下限の許容限度があります。R boxplot - 最小値と最大値の代わりに所定の上限値と下限値を基準に正規化する方法

データは、下限が常に-1になるようにRで正規化し、上限は常にすべてのグループで+1にする必要があります。すべての測定値が適切に表示されるようにY軸を設定します。

これまでのところ、min(NUM_VALUE)は-1、最大値(NUM_VALUE)は+1でboxplotを描くことができましたが、これは私が望む最終結果ではありません。

偽のデータ(テーブルのほんの一部):

ITEMID  NAME SERIALID NUM_VALUE LOWER_LIMIT UPPER_LIMIT 
Itemcode1 group1 SN1000  62.1  50   80 
Itemcode1 group1 SN1001  62.6  50   80 
Itemcode1 group1 SN1002  63.9  50   80 
Itemcode1 group2 SN1006  1526.79  1526  1528 
Itemcode1 group2 SN1007  1526.799 1526  1528 
Itemcode1 group3 SN1015  1815.09  1814  1816 
Itemcode1 group3 SN1016  1815.094 1814  1816 
Itemcode1 group3 SN1017  1815.098 1814  1816 
Itemcode1 group4 SN1025  1526.751 1526  1527 
Itemcode1 group4 SN1026  1526.62  1526  1527 
Itemcode1 group5 SN1028  1816.155 1816  1817 
Itemcode1 group5 SN1029  1816.245 1816  1817 

Rコード:これまで

library(ggplot2) 
library(data.table) 
df <- read.table("data3.csv", header=TRUE, sep=";", stringsAsFactors=FALSE) 
skl <- function(x){(x-min(x))/(max(x)-min(x))*2-1} 
df <- transform(df,scaled=ave(df$NUM_VALUE,df$NAME,FUN=skl)) 
ggplot(df, aes(x=df$NAME, y = df$scaled)) + geom_boxplot() 

グラフ: boxplot

私はR.

に非常に新しいです

質問:UPPER_LIMITとLOWER_LIMITに対してboxplotを拡大する方法グループ全体を同じグラフに表示しますか?

ご協力いただきありがとうございます、ありがとうございます!

+1

は、各グループのために、あなたの 'skl'機能を適用すると、あなたが望む結果を得る必要があります。これを行うには多くの方法がありますが、それを行う方法についてはSOを検索してみてください。 –

+1

あなたのアプローチに対する一般的な発言/質問。上限/下限を1/-1に設定すると、グループの異なる分散に関する情報が失われます。分散を示すことは、ボックスプロットの主な強みの1つです。たぶん私はあなたのケースを正しく理解していないかもしれませんが、あなたのアプローチの目的が何であるか説明できますか?私の見解では、各グループのすべての値から中央値を差し引いて、グループの異なる分散を分析するために、すべての中央値がx軸のゼロライン上に表示されるようにするのはむしろ意味があります。 –

+0

マヌエル - 私は統計の専門家ではありませんが、私は説明しようとします。制限を1/-1に設定することは、一般に、例えば、 Q-stat統計ソフトウェアで。私の場合、この特定のビューは、選択された1つのアイテムのすべての特性と、その結果が許容範囲内でどのように累積されるかを簡単に概観するために使用されます。もちろん、特定の問題を特定するために、他のボックスプロットビューや他の分析を使用することもできます。 – GaryHill

答えて

1

代わりに代わりにmin()およびmax(), you can change your function skl()to also take lower and upper boundsを使用する代わりに、

適合関数は次のようになります

SKL < - 関数(X、上下){ (X - 低級)/(上部 - 下部)* 2 - 1の }

あなたよりapply()を使用してdata.frameの行を通過することができます。

df$scaled <- apply(df[, 4:6], 1, function(row) { 
    skl(x = row[1], lower = row[2], upper = row[3]) 
}) 

結果は次のようになります。

df$scaled 
[1] -0.19333333 -0.16000000 -0.07333333 -0.21000000 -0.20100000 0.09000000 0.09400000 0.09800000 
[9] 0.50200000 0.24000000 -0.69000000 -0.51000000 

あなたのコードを使用して、箱ひげ図は、次のようになります。

library(ggplot2) 
ggplot(df, aes(x=df$NAME, y = df$scaled)) + geom_boxplot() 

boxplot

関連する問題