3

人々のグループが時間中に追跡され、3 つの時点で彼らが裁判官になりたいかどうか尋ねられたと仮定しましょう。その間、彼らは意見を変えるでしょう。時間の経過とともに、判断する/判断しないという意見の変化をグラフで示したいと思います。以下は、それをどのように表示できるかのアイデアです。

ここに画像の説明を入力

プロットの読み方は次のとおりです。

  • 1,462 人の学生が抽出され、そのうち (400+295+22+147) 人が審査員になりたいと考えています (最初の行の束)。
  • 青いパスは、最後に彼らが裁判官になることを意味します。
  • 黒い道とは、最後に別のことをしたことを意味します。
  • ラインが上がります:彼らは裁判官になりたいと思っています。
  • 彼らは裁判官になりたくないのです。
  • 線の太さは、この特定のパスを通過した人の数 (=パスの最後にプロットされた数) に比例します。

例:
(a) 118 人は、高校や大学では審査員になりたくなかったが、練習中に審査員になることを決めた。
(b) 練習までは 695 人がジャッジになることを決めていたが、練習後 400 人がジャッジになり、295 人が別のことをした。

主なアイデアは、どの種類の意思決定パスが存在し、どれが最も使用されているかを調査することです。

いくつか質問があります:

  1. この種のグラフに名前はありますか?
  2. このグラフをプロットできる R 関数は既にありますか?
  3. R関数がない場合:これをよりきれいにプロットする方法はありますか? 例: (3.1) カーブを隣接させたい (カーブ間のギャップやオーバーラップなし)。(3.2) 曲線の始点と終点は、y 軸に平行にする必要があります。

助言がありますか?

編集 1:
上記のものに似たプロットを見つけました: riverplot。たとえば、R ライブラリ riverplotまたはR bloggerを参照してください。リバープロットの欠点は、交差点で個々のスレッドまたはパスが失われることです。


データは次のとおりです。

library(reshape2)
library(ggplot2)

# Data
wide <- data.frame(  grp        = 1:8,
                    time1_orig = rep(8,8)
                  , time2_orig = rep(c(4,12), each = 4)
                  , time3_orig = rep(c(2,6,10,14), each = 2)
                  , time4_orig = seq(1,15,2)
                  , n           = c(409,118,38,33,147,22,295,400)  # number of persion
                  , d           = c(1,0,1,0,1,0,1,0)               # decision
                  )

wide
  grp time1_orig time2_orig time3_orig time4_orig   n d
1   1          8          4          2          1 409 1
2   2          8          4          2          3 118 0
3   3          8          4          6          5  38 1
4   4          8          4          6          7  33 0
5   5          8         12         10          9 147 1
6   6          8         12         10         11  22 0
7   7          8         12         14         13 295 1
8   8          8         12         14         15 400 0

以下は、プロットを取得するためのデータの変換です。

w <- 500
wide$time1 <- wide$time1_orig + (cumsum(wide$n)-(wide$n)/2)/w
wide$time2 <- wide$time2_orig + (cumsum(wide$n)-(wide$n)/2)/w
wide$time3 <- wide$time3_orig + (cumsum(wide$n)-(wide$n)/2)/w
wide$time4 <- wide$time4_orig + (cumsum(wide$n)-(wide$n)/2)/w


long<- melt(wide[,-c(2:5)], id = c("d","grp","n"))
long$d<-as.character(long$d)
str(long)

そして、ここにggplotがあります:

gg1 <- ggplot(long, aes(x=variable, y=value, group=grp, colour=d)) +
          geom_line (aes(size=n),position=position_dodge(height=c(0.5))) +
          geom_text(aes(label=c( "1462",""   ,""   ,""   ,""   ,""   ,""   ,""
                                ,""    ,""   ,"598",""   ,""   ,"864",""   ,""
                                ,"527" ,""   ,""   ,"71" ,"169",""   ,""   ,"695"
                            ,"409" ,"118","38" ,"33" ,"147","22" ,"295","400"
                            )
                        , size = 300, vjust= -1.5)
                    ) +
           scale_colour_manual(name="",labels=c("Yes", "No"),values=c("royalblue","black")) +
           theme(legend.position = c(0,1),legend.justification = c(0, 1),
                 legend.text = element_text( size=12),
                 axis.text = element_text( size=12),
                 axis.title = element_text( size=15),
                 plot.title = element_text( size=15)) +
           guides(lwd="none") +
           labs(x="", y="Consider a judge career as an option:") +
           scale_y_discrete(labels="") +
           scale_x_discrete(labels = c(  "during high school"
                                       , "during university"
                                       , "during practice"
                                       , ""
                                    )
                                )
gg1
4

1 に答える 1

1

riverplotこのプロットを提供するライブラリのおかげで解決策を見つけました:

ここに画像の説明を入力

コードは次のとおりです。

library("riverplot")
# Create nodes
nodes <- data.frame(  ID     = paste(rep(c("O","C","R","D"),c(1,2,4,8)),c(1,1:2,1:4,1:8),sep="")
                    , x      = rep(0:3, c(1,2,4,8)) 
                    , y      = c(8, 12,4,14, 10,6,2, 15,13,11,9,7,5,3,1)
                    , labels = c("1462","864","598","695","169","71","527","400","295","22","147","33","38","118","409")
                    , col    = rep("lightblue", 15)
                    , stringsAsFactors= FALSE
                    )
# Create edges
edges <- data.frame(  N1 = paste(rep(c("O","C","R"), c(2,4,8)), rep(c(1,2,1,4:1)  , each=2), sep="")
                    , N2 = paste(rep(c("C","R","D"), c(2,4,8)), c(c(2:1,4:1,8:1)), sep="")
                    )

edges$Value   <- as.numeric(nodes$labels[2:15])
edges$col     <- NA
edges$col     <- rep(c("black","royalblue"), 7)
edges$edgecol <- "col"

# Create nodes/edges object
river <- makeRiver(nodes, edges)

# Define styles
style <-default.style()
style[["edgestyle"]]<-"straight"

# Plot
plot(river, default_style= style, srt=0, nsteps=200, nodewidth = 3)

# Add label
names <- data.frame (Time = c(" ", "during high school", "during university", "during practive")
                     ,hi  = c(0,0,0,0)
                     ,wi  = c(0,1,2,3)
                     )
with( names, text( wi, hi, Time) )

一連のカテゴリ情報をプロットする別の方法があります:
TraMineR - マイニング シーケンス データ

TraMineR: シーケンス データを探索するためのツールボックス
TraMineR は、状態またはイベントのシーケンス、およびより一般的には離散シーケンシャル データのマイニング、記述および視覚化のための R パッケージです。その主な目的は、キャリアや家族の軌跡を説明するデータなど、社会科学における伝記の縦断的データの分析です。ただし、その機能のほとんどは、テキストや DNA シーケンスなどの非一時的なデータにも適用されます。

于 2016-02-01T13:54:31.077 に答える