forked from annakrystalli/n8cir-reprohacks
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.Rmd
310 lines (205 loc) Β· 11.3 KB
/
index.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
---
title: "N8 CIR 'Northern Tour' ReproHack series"
output:
html_document:
theme: flatly
css: reprohack.css
params:
title: "N8 CIR 'Northern Tour' ReproHack series"
room_location: "Multiple locations"
address: "Newcastle, York, Leeds, Sheffield, Manchester"
date: "21 Jan - 12 Mar 2020"
time: "10:00am-17:00pm"
bannerurl: "reprohack-banner.png"
latitude: 53.38119
longitude: -1.48036
registration_url: https://n8cir.org.uk/news/reprohacks/
hackpad_url: https://bit.ly/remote-reprohack-hackpad
submission_url: https://forms.gle/vMk25vCevMg2QiYQ9
reprohack_repo_url: https://github.com/annakrystalli/n8cir-reprohacks
submission_form_title: "ReproHack Paper Submission Form - n8"
feedback_form_title: "ReproHack feedback form - n8"
runtime: shiny
---
![](`r params$bannerurl`)
# **`r params$title`**
## _A series of hands-on Reproducibility Hackathon_
<br>
#### **`r shiny::icon("clock")` `r params$time`**
#### **`r shiny::icon("calendar")` `r params$date`**
#### **`r shiny::icon("map-marker-alt")` `r params$room_location`**
#### **`r shiny::icon("map-marked-alt")` `r params$address`**
```{r out.width='100%', fig.height=6, eval=require('leaflet'), echo=FALSE, message=FALSE, warning=FALSE}
library(leaflet)
library(dplyr)
event_log <- readr::read_csv("data/event-log.csv") %>%
mutate(upcoming = date >= Sys.Date()) %>%
mutate(popup = glue::glue("<h3><a href={url} {title}></h3><br>{date}"),
date_f = format(date, format="%a %b %d %Y"))
plot_log <- event_log %>%
mutate(color = case_when(upcoming == TRUE ~ "green",
upcoming == FALSE ~ "orange"))
#pal <- colorFactor(c("green", "orange"), c(FALSE, TRUE))
make_popup <- function(df){
popup_row <- function(x){paste0(
"<h3><a href=", x["url"], "> ", x["title"],"</a></h3>", " <br>",
"<strong> Date: </strong>", x["date_f"], "<br>",
"<strong> Room: </strong>", x["room"], "<br>",
"<strong> Address: </strong>", x["address"], "<br>")}
apply(df, 1, popup_row)
}
icons <- awesomeIcons(
icon = 'ios-close',
iconColor = 'black',
library = 'ion',
markerColor = plot_log$color
)
plot_log %>%
leaflet() %>%
addProviderTiles("CartoDB.Positron") %>%
addAwesomeMarkers(icon = icons, popup = make_popup(plot_log))
```
***
```{r, echo = F, results='asis'}
if(!is.null(params$registration_url)){
cat(paste0("### [**REGISTER**](", params$registration_url, ")"))
}
```
[![Slack](https://img.shields.io/badge/slack-join%20us-brightgreen)](https://reprohack-autoinvite.herokuapp.com/)
##### [ReproHack hackpad](`r params$hackpad_url`): containing details for participants
***
# **Welcome `r emo::ji("wave")` **
We are all excited by the progress made by many authors to **make their papers reproducible by publishing associated code and data**.
We know how challenging it can be so we **want to showcase the value of the practice**, both for original authors and as a learning experience for those who attempt to reproduce the work.
## **Event format**:
During a ReproHack, **participants attempt to reproduce published research of their choice from a list of proposed papers with publicly available associated code and data**. Participants get to work with other people's material in a low pressure environment and record their experiences on a number of key aspects, including reproducibility, transparency and reusability of materials. At the end of the day we regroup, share our experiences and give feedback to the authors.
It's imperative to note that **ReproHacks are by no means an attempt to criticise or discredit work**. We see reproduction as **beneficial scientific activity in itself**, with useful outcomes for authors and valuable learning experiences for the participants and the research community as a whole.
***
## **Ways to participate**
<br>
### `r shiny::icon("newspaper")` **Propose a paper**
##### You've put a lot of effort into making your work reproducible. Now let people learn from and engage with it!
Benefits to authors:
- **Feedback** on the reproducibility of your work.
- **Appreciation** for your efforts in making your work reproducible.
- Opportunity to **engage others with your research**.
<br>
### `r shiny::icon("redo-alt")` **Reproduce**
##### Join us at the ReproHack and get working with other people's material.
Benefits to participants:
- **Practical experience in reproducibility** with real published materials and the opportunity to explore different tools and strategies.
- **Inspiration** from working with other peopleβs code and data.
- An appreciation that **reproducibility is non trivial** but that opening up your work for more people to engage with is the best way to help improve it.
- An appreciation that **reproducibility has community value beyond just the validation of the results**. For example, access to such materials increases the potential for reuse and understanding of the work.
**Benefits to the whole research community:**
- Assessment of how reproducible papers are βout of the boxβ.
- Evaluation of how successful current practices are and for what purpose.
- Identification of what works and where the most pressing weaknesses in our approaches are.
<br>
Keep track of discussions and links to any outputs from our sessions on the event [**hackpad**](`r params$hackpad_url`)
***
# **PROPOSE**
### **Nominate a paper for Reproduction:**
We invite nominations for papers that have both associated **code** and **data** publicly available. We also encourage analyses based on open source tools as we cannot guarantee participants will have access to specialised licenced software.
```{r, echo=FALSE}
library("shiny")
wellPanel(a("Nominate Paper", class = "btn btn-primary btn-md",
href = params$submission_url))
```
## **Proposed papers:**
<br>
```{r, echo=FALSE, message=FALSE, warning=FALSE, eval=require('googlesheets4')}
library(googlesheets4)
options(gargle_oauth_cache = ".secrets",
gargle_oauth_email = "annakrystalli@googlemail.com")
```
```{r, echo=FALSE}
print_contact_links <- function(responses, i){
row <- responses[i, ]
twitter <- if(!is.na(row[,"Twitter handle (optional)"])){
twitter_url <- paste0("https://twitter.com/", gsub(" *@ *", "", row[,"Twitter handle (optional)"]))
paste0("[<i class='fa fa-twitter'/>](", twitter_url,")")}else{NULL}
github <- if(!is.na(row[,"GitHub username (optional)"])){
github_url <- paste0("https://github.com/", gsub(" *@ *", "", row[,"GitHub username (optional)"]))
paste0("[<i class='fa fa-github'/>](", github_url,")")}else{NULL}
feedback <- if(row[, "Would you like to receive a copy of any feedback on the paper?"] == "Yes"){
"<i class='fa fa-comment-dots'/>"}else{NULL}
public <- if(row[,"Can feedback on your paper be made public?"] == "Yes"){
"<i class='fa fa-globe'/>"}else{NULL}
return(paste(twitter, github, feedback, public))
}
```
```{r, message=FALSE, results='asis', warning=FALSE, echo=FALSE}
match_length <- 30
responses_gs <- sheets_find(paste(params$submission_form_title))
responses <- sheets_read(responses_gs) %>%
dplyr::mutate(match_name = stringr::str_trunc(.data$`Paper title`, match_length) )
# load feedback
feedback_gs <- sheets_find(paste(params$feedback_form_title))
feedback <- sheets_read(feedback_gs) %>%
dplyr::mutate(match_name = stringr::str_trunc(.data$`Which paper did you attempt?`, match_length) )
responses_joined <- fuzzyjoin::stringdist_left_join(feedback, responses,
by = c(match_name = "match_name"),
max_dist = 10,
method = "qgram",
#method = "cosine",
ignore_case = TRUE) %>%
dplyr::select(.data$`Paper title`,
.data$`Which paper did you attempt?`, dplyr::everything()) %>%
assertr::verify(!is.na(.data$`Which paper did you attempt?`))
stats <- dplyr::group_by(responses_joined, .data$`Paper title`) %>%
dplyr::summarise(no_attempts = dplyr::n(),
mean_repro = mean(.data$`On a scale of 1 to 10, how much of the paper did you manage to reproduce?`) %>%
round())
responses <- dplyr::left_join(responses, stats)
row_n <- nrow(responses)
set.seed(params$latitude * params$longitude)
if(row_n > 0){
random_ids <- sample.int(row_n)
for(j in seq_len(row_n)){
i <- random_ids[j]
cat("<div class='card'>")
cat('\n')
cat('\n')
cat('\n')
cat("### **", j,". ", as.character(responses[i, "Paper title"]), "**", "\n", "\n", sep = "")
cat("**", gsub("\n", "", gsub("[*]", "", as.character(responses[i, "Paper citation"]))), "\n**", "\n", "\n", sep = "")
cat("##### *submitted by ", as.character(responses[i, "Name"]), print_contact_links(responses, i), "*", "\n")
if(!is.na(responses[i, "no_attempts"])){
cat("*No. attempts <i class='fa fa-recycle'/>* ", as.character(responses[i, "no_attempts"]), "\n")
cat("*Mean Repro Score <i class='fas fa-check-circle' />* ", as.character(responses[i, "mean_repro"]), "/10 \n\n")
}
cat('\n')
cat('\n')
cat("**Why should we attempt to reproduce this paper?**", "\n", "\n")
cat(as.character(responses[i, "Why should we attempt to reproduce this paper?"]), "\n")
cat('\n')
cat("**Paper URL:** [", as.character(responses[i, "Paper URL"]),"](",as.character(responses[i, "Paper URL"]) ,")", "\n")
cat('\n')
cat("**Data URL:**", as.character(responses[i, "Data URL"]), "\n")
cat('\n')
cat("**Code URL:**", as.character(responses[i, "Code URL"]), "\n")
cat('\n', "\n")
cat("**Useful programming skills:**", as.character(responses[i, "Useful programming skills"]), "\n")
cat("</div>")
cat('\n', "\n",'\n')
}
}
```
```{r, echo=FALSE}
wellPanel(a("Refresh proposal list", class = "btn btn-primary btn-md",
href = "javascript:history.go(0)"))
```
***
### ReproHack History
ReproHacks were inspired by **Owen Petchey's** [**Reproducible Research in Ecology, Evolution, Behaviour, and Environmental Studies course**](https://github.com/opetchey/RREEBES), where students attempt to reproduce the analyses and figures of a paper from the raw data. We wanted to attempt to do the same but, while they take a few months over a number of sessions, for our first event we only had one day. So to condense that activity into one day we set the challenge to be: **reproduce results from published data AND code**.
We've run **two ReproHacks so far** as part of satellite OpenCon events (Berlin 2016, [London 2017](https://rse.shef.ac.uk/blog/opencon-london/)) with **a [series of them planned for 2019-2020](https://rse.shef.ac.uk/blog/ssi-fellowships-2019/) using funding provided through the [Software Sustainability Institute Fellowship programme](https://www.software.ac.uk/blog/2019-04-11-announcing-2019-software-sustainability-institute-fellows)**.
#### If you would like to host a ReproHack at your institution please get in touch!
***
<div class="pull-left">
### Get in touch
Chat to us on [Slack](https://reprohack-autoinvite.herokuapp.com/) or email [reprohack@googlegroups.com](mailto:reprohack@googlegroups.com).
</div>
<div class="pull-right">
<img src="https://www.software.ac.uk/sites/default/files/images/content/SSI_Big300dpi.png" width="100%">
</div>