r - ggplot2: Recreating A plot of shrinkage from a book -


i trying recreate following plot computer age statistical inference.

enter image description here

i have following data

player,mle,truth,js 1,0.345,0.298,0.2848934967658405 2,0.333,0.346,0.2807859008379247 3,0.322,0.222,0.2770206045706685 4,0.311,0.276,0.2732553083034123 5,0.289,0.263,0.26572471576889994 6,0.289,0.273,0.26572471576889994 7,0.278,0.303,0.26195941950164375 8,0.255,0.27,0.25408652730647174 9,0.244,0.23,0.25032123103921555 10,0.233,0.264,0.2465559347719594 11,0.233,0.264,0.2465559347719594 12,0.222,0.21,0.2427906385047032 13,0.222,0.256,0.2427906385047032 14,0.222,0.269,0.2427906385047032 15,0.211,0.316,0.239025342237447 16,0.211,0.226,0.239025342237447 17,0.2,0.285,0.23526004597019082 18,0.145,0.2,0.2164335646339099 

i gave try, seems points not connected lines correctly.

enter image description here

here code

js_player %>%    gather(type,value,2:4) %>%    ggplot(aes(x=value,y=type))+   geom_point()+   geom_line(aes(group=player),lty=2, alpha=1/4)+   theme_minimal() 

from ?geom_line:

geom_line() connects [observations] in order of variable on x axis".

which not want. want them connected in order true - js - mle. therefore geom_path useful here:

geom_path() connects observations in order in appear in data

thus, need massage data accordingly. (1) convert "type" factor levels in desired order. (2) order data according "type" (arrange(type)). could more explicit , order "player" well, since use group = player, not needed. (3) replace geom_line geom_path.

df %>% gather(type, value, 2:4) %>%   mutate(type = factor(type, levels = c("truth", "js", "mle"))) %>%   arrange(type) %>%   ggplot(aes(x = value, y = type)) +   geom_point() +   geom_path(aes(group = player), lty = 2, alpha = 1/4) +   theme_minimal() 

try on smaller toy data set (easier check if/how works):

df <- read.csv(text = "player,mle,truth,js 1,1,2,3                2,2,4,5                3,5,5,4                4,8,8,6")  

enter image description here


alternatively, stick geom_line , use coord_flip:

df %>% gather(type, value, 2:4) %>%   mutate(type = factor(type, levels = c("truth", "js", "mle"))) %>%   ggplot(aes(x = type, y = value)) +   geom_point() +   geom_line(aes(group = player), lty = 2, alpha = 1/4) +   coord_flip() +   theme_minimal() 

Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -