This analysis utilizes data from the Parvo ICU End of Shift Report submitted at the end of each shift. It has not been cross-validated against independent (and official) data sources like PetPoint of MyVolunteerPage, and therefore might contain some erroneous data.
Using data submitted at the end of shifts via the Parvo ICU End of Shift Report, this analysis explores from the trends and patterns in the Parvo ICU over multiple years. Data spans from 2013-06-10 to 2016-03-27 and represents 1,927 total observations (e.g. End of Shift submissions).
Analysis has been broken down into three sections, (1) Volunteer/Staff, (2) Dogs in the ICU, and (3) Supplies Requests. The data for each section has been pre-processed from the Google Sheet where report submissions are recorded, and scripts/instructions for processing new data can be found on the Github page for this project.
Vols <- Numerical %>%
select(Timestamp, Shift.Time) %>% # Grab the time and duration of shift
bind_cols(Names$Vols) %>% # Bind the table of volunteer attendence
# Gather the table in long format by volunteer name
gather(Volunteer, Value, -Timestamp, -Shift.Time) %>%
filter(Value) %>% # Filter dates where vol wasn't there
# Only vols with 10+ shifts
group_by(Volunteer) %>% filter(9<n())First, we’ll take a look at the volunteers and staff who were listed as a response to the Shift Staff/Volunteers question on the report. Responses have been modified to fix misspellings and standardize the format.
Responses lists names as a comma separated list, like the one below. The method of parsing names is fairly indiscreet, and identified a total of 102 unique names across all submissions. In an effort to reduce the noise, only names appearing 10 or more times have been counted. By applying this filter, the number of names counted was reduced to 57.
Additional complications arose from volunteers sharing the same first name. Sometimes submissions will specify which volunteer was present by including their last initial, but often this information is omitted. There is, therefore, a great deal of cross over among a few volunteers with common names, but unfortunately this is unavoidable.
Finally, in cases where a volunteer/staff was listed as training a new volunteer (e.g. Katie training Hunter), both the trainer and trainee have been counted.
Volunteer, Volunteer, …
Volunteer, Trainer training Trainee
To add methods…
To add methods…
To begin, below is a table of the top 40 volunteers, sorted by the number of shifts for which they’ve been present. Displayed are columns indicating a few self-explanatory metrics (e.g. Cumulative Hours, Number of Shifts) as well as the first date the volunteer’s name appeared in the reports (First Shift).
Additionally, I’ve calculated the “Span of Days” that they’ve been involved by subtracting First Shift - Most Recent Shift (see Figure 3). Finally, the Days Since a Shift illustrates how many days have passed from the volunteer’s most recent shift and the most recent report submission.
Vols %>% group_by(Volunteer) %>%
filter(Volunteer!="Katie", Volunteer!="Emily") %>%
summarise(
Shifts = n(),
Hours.sum = sum(Shift.Time),
Hours.med = median(Shift.Time),
Start = floor_date(min(Timestamp), "day"),
Recent = floor_date(max(Timestamp), "day")
) %>%
mutate(Span = as.numeric(Recent-Start)) %>% ungroup() %>%
mutate(Days.Since = as.numeric(max(Recent)-Recent)/86400) %>%
select(`Cumulative Hours`=Hours.sum, Volunteer, `Number of Shifts`=Shifts,
`First Shift`=Start, `Span of Days`=Span, `Days Since a Shift`=Days.Since) %>%
arrange(desc(`Number of Shifts`)) %>%
slice(1:40) %>%
formattable::formattable(list(
`Cumulative Hours` = formattable::color_tile("white", "orange", 0.1),
`Span of Days` = formattable::color_tile("#C26B51", "#529985", alpha=0.01),
`Number of Shifts` = formattable::normalize_bar("green", 0.1),
`Days Since a Shift` = formattable::normalize_bar("red", 0.1)))| Cumulative Hours | Volunteer | Number of Shifts | First Shift | Span of Days | Days Since a Shift |
|---|---|---|---|---|---|
| 428.5 | Stasha | 214 | 2014-05-06 | 535 | 156 |
| 265.5 | Emily M | 172 | 2013-06-14 | 996 | 21 |
| 327 | Amy | 145 | 2013-06-13 | 993 | 25 |
| 220 | Sara | 141 | 2013-06-11 | 930 | 90 |
| 272.5 | Nipuni | 135 | 2013-06-10 | 533 | 488 |
| 281 | Nicole | 131 | 2013-06-21 | 922 | 88 |
| 259.5 | Hunter | 128 | 2014-08-14 | 590 | 1 |
| 276 | Kumiko | 107 | 2013-06-10 | 1014 | 7 |
| 224 | Shelby | 99 | 2013-06-22 | 1009 | 0 |
| 146 | Sara C | 96 | 2013-07-09 | 902 | 90 |
| 175 | Amanda | 94 | 2014-06-05 | 340 | 321 |
| 155.5 | Michael | 93 | 2014-06-04 | 662 | 0 |
| 187.5 | Peggy | 91 | 2013-06-11 | 1013 | 7 |
| 165 | Shanti | 89 | 2014-09-09 | 543 | 22 |
| 147.5 | Keri | 86 | 2014-09-10 | 455 | 109 |
| 134 | Michaela | 85 | 2014-06-04 | 445 | 217 |
| 138.5 | Martha | 84 | 2013-11-18 | 786 | 74 |
| 155.5 | Breanne | 83 | 2014-03-31 | 431 | 296 |
| 119.5 | Will | 76 | 2015-03-03 | 264 | 126 |
| 134.5 | Grace | 68 | 2014-11-12 | 276 | 225 |
| 121 | Melissa | 68 | 2013-06-12 | 791 | 228 |
| 190.5 | Erica | 66 | 2015-08-25 | 213 | 2 |
| 128.5 | Genevieve | 61 | 2015-02-11 | 407 | 3 |
| 110 | Rebecca | 55 | 2013-06-15 | 729 | 287 |
| 121 | Carol | 54 | 2015-05-12 | 280 | 40 |
| 121 | Ayari | 53 | 2013-06-15 | 1009 | 7 |
| 118.5 | Carolina | 53 | 2015-05-12 | 280 | 40 |
| 82.5 | Kevin | 52 | 2013-06-16 | 527 | 488 |
| 104 | Joanna | 49 | 2013-06-12 | 168 | 851 |
| 63.5 | Kelsey | 49 | 2013-11-07 | 152 | 719 |
| 82 | Anne | 44 | 2015-05-19 | 295 | 18 |
| 111.5 | Marina | 43 | 2015-10-30 | 148 | 1 |
| 105 | Bobbie | 42 | 2015-09-18 | 165 | 26 |
| 80.5 | Natalie | 42 | 2015-07-28 | 241 | 2 |
| 91.5 | Christopher | 41 | 2015-04-21 | 164 | 177 |
| 105.5 | Daniel | 41 | 2014-03-21 | 730 | 7 |
| 92.5 | Alicia | 40 | 2013-06-11 | 435 | 585 |
| 112.5 | Lauren | 40 | 2013-06-14 | 1015 | 2 |
| 89 | Maria | 35 | 2013-06-14 | 378 | 639 |
| 55 | Collin | 34 | 2014-01-05 | 137 | 675 |
df <- Vols %>% group_by(Volunteer) %>%
summarise(N=n(), Hours = sum(Shift.Time)) %>% arrange(desc(Hours)) %>%
filter(Volunteer!="Katie") %>%
mutate(CD=cume_dist(Hours), R=percent_rank(Hours))
df %>%
ggplot(aes(x=CD, y=N, size=Hours, label=Volunteer, alpha=R)) +
geom_point() + geom_label_repel(data=filter(df, R>.25), show.legend=F) +
guides(alpha=F) + theme_fivethirtyeight() + theme(axis.title = element_text()) +
scale_x_continuous(labels=percent) +
labs(x="Percentile", y="Number of Shifts", title="Volunteer/Staff Ranking",
subtitle="Percentile by Total Hours")Figure 1
rm(df) Below is a correlation matrix represented as a heatmap. The values (colors of the blocks) the correlation co-efficient of the number of shifts worked per week by using the pearson method. Higher values represent an increased likelihood that those two volunteers volunteered during the same week.
df <- Vols %>%
group_by(Volunteer, Week=floor_date(Timestamp, "week")) %>%
summarise(Shifts = n()) %>%
spread(Volunteer, Shifts, fill = 0)
row.names(df) <- df$Week
df$Week <- NULL
cor(df) %>% d3heatmap::d3heatmap()rm(df)The numerical value (the number between -1 and 1 displayed when you hover over a cell) is probably of little practical significance, but the general clustering (represented by “chunks” of similar colors, or by the dendograms on either side of the plot) do help to highlight different clusters of volunteers.
### By Weekday + AM/PM
# Next, we'll look at another heatmap. This time, however, the numerical values
# are indicative of the number of shifts that each volunteer has been present for
# at each time of the day/week.
df <- Vols %>%
filter(Volunteer!="Katie") %>%
group_by(Volunteer, wkday=paste(wday(Timestamp, label = T),
ifelse(am(Timestamp), "AM", "PM"))) %>%
summarise(Shifts = n()) %>%
filter(10<sum(Shifts)) %>%
spread(Volunteer, Shifts, fill = 0)
row.names(df) <- df$wkday
df$wkday <- NULL
t(df) %>% d3heatmap::d3heatmap(scale="row")
rm(df)
# This figure is colored relative to each volunteer (i.e. by row), so it
# highlights what days/time each volunteer prefers. The most useful conclusion we
# may derive here is the noticable lack of crossover between AM and PM volunteers.Note: Figures 3-5 only include data from volunteers with more than 10 shifts total
This figure demonstrates the patterns of shifts by each volunteer over the duration of their time as a Parvo volunteer/staff. Each point represents one shift, and points are colored by how long the shift lasted.
Vols %>%
group_by(Volunteer) %>%
mutate(First = min(Timestamp)) %>%
ggplot(aes(x=reorder(factor(Volunteer), First), y=Timestamp)) +
geom_violin() +
geom_point(aes(color=Shift.Time), alpha=0.5) +
scale_color_continuous_tableau(name="Shift Duration") +
theme_fivethirtyeight() + theme(axis.title = element_text()) +
scale_y_datetime(date_labels = "%b %y", date_breaks="3 months") +
labs(x="Volunteer/Staff", y="", title="Volunteer/Staff Activity Over Time",
subtitle="For Volunteers/Staff with 10+ Shifts") +
coord_flip()Figure 3
Compared to other volunteer oppurtunites at Austin Pets Alive!, Parvo actually has a very high reternion rate, especially among those who have been here for over a year.
Another way to conceptualize our retention/engagement rate might be to look at how the number of shifts a volunteer has (y-axis) changes with how long they have been active (x-axis). In the figure below, rough visual “calculations” can be made to indicate the retention rate (the distributuion of points in the x direction) and engagement rate (the slope of the points).
df <- Vols %>%
filter(Volunteer!="Katie", Volunteer!="Emily") %>%
group_by(Volunteer, Month=floor_date(Timestamp, "month")) %>%
summarise(Shifts=n(), Shift.Time=sum(Shift.Time)) %>%
filter(Shifts>0) %>%
group_by(Volunteer)
df %>%
summarise(Shift.Time=sum(Shift.Time), Months=n(), Shifts=sum(Shifts)) %>%
ggplot(aes(x=Months, y=Shifts)) +
geom_smooth(alpha=0.2, color="#819e15") +
geom_point(aes(size=Shift.Time), alpha=0.3) + geom_point(color="#dd5928") +
geom_text_repel(aes(label=Volunteer, size=Shift.Time), show.legend=F) +
theme_fivethirtyeight() + theme(axis.title = element_text()) +
scale_size_continuous(name="Total Hours") +
labs(x="Months Active", y="Number of Shifts",
title="Number of Shifts by Months Active")Figure 4
To better illustrate the “engagemnet rate”, below are boxplots illustrating how often (per month) volunteers come in to the ICU. Although Figure 5 might appear to be visually similar to Figure 3, they are NOT measuring the same data.
df %>%
mutate(Shift.Time=sum(Shift.Time), Months=n()) %>%
ggplot(aes(x=reorder(Volunteer, Shift.Time), y=Shifts)) +
geom_boxplot(aes(fill=Shift.Time), alpha=0.7) +
scale_fill_continuous_tableau(name="Total Hours") +
theme_fivethirtyeight() + theme(axis.title = element_text()) +
labs(x="Volunteer/Staff", y="Shifts Per Month", title="Shifts Per Month by Volunteer",
subtitle="For Volunteers/Staff with 10+ Shifts") +
coord_flip()Figure 5
rm(df) I need to do some work on this one, but ideally this will show how volunteer’s engagement changes over their “lifecourse” as a volunteer.
Vols %>%
group_by(Volunteer) %>%
mutate(
Hours = order_by(Timestamp, cumsum(Shift.Time)),
# Start = floor_date(min(Timestamp), "day"),
ddif = as.numeric(as.duration(interval(floor_date(min(Timestamp), "day"), floor_date(Timestamp, "day")))/86400),
Len = max(ddif)) %>%
filter(Volunteer!="Katie") %>%
ggplot(aes(x=ddif, y=Hours, group=Volunteer)) + geom_line(aes(color=Len)) +
labs(x="Days since start")Figure 6
Vols %>%
group_by(Volunteer, Week=floor_date(Timestamp, "week")) %>%
summarise(Shifts=n(), Shift.Time=sum(Shift.Time)) %>%
filter(Shifts>0) %>%
group_by(Month=floor_date(Week, "month")) %>% mutate(nVols.m = n_distinct(Volunteer)) %>%
group_by(Week, Month, nVols.m) %>% summarise(
nVols.wk = n_distinct(Volunteer),
Shift.Time = mean(Shift.Time)) %>% ungroup() %>%
filter(as.Date(Week)<ymd("2016-03-27")) %>%
# View()
ggplot() +
geom_point(aes(x=Week, y=nVols.wk, size=Shift.Time, color=nVols.wk), alpha=0.5) +
geom_smooth(aes(x=Week, y=nVols.wk), color="#819e15") +
scale_size_continuous(name="Avg Shift Time (by week)") +
scale_color_continuous_tableau(palette = 'Blue') + guides(color=F) +
theme_fivethirtyeight() + theme(axis.title = element_text()) +
scale_x_datetime(date_labels = "%b %y", date_breaks="3 months") +
labs(x="", y="Unique Volunteers", title="Unique Volunteers Per Week")Figure 7
First, we’ll run an unadjusted linear model based on the number of dogs at each level that are in the ICU
Dogs <- tbl_df(Numerical) %>%
mutate(
Date = floor_date(Timestamp-hours(3), "day"),
AM = am(Timestamp-hours(ceiling(Shift.Time)))) %>%
select(Date, AM, Duration=Shift.Time, Vols=Count_Vols, Total=Dogs.in.ICU,
Critical=Count_Crt, Intermediate=Count_Int, Well=Count_Wel, Timestamp) %>%
mutate(AM = ifelse(AM, "AM", "PM")) %>%
gather(Level, Dogs, Critical:Well) It’s difficult to extrapolate the seasonal trends based on two springs, but if we assume that this sinusoidal pattern were to continue, we should expect a huge peak this summer, since March is only the beginning of the upswing for Parvo season.
df <- Dogs %>%
group_by(Level, Week=floor_date(Date, "week")) %>%
summarise(Avg=mean(as.numeric(Dogs))) %>%
mutate(Year = year(Week), Day = yday(Week))
Dogs %>%
mutate(Year = year(Date), Day = yday(Date)) %>%
ggplot(aes(x=Day, y=Dogs, color=factor(Year))) + facet_wrap("Level", ncol=1) +
geom_jitter(alpha=0.15) + geom_smooth(linetype=2) +
# geom_line(aes(color=Level, x=Day, y=Avg), alpha=0.9, data=df) +
# facet_wrap("Year") +
scale_color_brewer(palette = "BrBG", name="Year") +
theme_fivethirtyeight() + theme(
axis.title = element_text(),
panel.grid.minor = element_line(color="#e6e6e6"),
panel.grid.minor.y = element_blank()) +
labs(x="", title="Number of Dogs Over Time (By Year)",
subtitle="Faceted by the levels") But obviously, there’s a whole lot of variance from the mean
Dogs %>%
group_by(Level, m=floor_date(Date, "month")) %>%
group_by(Level) %>% mutate(
Year = year(m),
Month = month(m, label=T)) %>%
ggplot((aes(x=Month, y=Dogs, fill=Level))) + geom_boxplot() +
theme_fivethirtyeight() + theme(
axis.title = element_text(),
panel.grid.minor = element_line(color="#e6e6e6"),
panel.grid.minor.y = element_blank(),
strip.background = element_rect(fill="#e3e3e3")) +
facet_grid(Year~Level)Dogs %>%
group_by(Level, Month=floor_date(Date, "month")) %>%
summarise(Avg=mean(as.numeric(Dogs))) %>%
group_by(Month) %>% mutate(Avg.Total = sum(Avg)) %>%
group_by(Level) %>% mutate(
Year = year(Month),
Month = month(Month, label=T),
Avg = round(Avg, 2),
Avg.Total = round(Avg.Total, 2)) %>%
ggplot(aes(x=factor(Year), y=Month, label=Avg, fill=Avg.Total, alpha=Avg)) +
geom_bin2d() + geom_text(aes(size=Avg), color="black", alpha=1) +
coord_flip() + facet_wrap("Level", ncol=1) +
scale_fill_distiller(palette = "BrBG", name="Total In ICU") +
guides(size=F, alpha=F) + theme_fivethirtyeight() +
theme(panel.grid=element_blank(), strip.background = element_rect(fill="#e3e3e3"))+
labs(y="", x="", title="Average Number of Dogs by Level (Monthly)",
subtitle="The size of the numbers & transperancy of the bin is proportional to the level's number")Create a data.frame of all the Inventory requests
Supplies <- Inventory %>%
select(Timestamp) %>%
bind_cols(Inventory$Invn.Supplies) %>% select(-`NA`, -None) %>%
bind_cols(Inventory$Invn.Medications) %>% select(-`NA`, -None) %>%
bind_cols(Inventory$Invn.MedSupplies) %>% select(-`NA`, -None) %>%
gather(Supply, Value, -Timestamp) %>%
filter(!is.na(Value)) %>%
filter(Value) Tracking the request over time
df <- Supplies %>%
group_by(Supply, Week=floor_date(Timestamp, "week")) %>%
summarise(Requests.Week = n()) %>% spread(Supply, Requests.Week, fill = 0)
row.names(df) <- df$Week
df$Week <- NULL
# as.matrix(df) %>% t() %>% fpc::pamk() %>% plot()
#
# # By columns, bootstraps to find good p-value
# require(pvclust)
# pv <- df %>% scale(center=T, scale=F) %>% pvclust(method.hclust="ward.D", method.dist="euclidean")
# pv %>% plot() # dendogram with p values
# pv %>% pvrect(alpha=0.95) # add rectangles around groups highly supported by the data
Numerical %>%
# Group by the time sent minus 3 hours b/c timestamp may be @ 1:00 AM
group_by(Date = floor_date(Timestamp-hours(3), "day")) %>%
summarise(Dogs = mean(Dogs.in.ICU)) %>%
group_by(Week=floor_date(Date, "week")) %>%
summarise(Dog.Days = sum(Dogs)) %>%
left_join(
Supplies %>%
group_by(Supply, Week=floor_date(Timestamp, "week")) %>%
summarise(Requests.Week = n())
) %>%
# ggplot(aes(x=Requests.Week, y=Dog.Days)) + geom_jitter() + facet_wrap("Supply")
ggplot(aes(x=Week, y=Supply)) +
geom_rug(sides = "b", aes(alpha=Dog.Days, color=Dog.Days/7), size=2) +
geom_tile(aes(fill=Requests.Week)) +
scale_x_datetime(date_labels = "%b %y", date_breaks="2 months") +
scale_fill_continuous_tableau(name="Requests Per Week") +
scale_color_gradient2(name="Dogs In ICU") +
guides(alpha=F) + theme_fivethirtyeight() +
labs(title="Weekly Inventory Requests Over Time",
subtitle="P.S. We need more Turkey & Chicken Sticks")
Supplies %>% count(Supply, sort=T)
## Source: local data frame [59 x 2]
##
## Supply n
## <chr> <int>
## 1 Turkey 319
## 2 Chicken Sticks 266
## 3 Variety Canned food 234
## 4 Baby Food 221
## 5 Bleach 158
## 6 Famotidine 156
## 7 Cefazolin/Ampicillin 146
## 8 Anzemet 141
## 9 LRS 121
## 10 3cc Syringes 117
## .. ... ...A pretty uneventful correlation matrix visualized as a heatmap
df <- Supplies %>% group_by(Supply, Week=floor_date(Timestamp, "week")) %>%
summarise(Count = n()) %>%
spread(Supply, Count, fill = 0)
row.names(df) <- df$Week
df$Week <- NULL
df <- cor(df)
df[df<0] <- 0
df %>% d3heatmap::d3heatmap()rm(df)Numbers %>%
ggplot(aes(x=yrday, y=Durt.Shft*Vols.Num)) +
geom_jitter(aes(color=Durt.Shft)) +
geom_smooth() +
scale_color_continuous_tableau(name="Shift Duration") +
theme_fivethirtyeight() + theme(axis.title = element_text()) +
# scale_x_datetime(date_labels = "%b %y", date_breaks="3 months") +
labs(x="Day of Year", y="Volunteer Hours") + facet_wrap("yr", ncol=1)
Numbers %>%
filter(Vols.Num<=5) %>%
mutate(m = month(Date, label = T, abbr = T)) %>%
ggplot(aes(x=Durt.Shft, y=Dogs)) +
geom_jitter(aes(color=factor(Vols.Num)), alpha=0.6) +
facet_grid(m~yr) + xlim(c(0,6)) +
scale_color_brewer(palette="Spectral", name="Volunteers") +
theme_dark() +
labs(x="Shift Duration (hours)", y="Number of Dogs",
title="Dogs in Parvo Ward -vs- Duration of Shift",
subtitle="Colored by number of volunteers & faceted by month")
Numbers %>%
filter(Vols.Num<=5) %>%
mutate(m = month(Date, label = T, abbr = T)) %>%
ggplot(aes(x=Durt.Shft, fill=factor(yr))) +
geom_density(alpha=0.4) +
facet_grid(m~Vols.Num) + xlim(c(0,6)) +
scale_fill_brewer(palette="Spectral", name="Volunteers") +
theme_dark() +
labs(x="Shift Duration (hours)", y="Number of Dogs",
title="Dogs in Parvo Ward -vs- Duration of Shift",
subtitle="Colored by number of volunteers & faceted by month")df <- Numerical %>%
mutate(
Date = floor_date(Timestamp-hours(3), "day"),
AM = am(Timestamp-hours(ceiling(Shift.Time)))) %>%
select(Date, AM, Duration=Shift.Time, Vols=Count_Vols, Total=Dogs.in.ICU,
Critical=Count_Crt, Intermediate=Count_Int, Well=Count_Wel, Timestamp) %>%
mutate(
Time = ifelse(AM, "AM", "PM"),
Reported = Duration*60,
Submitted = ifelse(Time=="AM",
60*(hour(Timestamp)-8)+minute(Timestamp),
60*(hour(Timestamp)-19)+minute(Timestamp)),
Duration = ifelse(Submitted-Reported<60*3 & Submitted-Reported>0, Submitted, Reported))
l <- lm(Duration~Critical+Intermediate+Well+Vols+Time-1, data=df)
broom::tidy(l)
broom::glance(l)[1:6] %>% knitr::kable()--- LICENSE ---
Copyright (C) 2016 Hunter Ratliff
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
In the spirit of Reproducible Research, below is the information About the R Session at the time it was compiled:
devtools::session_info()
## setting value
## version R version 3.2.4 (2016-03-10)
## system x86_64, darwin13.4.0
## ui X11
## language (EN)
## collate en_US.UTF-8
## tz America/Chicago
## date 2016-05-22
##
## package * version date
## assertthat 0.1 2013-12-06
## base64enc 0.1-3 2015-07-28
## broom * 0.4.0 2016-05-03
## colorspace 1.2-6 2015-03-11
## d3heatmap 0.6.1.1 2016-05-03
## DBI 0.4 2016-05-02
## devtools 1.11.1.9000 2016-05-10
## digest 0.6.9 2016-01-08
## dplyr * 0.4.3.9001 2016-05-03
## evaluate 0.9 2016-04-29
## formatR 1.4 2016-05-09
## formattable 0.1.7.1 2016-05-22
## ggplot2 * 2.1.0 2016-05-03
## ggrepel * 0.5.1 2016-05-10
## ggthemes * 3.0.2 2016-05-03
## gtable 0.2.0 2016-02-26
## highr 0.6 2016-05-09
## htmltools 0.3.5 2016-03-21
## htmlwidgets 0.6 2016-02-25
## httpuv 1.3.3 2015-08-04
## jsonlite 0.9.20 2016-05-10
## knitr 1.13 2016-05-09
## labeling 0.3 2014-08-23
## lattice 0.20-33 2015-07-14
## lazyeval 0.1.10 2015-01-02
## lubridate * 1.5.6.9000 2016-05-03
## magrittr 1.5 2014-11-22
## markdown 0.7.7 2015-04-22
## Matrix 1.2-4 2016-03-02
## memoise 1.0.0 2016-01-29
## mgcv 1.8-12 2016-03-03
## mime 0.4 2015-09-03
## mnormt 1.5-4 2016-03-09
## munsell 0.4.3 2016-02-13
## nlme 3.1-125 2016-02-27
## plyr 1.8.3 2015-06-12
## png 0.1-7 2013-12-03
## psych 1.5.8 2015-08-30
## R6 2.1.2 2016-01-26
## RColorBrewer 1.1-2 2014-12-07
## Rcpp 0.12.5 2016-05-14
## reshape2 1.4.1 2014-12-06
## rmarkdown 0.9.6 2016-05-01
## scales * 0.4.0 2016-02-26
## shiny 0.13.2.9003 2016-05-03
## stringi 1.0-1 2015-10-22
## stringr 1.0.0 2015-04-30
## tibble 1.0-1 2016-05-03
## tidyr * 0.4.1 2016-02-05
## withr 1.0.1 2016-02-04
## xtable 1.8-2 2016-02-05
## yaml 2.1.13 2014-06-12
## source
## CRAN (R 3.2.0)
## CRAN (R 3.2.0)
## Github (dgrtwo/broom@6a659be)
## CRAN (R 3.2.0)
## Github (rstudio/d3heatmap@57d9756)
## CRAN (R 3.2.5)
## Github (hadley/devtools@46bcd74)
## CRAN (R 3.2.3)
## Github (hadley/dplyr@3074cf7)
## CRAN (R 3.2.5)
## cran (@1.4)
## Github (renkun-ken/formattable@9e6511d)
## Github (hadley/ggplot2@59c503b)
## Github (slowkow/ggrepel@847b714)
## Github (jrnold/ggthemes@331d830)
## CRAN (R 3.2.3)
## cran (@0.6)
## CRAN (R 3.2.4)
## CRAN (R 3.2.3)
## CRAN (R 3.2.0)
## cran (@0.9.20)
## cran (@1.13)
## CRAN (R 3.2.0)
## CRAN (R 3.2.0)
## CRAN (R 3.2.0)
## Github (hadley/lubridate@ea468cd)
## CRAN (R 3.2.0)
## CRAN (R 3.2.0)
## CRAN (R 3.2.4)
## CRAN (R 3.2.3)
## CRAN (R 3.2.4)
## CRAN (R 3.2.0)
## CRAN (R 3.2.4)
## CRAN (R 3.2.3)
## CRAN (R 3.2.4)
## CRAN (R 3.2.0)
## CRAN (R 3.2.0)
## CRAN (R 3.2.0)
## CRAN (R 3.2.3)
## CRAN (R 3.2.0)
## cran (@0.12.5)
## CRAN (R 3.2.0)
## CRAN (R 3.2.5)
## CRAN (R 3.2.3)
## Github (rstudio/shiny@7e303b4)
## CRAN (R 3.2.0)
## CRAN (R 3.2.0)
## Github (hadley/tibble@cb38672)
## CRAN (R 3.2.3)
## CRAN (R 3.2.3)
## CRAN (R 3.2.3)
## CRAN (R 3.2.0)