class: middle center hide-slide-number monash-bg-gray80 .info-box.w-50.bg-white[ These slides are viewed best by Chrome or Firefox and occasionally need to be refreshed if elements did not load properly. Please note this web version takes a while to load. See <a href="edibble.pdf">here for the PDF <i class="fas fa-file-pdf"></i></a>. ] <br> .white[Press the **right arrow** to progress to the next slide!] --- background-size: cover class: title-slide count: false # .f1.monash-blue[Constructing experimental designs with the `edibble` R-package] <br> <h2 style="font-weight:900!important;"></h2> .bottom_abs.width100[ Presenter: *Emi Tanaka* <i class="fas fa-university"></i> Department of Econometrics and Business Statistics, <Br> Monash University, Melbourne, Australia <i class="fas fa-envelope"></i> emi.tanaka@monash.edu <a href="https://twitter.com/statsgen" style="color:black"><i class="fab fa-twitter"></i> @statsgen</a> <i class="fas fa-calendar-alt"></i> 9 Nov 2021 @ Applications of Statistical Procedures in Biological Data <br> ] --- name: toc class: transition .f1.tl[ <i class="fas fa-book-open"></i> **Table of Contents**] .f2.pa3.tl[ .box[1] Experimental design *basics* .f3.grey[<i class="fas fa-lightbulb"></i>] [.f4[<i class="fas fa-caret-right"></i>]](#experiment) .box[2] *Current state* of experimental design tools .f3.grey[<i class="fas fa-laptop-code"></i>] [.f4[<i class="fas fa-caret-right"></i>]](#current) .box[3] *Software design* for an everyday user .f3.grey[<i class="fas fa-laptop-code"></i>] [.f4[<i class="fas fa-caret-right"></i>]](#software) .box[4] The .yellow[**grammar of experimental designs**] with .yellow[`edibble`] .f3.grey[<i class="fas fa-laptop-code"></i> <i class="fas fa-lightbulb"></i>] [.f4[<i class="fas fa-caret-right"></i>]](#edibble) <span class="animate__shakeX animate__animated animate__infinite animate__slow" style="display:inline-block;position:relative;"><i class="fas fa-arrow-circle-left f1 animate__bounceInRight animate__animated" style=" vertical-align: middle;"></i></span> ] .border-box.monash-bg-blue2.center.w-70[ <i class="fas fa-link"></i> These slides made using R powered by HTML/CSS/JS can be found at<br><a class="f2" style="color:yellow!important" href="https://emitanaka.org/slides/stats4bio2021/edibble">emitanaka.org/slides/stats4bio2021/edibble</a> ] --- name: experiment class: transition animate__animated animate__slideInLeft .square-number[1] <br> # Experimental design *basics* --- class: inform-slide middle center # .f-headline[Experiment] .f1[ Essential scientific endeavors to collect data to explore, understand or verify phenomena. ] ??? Big picture terminologies --- class: inform-slide middle center # .f-headline[Experimental data] .f1[ The gold standard in data collection. ] (provided that experimental design is satisfactory) --- class: inform-slide middle center # .f-headline[Comparative experiments] .f1[ Collecting data to compare the effects of different conditions under a **_controlled environment_** with the goal of drawing generalisable conclusions ] --- class: inform-slide middle center # .f-subheadline[Designing comparative experiments] .blockquote[ ... to identify data-collection schemes that achieve sensitivity and specificity requirements despite biological and technical variability, while keeping time and resource costs low. .right[ — Krzywinski & Altman (2014) ] ] {{content}} .footnote.f4[ Krzywinski, M., Altman, N. Designing comparative experiments. _Nat Methods_ 11, 597–598 (2014). https://doi.org/10.1038/nmeth.2974 ] -- <span class="f2"> Planning the controlled environment such that there is a higher confidence that effects can be attributed to selected conditions </span> --- name: terms # Basic terminology in comparative experiments .f3.gray[modified versions of Bailey (2008)] .flex[ .w-50.pr3[ .info-box.f3[ A **treatment** `\((\mathcal{T})\)` is the entire description of the condition applied to an experimental unit. ] .info-box.f3[ **Experimental unit** `\((\Omega)\)` is the smallest unit that the treatment can be independently applied to. ] .info-box.f3[ **Observational unit** `\((\Omega_o)\)` is the smallest unit in which the response will be measured on. * Not to be confused with responses `\(\boldsymbol{Y}\)`. * May or may not be the same as experimental unit. ] ] .w-50[ .info-box.f3[ **Block**, also called **cluster**, is the unit that group some other units (e.g. experimental units) such that the units within the same block (cluster) are more alike (homogeneous). ] .info-box.f3[ A **design** `\((D: \Omega \rightarrow \mathcal{T})\)` is the allotment of treatments to particular set of units. ] .info-box.f3[ A **plan** or **layout** is the design translated into actual units. *Randomisation* is usually involved in the translation process. ] ]] .absolute.top-0.right-1[ [<i class="fas fa-caret-right"></i>](#edibble) ] .footnote.f5[ Bailey, R. (2008). Design of Comparative Experiments (Cambridge Series in Statistical and Probabilistic Mathematics). Cambridge: Cambridge University Press. doi:10.1017/CBO9780511611483 ] --- # Experimental structures .f3.gray[as defined by Bailey (2008)] .flex[ .w-50[ .info-box.f3[ **Unit structure** means meaningful ways of dividing up experimental units `\((\Omega)\)` and observational units `\((\Omega_o)\)`. For example: * **Unstructured** * **Blocking** ] ] .w-50.pl3[ .info-box.f3[ **Treatment structure** means meaningful ways of dividing up `\(\mathcal{T}\)`. For example: * **Unstructured**: no grouping within `\(\mathcal{T}\)` * **Factorial**: all combinations of at least two factors * **Factorial + control** ] ]] .footnote.f5[ Bailey, R. (2008). Design of Comparative Experiments (Cambridge Series in Statistical and Probabilistic Mathematics). Cambridge: Cambridge University Press. doi:10.1017/CBO9780511611483 ] --- # Unreplicated experiments .center[ <img src='images/cow1.png' width='120px' style='margin-right:20px;'><img src='images/cow1.png' width='120px' style='margin-right:20px;'><img src='images/cow1.png' width='120px' style='margin-right:20px;'> <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/></span> ] .flex[ .w-45[ .border-box[ * **Experimental units**: 3 cows * **Observational units**: 3 cows * **Observation**: milk yield * **Treatments**: 3 types of supplements * **Allotment**: supplements <i class="fas fa-arrow-right"></i> cows * **Replication**: 1 each ] ] .w-55[ {{content}} ]] -- **Conclusion**: <img src='images/supplement1.png' style='height:1em'> produces most <img src='images/milk.png' style='height:1em'> therefore <img src='images/supplement1.png' style='height:1em'> is the most effective supplement for higher milk yield from cows out of the three supplements tested <div class=' f2 '><i class="fas fa-question-circle animate__animated animate__heartBeat animate__infinite "></i> How confident will you be of this statement? </div> --- count: false # Unreplicated experiments .center[ <img src='images/cow7.png' width='120px' style='margin-right:20px;'><img src='images/cow1.png' width='120px' style='margin-right:20px;'><img src='images/cow4.png' width='120px' style='margin-right:20px;'> <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/></span> ] .flex[ .w-45[ .border-box[ * **Experimental units**: 3 cows * **Observational units**: 3 cows * **Observation**: milk yield * **Treatments**: 3 types of supplements * **Allotment**: supplements <i class="fas fa-arrow-right"></i> cows * **Replication**: 1 each ] ] .w-55[ **Conclusion**: <img src='images/supplement1.png' style='height:1em'> produces most <img src='images/milk.png' style='height:1em'> therefore <img src='images/supplement1.png' style='height:1em'> is the most effective supplement for higher milk yield from cows out of the three supplements tested <div class=' f2 '><i class="fas fa-question-circle animate__animated "></i> How confident will you be of this conclusion? </div> * No individual experimental units are the same<br> <span class="f5">(with some exceptions)</span> ]] --- # Treatment replications .center[ <img src='images/cow1.png' width='120px' style='margin-right:20px;'><img src='images/cow2.png' width='120px' style='margin-right:20px;'><img src='images/cow3.png' width='120px' style='margin-right:20px;'><img src='images/cow4.png' width='120px' style='margin-right:20px;'><img src='images/cow5.png' width='120px' style='margin-right:20px;'><img src='images/cow6.png' width='120px' style='margin-right:20px;'> <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/></span> ] .flex[ .w-45[ .border-box[ * **Experimental units**: 6 cows * **Observational units**: 6 cows * **Observation**: milk yield * **Treatments**: 3 types of supplements * **Allotment**: supplements <i class="fas fa-arrow-right"></i> cows * **Replication**: 2 each ] ] .w-55[ **Conclusion**: <img src='images/supplement1.png' style='height:1em'> produces most <img src='images/milk.png' style='height:1em'> *on average* therefore <img src='images/supplement1.png' style='height:1em'> is the most effective supplement for higher milk yield from cows out of the three supplements tested <div class=' f2 '><i class="fas fa-question-circle animate__animated animate__heartBeat animate__infinite "></i> How confident will you be of this conclusion now? </div> {{content}} ]] -- * Treatment replications here allow us to estimate experimental unit (or error) variation --- # Plan .circle[1] Treatment allocation for nested unit structure .flex[ .w-50.center.pr3[ .border-box.h-100.relative.monash-bg-olive2[ <img src='images/cow1.png' width='120px' style='margin-right:20px;'><img src='images/cow2.png' width='120px' style='margin-right:20px;'><img src='images/cow3.png' width='120px' style='margin-right:20px;'> <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> ]] .w-50.center[ .border-box.h-100.relative.monash-bg-olive2[ <img src='images/cow4.png' width='120px' style='margin-right:20px;'><img src='images/cow5.png' width='120px' style='margin-right:20px;'><img src='images/cow6.png' width='120px' style='margin-right:20px;'> <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/></span> ]] ] <br> .flex[ .w-45[ .border-box[ * **Units**: 2 pens with 3 cows each * **Observational units**: 6 cows * **Treatments**: 3 types of supplements * **Allotment**: supplements <i class="fas fa-arrow-right"></i> cows ] ] .w-55[ <div class=' f2 '><i class="fas fa-question-circle animate__animated animate__heartBeat animate__infinite "></i> Are the treatment means of say,<br> <img src='images/supplement1.png' style='height:1em;'> and <img src='images/supplement3.png' style='height:1em;'> comparable? </div> <div class=' f2 '><i class="fas fa-question-circle animate__animated animate__heartBeat animate__infinite "></i> How would you distribute the treatments? </div> ]] --- # Plan .circle[2] Treatment allocation for nested unit structure .flex[ .w-50.center.pr3[ .border-box.h-100.relative.monash-bg-olive2[ <img src='images/cow1.png' width='120px' style='margin-right:20px;'><img src='images/cow2.png' width='120px' style='margin-right:20px;'><img src='images/cow3.png' width='120px' style='margin-right:20px;'> <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/></span> ]] .w-50.center[ .border-box.h-100.relative.monash-bg-olive2[ <img src='images/cow4.png' width='120px' style='margin-right:20px;'><img src='images/cow5.png' width='120px' style='margin-right:20px;'><img src='images/cow6.png' width='120px' style='margin-right:20px;'> <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/></span> ]] ] <br> .flex[ .w-45[ .border-box[ * **Units**: 2 pens with 3 cows each * **Observational units**: 6 cows * **Treatments**: 3 types of supplements * **Allotment**: supplements <i class="fas fa-arrow-right"></i> cows, .monash-blue[with restriction such that each treatment appears once in each pen] ] ] .w-55[ * Every treatment appears once in each pen * This is a better design since each treatment appears in every pen so you can be more confident that the treatment means are not due to the conditions of particular pens ]] --- # Pseudo-replication .flex[ .w-33.center[ .border-box.h-100.relative.monash-bg-olive2[ <img src='images/cow1.png' width='120px' style='margin-right:20px;'><img src='images/cow2.png' width='120px' style='margin-right:20px;'> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> .bottom_abs.right-3[ <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span> ]]] .w-33.center[ .border-box.h-100.relative.monash-bg-olive2[ <img src='images/cow3.png' width='120px' style='margin-right:20px;'><img src='images/cow4.png' width='120px' style='margin-right:20px;'> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> .bottom_abs.right-3[ <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span> ]]] .w-33.center[ .border-box.h-100.relative.monash-bg-olive2[ <img src='images/cow5.png' width='120px' style='margin-right:20px;'><img src='images/cow6.png' width='120px' style='margin-right:20px;'> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/></span> .bottom_abs.right-3[ <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span> ]]]] <br> .flex[ .w-45[ .border-box[ * **Units**: 3 pens with 2 cows each * **Observational units**: 6 cows * **Treatments**: 3 types of supplements * **Allotment**: supplements <i class="fas fa-arrow-right"></i> .monash-blue[pens] * **Replication**: ?? ] ] .w-55[ {{content}} ]] -- <div class=' f2 '><i class="fas fa-question-circle animate__animated animate__heartBeat animate__infinite "></i> What are the experimental units? </div> --- count: false # Pseudo-replication .flex[ .w-33.center[ .border-box.h-100.relative.monash-bg-olive2[ <img src='images/cow1.png' width='120px' style='margin-right:20px;'><img src='images/cow2.png' width='120px' style='margin-right:20px;'> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> .bottom_abs.right-3[ <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span> ]]] .w-33.center[ .border-box.h-100.relative.monash-bg-olive2[ <img src='images/cow3.png' width='120px' style='margin-right:20px;'><img src='images/cow4.png' width='120px' style='margin-right:20px;'> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/><img class='w-20' src='images/milk.png'/></span> .bottom_abs.right-3[ <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span> ]]] .w-33.center[ .border-box.h-100.relative.monash-bg-olive2[ <img src='images/cow5.png' width='120px' style='margin-right:20px;'><img src='images/cow6.png' width='120px' style='margin-right:20px;'> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/></span> <span class='flex' style='display:inline-block;width:120px;margin-right:20px;'><img class='w-20' src='images/milk.png'/></span> .bottom_abs.right-3[ <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span> ]]]] <br> .flex[ .w-45[ .border-box[ * **Units**: 3 pens with 2 cows each * **Observational units**: 6 cows * **Treatments**: 3 types of supplements * **Allotment**: supplements <i class="fas fa-arrow-right"></i> pens * **Replication**: ?? ] ] .w-55[ <div class=' f2 '><i class="fas fa-question-circle animate__animated "></i> What are the experimental units? </div> * Experimental units are the 3 pens. {{content}} ]] -- * Meaning there is only one replication of each treatment. {{content}} -- * Meaning you cannot estimate the error variation in the pen stratum. {{content}} -- * Pseudo-replication means that you treat **repetition** as replication in the analysis --- count: false # Systematic designs .center[ <img src='images/cow1.png' width='120px' style='margin-right:20px;'><img src='images/cow2.png' width='120px' style='margin-right:20px;'><img src='images/cow3.png' width='120px' style='margin-right:20px;'><img src='images/cow4.png' width='120px' style='margin-right:20px;'><img src='images/cow5.png' width='120px' style='margin-right:20px;'><img src='images/cow6.png' width='120px' style='margin-right:20px;'> <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span> ] .flex[ .w-45[ .border-box[ * **Experimental units**: 6 cows * **Observational units**: 6 cows * **Observation**: milk yield * **Treatments**: 3 types of supplements * **Allotment**: supplements <i class="fas fa-arrow-right"></i> cows * **Replication**: 2 each * .monash-blue[**Assignment**: systematic order] ] ] .w-55[ <div class=' f2 '><i class="fas fa-question-circle animate__animated "></i> What could go wrong with this? </div> {{content}} ]] -- * The order of the experimental units may be **_confounded_** with some extraneous factor {{content}} -- * Like say, the order of the experimental units was determined by the speed (fast to slow) of the cow to get to the feed {{content}} -- * This means that the more active cows are given <img src='images/supplement1.png' style='height:1em'> and leasat active ones are given <img src='images/supplement2.png' style='height:1em'> --- # Randomised designs .center[ <img src='images/cow1.png' width='120px' style='margin-right:20px;'><img src='images/cow2.png' width='120px' style='margin-right:20px;'><img src='images/cow3.png' width='120px' style='margin-right:20px;'><img src='images/cow4.png' width='120px' style='margin-right:20px;'><img src='images/cow5.png' width='120px' style='margin-right:20px;'><img src='images/cow6.png' width='120px' style='margin-right:20px;'> <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span> ] .flex[ .w-45[ .border-box[ * **Experimental units**: 6 cows * **Observational units**: 6 cows * **Observation**: milk yield * **Treatments**: 3 types of supplements * **Allotment**: supplements <i class="fas fa-arrow-right"></i> cows * **Replication**: 2 each * .monash-blue[**Assignment**: random order] ] ] .w-55[ * Randomisation protects you against bias and potential unwanted confounding with extraneous factors {{content}} ]] -- * Bias comes in many forms: obvious to not-so obvious, known to unknown, and so on. {{content}} -- * Randomisation doesn't mean it'll completely shield you from all biases! {{content}} -- * You can get a systematic order by chance! <i class="fas fa-exclamation-circle"></i> This doesn't mean you should keep on randomising your design until get the layout you want! You should instead add another unit structure before randomisation. --- # Factorial treatment structure .circle[1] .flex[ .w-40[ <img src='images/grain9.png' width='80px' style='margin-right:20px;'><img src='images/grain4.png' width='80px' style='margin-right:20px;'><img src='images/grain7.png' width='80px' style='margin-right:20px;'><img src='images/grain1.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span> <img src='images/grain2.png' width='80px' style='margin-right:20px;'><img src='images/grain5.png' width='80px' style='margin-right:20px;'><img src='images/grain3.png' width='80px' style='margin-right:20px;'><img src='images/grain8.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span> <img src='images/grain6.png' width='80px' style='margin-right:20px;'><img src='images/grain11.png' width='80px' style='margin-right:20px;'><img src='images/grain12.png' width='80px' style='margin-right:20px;'><img src='images/grain10.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span> ] .w-35[ .border-box.w-100[ * **Experimental units**: 12 plots * **Observational units**: 12 plots * **Observation**: wheat yield * **Treatments**: combination of: * .monash-blue[Water]: irrigated or rain-fed * .monash-blue[Fertilizer]: type A or type B * **Allotment**: * Water <i class="fas fa-arrow-right"></i> plots * Fertilizer <i class="fas fa-arrow-right"></i> plots * **Assignment**: random order ] <div class=' f2 '><i class="fas fa-question-circle animate__animated animate__heartBeat animate__infinite "></i> How many treatments are there? </div> ] .w-25[ {{content}} ] ] -- <table class=" lightable-classic" style='font-family: "Arial Narrow", "Source Sans Pro", sans-serif; width: auto !important; margin-left: auto; margin-right: auto;'> <thead> <tr> <th style="text-align:center;"> Treatment </th> <th style="text-align:center;"> Replication </th> </tr> </thead> <tbody> <tr> <td style="text-align:center;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/water1.png" width="40px"></span><span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/brand1.png" width="40px"></span> </td> <td style="text-align:center;"> 3 </td> </tr> <tr> <td style="text-align:center;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/water1.png" width="40px"></span><span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/brand2.png" width="40px"></span> </td> <td style="text-align:center;"> 3 </td> </tr> <tr> <td style="text-align:center;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/water2.png" width="40px"></span><span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/brand1.png" width="40px"></span> </td> <td style="text-align:center;"> 3 </td> </tr> <tr> <td style="text-align:center;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/water2.png" width="40px"></span><span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/brand2.png" width="40px"></span> </td> <td style="text-align:center;"> 3 </td> </tr> </tbody> </table> <table class=" lightable-classic" style='font-family: "Arial Narrow", "Source Sans Pro", sans-serif; width: auto !important; margin-left: auto; margin-right: auto;'> <thead> <tr> <th style="text-align:center;"> Treatment factor </th> <th style="text-align:center;"> Count </th> </tr> </thead> <tbody> <tr> <td style="text-align:center;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/brand1.png" width="40px"></span> </td> <td style="text-align:center;"> 6 </td> </tr> <tr> <td style="text-align:center;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/brand2.png" width="40px"></span> </td> <td style="text-align:center;"> 6 </td> </tr> <tr> <td style="text-align:center;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/water1.png" width="40px"></span> </td> <td style="text-align:center;"> 6 </td> </tr> <tr> <td style="text-align:center;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/water2.png" width="40px"></span> </td> <td style="text-align:center;"> 6 </td> </tr> </tbody> </table> --- # Factorial treatment structure .circle[2] .flex[ .w-40[ <img src='images/grain9.png' width='80px' style='margin-right:20px;'><img src='images/grain4.png' width='80px' style='margin-right:20px;'><img src='images/grain7.png' width='80px' style='margin-right:20px;'><img src='images/grain1.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span> <img src='images/grain2.png' width='80px' style='margin-right:20px;'><img src='images/grain5.png' width='80px' style='margin-right:20px;'><img src='images/grain3.png' width='80px' style='margin-right:20px;'><img src='images/grain8.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span> <img src='images/grain6.png' width='80px' style='margin-right:20px;'><img src='images/grain11.png' width='80px' style='margin-right:20px;'><img src='images/grain12.png' width='80px' style='margin-right:20px;'><img src='images/grain10.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span> ] .w-35[ .border-box.w-100[ * **Experimental units**: 12 plots * **Observational units**: 12 plots * **Observation**: wheat yield * **Treatments**: combination of: * Water: irrigated or rain-fed * Fertilizer: type A or type B * **Allotment**: * .monash-blue[Water and fertilizer <i class="fas fa-arrow-right"></i> plots] * **Assignment**: random order ] ] .w-25[ <table class=" lightable-classic" style='font-family: "Arial Narrow", "Source Sans Pro", sans-serif; width: auto !important; margin-left: auto; margin-right: auto;'> <thead> <tr> <th style="text-align:left;"> Treatment </th> <th style="text-align:right;"> Replication </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/water1.png" width="40px"></span><span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/brand1.png" width="40px"></span> </td> <td style="text-align:right;"> 3 </td> </tr> <tr> <td style="text-align:left;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/water1.png" width="40px"></span><span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/brand2.png" width="40px"></span> </td> <td style="text-align:right;"> 3 </td> </tr> <tr> <td style="text-align:left;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/water2.png" width="40px"></span><span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/brand1.png" width="40px"></span> </td> <td style="text-align:right;"> 3 </td> </tr> <tr> <td style="text-align:left;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/water2.png" width="40px"></span><span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/brand2.png" width="40px"></span> </td> <td style="text-align:right;"> 3 </td> </tr> </tbody> </table> <table class=" lightable-classic" style='font-family: "Arial Narrow", "Source Sans Pro", sans-serif; width: auto !important; margin-left: auto; margin-right: auto;'> <thead> <tr> <th style="text-align:center;"> Treatment factor </th> <th style="text-align:center;"> Count </th> </tr> </thead> <tbody> <tr> <td style="text-align:center;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/brand1.png" width="40px"></span> </td> <td style="text-align:center;"> 6 </td> </tr> <tr> <td style="text-align:center;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/brand2.png" width="40px"></span> </td> <td style="text-align:center;"> 6 </td> </tr> <tr> <td style="text-align:center;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/water1.png" width="40px"></span> </td> <td style="text-align:center;"> 6 </td> </tr> <tr> <td style="text-align:center;"> <span style="width:50px;display:inline-block;margin-right:0px;"><img src="images/water2.png" width="40px"></span> </td> <td style="text-align:center;"> 6 </td> </tr> </tbody> </table> ] ] --- # Factorial treatment structure, nested unit structure, and treatment constraint .flex[ .w-25[ .border-box[ <img src='images/grain9.png' width='80px' style='margin-right:20px;'><img src='images/grain4.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span> ] .border-box[ <img src='images/grain2.png' width='80px' style='margin-right:20px;'><img src='images/grain5.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span> ] .border-box[ <img src='images/grain6.png' width='80px' style='margin-right:20px;'><img src='images/grain11.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span> ]] .w-25[ .border-box[ <img src='images/grain7.png' width='80px' style='margin-right:20px;'><img src='images/grain1.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span> ] .border-box[ <img src='images/grain3.png' width='80px' style='margin-right:20px;'><img src='images/grain8.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span> ] .border-box[ <img src='images/grain12.png' width='80px' style='margin-right:20px;'><img src='images/grain10.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span> ]] .w-50[ .border-box.w-100[ * **Units**: 6 strips with 2 plots each * **Observational units**: 12 plots * **Observation**: wheat yield * **Treatments**: combination of: * Water: irrigated or rain-fed * Fertilizer: type A or type B * **Allotment**: * .monash-blue[Water <i class="fas fa-arrow-right"></i> strip] * .monash-blue[Fertilizer <i class="fas fa-arrow-right"></i> plot] * **Assignment**: random order ] ] ] --- class: transition .tl[ # .f1[<i class="fas fa-book"></i> Some classical "named" experimental designs] ] <br> .tl.f2[ .box[A] Completely Randomised Design .box[B] Randomised Complete Block Design .box[C] Factorial Design .box[D] Split-Plot Design ] --- # .box[A] Completely Randomised Design (CRD) .center[ <img src='images/cow1.png' width='120px' style='margin-right:20px;'><img src='images/cow2.png' width='120px' style='margin-right:20px;'><img src='images/cow3.png' width='120px' style='margin-right:20px;'><img src='images/cow4.png' width='120px' style='margin-right:20px;'><img src='images/cow5.png' width='120px' style='margin-right:20px;'><img src='images/cow6.png' width='120px' style='margin-right:20px;'> <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span> ] <br> .border-box.margin-auto[ * **Experimental units**: 6 cows * **Observational units**: 6 cows * **Observation**: milk yield * **Treatments**: 3 types of supplements * **Allotment**: supplements <i class="fas fa-arrow-right"></i> cows * **Replication**: 2 each * **Assignment**: random order ] --- # .box[B] Randomised Complete Block Design (RCBD) .flex[ .w-50.center.pr3[ .border-box.h-100.relative.monash-bg-olive2[ <img src='images/cow1.png' width='120px' style='margin-right:20px;'><img src='images/cow2.png' width='120px' style='margin-right:20px;'><img src='images/cow3.png' width='120px' style='margin-right:20px;'> <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span> ]] .w-50.center[ .border-box.h-100.relative.monash-bg-olive2[ <img src='images/cow4.png' width='120px' style='margin-right:20px;'><img src='images/cow5.png' width='120px' style='margin-right:20px;'><img src='images/cow6.png' width='120px' style='margin-right:20px;'> <span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement1.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement2.png' width='40px'></span><span style='width:120px;display:inline-block;margin-right:20px;'><img src='images/supplement3.png' width='40px'></span> ]] ] <br> .border-box.margin-auto.w-40[ * **Units**: 2 pens with 3 cows each * **Observational units**: 6 cows * **Treatments**: 3 types of supplements * **Allotment**: supplements <i class="fas fa-arrow-right"></i> cows, with restriction such that each treatment appears once in each pen * **Assignment**: random order ] --- # .box[C] Factorial Design .flex[ .w-50[ <img src='images/grain9.png' width='80px' style='margin-right:20px;'><img src='images/grain4.png' width='80px' style='margin-right:20px;'><img src='images/grain7.png' width='80px' style='margin-right:20px;'><img src='images/grain1.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span> <img src='images/grain2.png' width='80px' style='margin-right:20px;'><img src='images/grain5.png' width='80px' style='margin-right:20px;'><img src='images/grain3.png' width='80px' style='margin-right:20px;'><img src='images/grain8.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span> <img src='images/grain6.png' width='80px' style='margin-right:20px;'><img src='images/grain11.png' width='80px' style='margin-right:20px;'><img src='images/grain12.png' width='80px' style='margin-right:20px;'><img src='images/grain10.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span> ] .w-50[ .border-box[ * **Experimental units**: 12 plots * **Observational units**: 12 plots * **Observation**: wheat yield * **Treatments**: combination of: * Water: irrigated or rain-fed * Fertilizer: type A or type B * **Allotment**: * .monash-blue[Water and fertilizer <i class="fas fa-arrow-right"></i> plots] * **Assignment**: random order ] ] ] --- # .box[D] Split-Plot Design .flex[ .w-25[ .border-box[ <img src='images/grain9.png' width='80px' style='margin-right:20px;'><img src='images/grain4.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span> ] .border-box[ <img src='images/grain2.png' width='80px' style='margin-right:20px;'><img src='images/grain5.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span> ] .border-box[ <img src='images/grain6.png' width='80px' style='margin-right:20px;'><img src='images/grain11.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span> ]] .w-25[ .border-box[ <img src='images/grain7.png' width='80px' style='margin-right:20px;'><img src='images/grain1.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span> ] .border-box[ <img src='images/grain3.png' width='80px' style='margin-right:20px;'><img src='images/grain8.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water2.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span> ] .border-box[ <img src='images/grain12.png' width='80px' style='margin-right:20px;'><img src='images/grain10.png' width='80px' style='margin-right:20px;'> <span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/water1.png' width='40px'></span><span style='width:50px;display:inline-block;margin-right:0px;'><img src='images/brand2.png' width='40px'></span> ]] .w-50[ <br> .border-box.margin-auto[ * **Units**: 6 strips with 2 plots each * **Observational units**: 12 plots * **Observation**: wheat yield * **Treatments**: combination of: * Water: irrigated or rain-fed * Fertilizer: type A or type B * **Allotment**: * Water <i class="fas fa-arrow-right"></i> strip * Fertilizer <i class="fas fa-arrow-right"></i> plot * **Assignment**: random order ] ] ] --- name: current class: transition animate__animated animate__slideInLeft .square-number[2] <br> # *Current state* of experimental design tools --- class: inform-slide center middle # .f-headline[CRAN Task View of <Br>Design of Experiments<br>] .f1[& Analysis of Experimental Data] contains # .f-headline[📦 .monash-blue[109 R-packages ]] .f5[based on the `ctv` package version 0.8.5] -- <i class="fab fa-python"></i> In contrast, only a handful of libraries exist in Python <br>(namely `pyDOE`, `pyDOE2`, `dexpy`, `experimenter` and `GPdoemd`). ??? * Sheer quantity and variation in the output experimental design in the R-packages are arguably unmatched with any other programming languages * E.g. in Python, there are only a handful of libraries that generate design of experiment exist (namely pyDOE, pyDOE2, dexpy, experimenter and GPdoemd) with limited outputs. * This demonstrates how R is a programming language with large statistical community contributions --- # Design of experiments area appear to have the least collaboration .flex[ .w-50[ <img src="images/network-graph.png" width = "100%"> .f4[Thanks to Dewi Lestari Amaliah for the graph!] .f3[ {{content}} ] ] .w-50[
]] -- <span class="monash-blue f2">Authors tend to work in silos <i class="fas fa-long-arrow-alt-right"></i> limited knowledge sharing across silos perhaps</span> --- # Top downloaded R-packages in the design of experiments .flex[ .w-60[ <img src="images/top-trend-plot-scrub-1.png" width="648" style="display: block; margin: auto;" /> ] .w-20[ **Top 5 in 2016** <table id="table-cran2016" class=" lightable-classic" style='font-family: "Arial Narrow", "Source Sans Pro", sans-serif; width: auto !important; margin-left: auto; margin-right: auto;'> <thead> <tr> <th style="text-align:left;"> Package </th> <th style="text-align:right;"> Downloads </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> agricolae </td> <td style="text-align:right;"> 73,521 </td> </tr> <tr> <td style="text-align:left;"> AlgDesign </td> <td style="text-align:right;"> 57,037 </td> </tr> <tr> <td style="text-align:left;"> ez </td> <td style="text-align:right;"> 37,488 </td> </tr> <tr> <td style="text-align:left;"> lhs </td> <td style="text-align:right;"> 23,518 </td> </tr> <tr> <td style="text-align:left;"> DoE.base </td> <td style="text-align:right;"> 20,651 </td> </tr> </tbody> </table> ] .w-20[ **Top 5 in 2020** <table id="table-cran2020" class=" lightable-classic" style='font-family: "Arial Narrow", "Source Sans Pro", sans-serif; width: auto !important; margin-left: auto; margin-right: auto;'> <thead> <tr> <th style="text-align:left;"> Package </th> <th style="text-align:right;"> Downloads </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> agricolae </td> <td style="text-align:right;"> 171,813 </td> </tr> <tr> <td style="text-align:left;"> lhs </td> <td style="text-align:right;"> 165,415 </td> </tr> <tr> <td style="text-align:left;"> AlgDesign </td> <td style="text-align:right;"> 153,582 </td> </tr> <tr> <td style="text-align:left;"> DiceKriging </td> <td style="text-align:right;"> 92,287 </td> </tr> <tr> <td style="text-align:left;"> DiceDesign </td> <td style="text-align:right;"> 88,160 </td> </tr> </tbody> </table> ] ] .center[ .f2[`agricolae` is one of the top downloaded] .f3[(total download based on logs from the RStudio CRAN mirror scrubbed by [Danyang Dai](https://twitter.com/Daidaidai2014))] ] --- class: transition # `agricolae` a case of classical named randomised designs --- class: font_small # .box[A] `agricolae::design.crd` **Completely randomised design** for `\(t = 3\)` treatments with `\(2\)` replicates each <pre><code> trt <- c("A", "B", "C") agricolae::.bg-yellow[design.crd](trt = trt, r = 2) </code></pre> .overflow-scroll.h---340[ ``` ## $parameters ## $parameters$design ## [1] "crd" ## ## $parameters$trt ## [1] "A" "B" "C" ## ## $parameters$r ## [1] 2 2 2 ## ## $parameters$serie ## [1] 2 ## ## $parameters$seed ## [1] 241038711 ## ## $parameters$kinds ## [1] "Super-Duper" ## ## $parameters[[7]] ## [1] TRUE ## ## ## $book ## plots r trt ## 1 101 1 B ## 2 102 1 C ## 3 103 1 A ## 4 104 2 A ## 5 105 2 C ## 6 106 2 B ``` ] <div class="plot-box" style="position:absolute;top: 35%; right: 50px;"> <img src="images/ggcrd-1.png" width = "300px"> </div> --- # .box[B] `agricolae::design.rcbd` **Randomised complete block design** for `\(t =3\)` treatments with `\(2\)` blocks <pre><code> trt <- c("A", "B", "C") agricolae::.bg-yellow[design.rcbd](trt = trt, r = 2) </code></pre> .overflow-scroll.h---340[ ``` ## $parameters ## $parameters$design ## [1] "rcbd" ## ## $parameters$trt ## [1] "A" "B" "C" ## ## $parameters$r ## [1] 2 ## ## $parameters$serie ## [1] 2 ## ## $parameters$seed ## [1] 351889891 ## ## $parameters$kinds ## [1] "Super-Duper" ## ## $parameters[[7]] ## [1] TRUE ## ## ## $sketch ## [,1] [,2] [,3] ## [1,] "A" "C" "B" ## [2,] "B" "C" "A" ## ## $book ## plots block trt ## 1 101 1 A ## 2 102 1 C ## 3 103 1 B ## 4 201 2 B ## 5 202 2 C ## 6 203 2 A ``` ] <div class="plot-box" style="position:absolute;bottom: 100px; right: 50px;"> <br> <img src="images/ggrcbd-1.png" width = "300px"> </div> --- class: font_small # .box[C] `agricolae::design.ab()` **Factorial design** for `\(t = 3 \times 2\)` treatments with `\(2\)` replication for each treatment <pre><code> agricolae::.bg-yellow[design.ab](trt = c(3, 2), r = 2, design = "crd") </code></pre> .overflow-scroll.h---340[ ``` ## $parameters ## $parameters$design ## [1] "factorial" ## ## $parameters$trt ## [1] "1 1" "1 2" "2 1" "2 2" "3 1" "3 2" ## ## $parameters$r ## [1] 2 2 2 2 2 2 ## ## $parameters$serie ## [1] 2 ## ## $parameters$seed ## [1] 34955907 ## ## $parameters$kinds ## [1] "Super-Duper" ## ## $parameters[[7]] ## [1] TRUE ## ## $parameters$applied ## [1] "crd" ## ## ## $book ## plots r A B ## 1 101 1 2 2 ## 2 102 1 2 1 ## 3 103 1 1 2 ## 4 104 2 2 1 ## 5 105 1 3 1 ## 6 106 2 2 2 ## 7 107 1 1 1 ## 8 108 2 3 1 ## 9 109 2 1 2 ## 10 110 2 1 1 ## 11 111 1 3 2 ## 12 112 2 3 2 ``` ] Note *not* A/B testing! <div class="plot-box" style="position:absolute;top: 200px; right: 50px;"> <br> <img src="images/ggfac-1.png" width="300px"> <br> </div> --- class: font_small # .box[D] `agricolae::design.split()` **Split-plot design** for `\(t = 2 \times 4\)` treatments with `\(2\)` replication for each treatment <pre><code> trt1 <- c("I", "R"); trt2 <- LETTERS[1:4] agricolae::.bg-yellow[design.split](trt1 = trt1, trt2 = trt2, r = 2, design = "crd") </code></pre> .overflow-scroll.h---300[ ``` ## $parameters ## $parameters$design ## [1] "split" ## ## $parameters[[2]] ## [1] TRUE ## ## $parameters$trt1 ## [1] "I" "R" ## ## $parameters$applied ## [1] "crd" ## ## $parameters$r ## [1] 2 2 ## ## $parameters$serie ## [1] 2 ## ## $parameters$seed ## [1] -1981495681 ## ## $parameters$kinds ## [1] "Super-Duper" ## ## ## $book ## plots splots r trt1 trt2 ## 1 101 1 1 R D ## 2 101 2 1 R C ## 3 101 3 1 R B ## 4 101 4 1 R A ## 5 102 1 1 I A ## 6 102 2 1 I C ## 7 102 3 1 I D ## 8 102 4 1 I B ## 9 103 1 2 R B ## 10 103 2 2 R C ## 11 103 3 2 R A ## 12 103 4 2 R D ## 13 104 1 2 I C ## 14 104 2 2 I A ## 15 104 3 2 I B ## 16 104 4 2 I D ``` ] <div class="plot-box" style="position:absolute;top: 300px; right: 200px;"> <img src="images/split-plot-graph-1.png" width="300px"> </div> --- class: middle monash-bg-gray50 .blockquote.w-100.f1[ .pl3[ Good design considers units and treatments first, and then allocates treatments to units. It does not choose from a menu of named designs. .right[—Rosemary Bailey (2008)] ]] --- class: transition # `AlgDesign` a case of optimised (model-based) designs --- # `AlgDesign::gen.factorial()` * First, a **helper function** to create the treatment (and replicate) combinations: ```r dat <- AlgDesign::gen.factorial(levels = 3, nVars = 3, center = FALSE, varNames = c("irrigation", "fertilizer", "variety"), factors = "all") dat ``` .overflow-scroll.h---240[ ``` ## irrigation fertilizer variety ## 1 1 1 1 ## 2 2 1 1 ## 3 3 1 1 ## 4 1 2 1 ## 5 2 2 1 ## 6 3 2 1 ## 7 1 3 1 ## 8 2 3 1 ## 9 3 3 1 ## 10 1 1 2 ## 11 2 1 2 ## 12 3 1 2 ## 13 1 2 2 ## 14 2 2 2 ## 15 3 2 2 ## 16 1 3 2 ## 17 2 3 2 ## 18 3 3 2 ## 19 1 1 3 ## 20 2 1 3 ## 21 3 1 3 ## 22 1 2 3 ## 23 2 2 3 ## 24 3 2 3 ## 25 1 3 3 ## 26 2 3 3 ## 27 3 3 3 ``` ] --- # `AlgDesign::optFederov` * Optimum design with 14 trials using Federov's exchange algorithm ```r AlgDesign::optFederov(frml = ~ ., # assume additive effects data = dat, nTrials = 14, criterion = "D") ``` .overflow-scroll.h---240[ ``` ## $D ## [1] 0.2343815 ## ## $A ## [1] 6.25 ## ## $Ge ## [1] 0.727 ## ## $Dea ## [1] 0.687 ## ## $design ## irrigation fertilizer variety ## 2 2 1 1 ## 3 3 1 1 ## 4 1 2 1 ## 5 2 2 1 ## 7 1 3 1 ## 9 3 3 1 ## 10 1 1 2 ## 13 1 2 2 ## 15 3 2 2 ## 17 2 3 2 ## 19 1 1 3 ## 23 2 2 3 ## 24 3 2 3 ## 25 1 3 3 ## ## $rows ## [1] 2 3 4 5 7 9 10 13 15 17 19 23 24 25 ``` ] --- # `AlgDesign::optBlock()` * An optimal design with 3 blocks of size 9. ```r AlgDesign::optBlock(frml = ~ ., # assume additive effects withinData = dat, blocksizes = rep(9, 3), criterion = "D") ``` .overflow-scroll.h---240[ ``` ## $D ## [1] 0.1924501 ## ## $diagonality ## [1] 0.866 ## ## $Blocks ## $Blocks$B1 ## irrigation fertilizer variety ## 2 2 1 1 ## 5 2 2 1 ## 8 2 3 1 ## 12 3 1 2 ## 15 3 2 2 ## 16 1 3 2 ## 21 3 1 3 ## 22 1 2 3 ## 25 1 3 3 ## ## $Blocks$B2 ## irrigation fertilizer variety ## 1 1 1 1 ## 6 3 2 1 ## 9 3 3 1 ## 10 1 1 2 ## 13 1 2 2 ## 18 3 3 2 ## 20 2 1 3 ## 23 2 2 3 ## 26 2 3 3 ## ## $Blocks$B3 ## irrigation fertilizer variety ## 3 3 1 1 ## 4 1 2 1 ## 7 1 3 1 ## 11 2 1 2 ## 14 2 2 2 ## 17 2 3 2 ## 19 1 1 3 ## 24 3 2 3 ## 27 3 3 3 ## ## ## $design ## irrigation fertilizer variety ## 2 2 1 1 ## 5 2 2 1 ## 8 2 3 1 ## 12 3 1 2 ## 15 3 2 2 ## 16 1 3 2 ## 21 3 1 3 ## 22 1 2 3 ## 25 1 3 3 ## 1 1 1 1 ## 6 3 2 1 ## 9 3 3 1 ## 10 1 1 2 ## 13 1 2 2 ## 18 3 3 2 ## 20 2 1 3 ## 23 2 2 3 ## 26 2 3 3 ## 3 3 1 1 ## 4 1 2 1 ## 7 1 3 1 ## 11 2 1 2 ## 14 2 2 2 ## 17 2 3 2 ## 19 1 1 3 ## 24 3 2 3 ## 27 3 3 3 ## ## $rows ## [1] 2 5 8 12 15 16 21 22 25 1 6 9 10 13 18 20 23 26 3 4 7 11 14 17 19 24 27 ``` ] --- class: inform-slide middle center .f1[What were the experiments about?] -- # .f-headline[Context is key in <br>experimental design] -- .f1[Units and allocation are often *implicitly* understood] --- name: software class: transition animate__animated animate__slideInLeft .square-number[3] <br> # .yellow[*Software design*]<Br> for an everyday user --- class: middle center inform-slide # .f-headline[Benefits of programming] .flex[ .w-20[ ] .w-70.tl.f1[ {{content}} ] .w-10[ ]] -- 1. Computational reproducibility {{content}} -- 1. Allows greater flexibility {{content}} -- 1. Can promote higher order thinking<Br> {{content}} -- *if the software is designed with the user in mind* --- class: middle center inform-slide # .f-headline[Software design for users] .flex[ .w-20[ ] .w-70.tl.f1[ {{content}} ] .w-10[ ]] -- * A user interacts with the **software interface** {{content}} -- * The interface design can make a *huge difference to an everyday user* --- layout: true # <i class="fas fa-smile"></i> Drawing faces .circle[1] .grey[Specific instructions for the computer] # Drawing a .monash-blue[happy] face --- --- count: false .flex[ .w-50[ .f4[ ```r library(grid) # face shape grid.circle(x = 0.5, y = 0.5, r = 0.5) ``` ] ] .w-50[ .f4[ <br> <img src="images/happy-1-1.png" width="432" style="display: block; margin: auto;" /> ] ] ] --- count: false .flex[ .w-50[ .f4[ ```r library(grid) # face shape grid.circle(x = 0.5, y = 0.5, r = 0.5) # eyes grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) ``` ] ] .w-50[ .f4[ <br> <img src="images/happy-2-1.png" width="432" style="display: block; margin: auto;" /> ] ] ] --- count: false .flex[ .w-50[ .f4[ ```r library(grid) # face shape grid.circle(x = 0.5, y = 0.5, r = 0.5) # eyes grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) # mouth grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE) ``` ] ] .w-50[ .f4[ <br> <img src="images/happy-3-1.png" width="432" style="display: block; margin: auto;" /> ] ] ] --- layout: true # <i class="fas fa-frown"></i> Drawing faces .circle[1] .grey[Specific instructions for the computer] # Drawing a .monash-blue[sad] face --- --- count: false .flex[ .w-50[ .f4[ ```r library(grid) # face shape grid.circle(x = 0.5, y = 0.5, r = 0.5) # eyes grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) # mouth grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE, * curvature = -1) ``` ] ] .w-50[ .f4[ <br> .animated.delay-1s.zoomIn[ <img src="images/sad-1-1.png" width="432" style="display: block; margin: auto;" /> ] ] ] ] --- layout: true # <i class="fas fa-grin-alt"></i> Drawing faces .circle[2] .grey[Functional instructions for the computer] # Use .monash-blue[functions] to draw faces --- .flex[ .w-60.h-100.pr3.f5[ ```r face1 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE) } face2 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE, curvature = -1) } ``` ] .w-40[ ] ] --- count: false .flex[ .w-60.h-100.pr3.f5[ ```r face1 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE) } face2 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE, curvature = -1) } ``` ] .w-40[ .flex[ .w-50.pr2[ ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> ] .w-50[ ] ] ] ] --- count: false .flex[ .w-60.h-100.pr3.f5[ ```r face1 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE) } face2 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE, curvature = -1) } ``` ] .w-40[ .flex[ .w-50.pr2[ ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> ] .w-50[ ```r face2() ``` <img src="images/sad-fn-1.png" width="68.4" style="display: block; margin: auto;" /> ] ] ] ] --- count: false .flex[ .w-60.h-100.pr3.f5[ ```r face1 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE) } face2 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE, curvature = -1) } ``` ] .w-40[ .flex[ .w-50.pr2[ ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> <br> ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> ] .w-50[ ```r face2() ``` <img src="images/sad-fn-1.png" width="68.4" style="display: block; margin: auto;" /> ] ] ] ] ??? * I can repeatedly call the function * Drawing happy or sad faces are easier now --- count: false .flex[ .w-60.h-100.pr3.f5[ ```r face1 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE) } face2 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE, curvature = -1) } ``` ] .w-40[ .flex[ .w-50.pr2[ ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> <br> ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> ] .w-50[ ```r face2() ``` <img src="images/sad-fn-1.png" width="68.4" style="display: block; margin: auto;" /> <br> ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> ]]]] --- count: false .flex[ .w-60.h-100.pr3.f5[ ```r face1 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE) } face2 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE, curvature = -1) } ``` ] .w-40[ .flex[ .w-50.pr2[ ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> <br> ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> <br> ```r face2() ``` <img src="images/sad-fn-1.png" width="68.4" style="display: block; margin: auto;" /> ] .w-50[ ```r face2() ``` <img src="images/sad-fn-1.png" width="68.4" style="display: block; margin: auto;" /> <br> ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> ]]]] --- count: false .flex[ .w-60.h-100.pr3.f5[ ```r face1 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE) } face2 <- function() { grid::grid.circle(x = 0.5, y = 0.5, r = 0.5) grid::grid.circle(x = c(0.35, 0.65), y = c(0.6, 0.6), r = 0.05, gp = gpar(fill = "black")) grid::grid.curve(x1 = 0.4, y1 = 0.4, x2 = 0.6, y2 = 0.4, square = FALSE, curvature = -1) } ``` ] .w-40[ .flex[ .w-50.pr2[ ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> <br> ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> <br> ```r face2() ``` <img src="images/sad-fn-1.png" width="68.4" style="display: block; margin: auto;" /> ] .w-50[ ```r face2() ``` <img src="images/sad-fn-1.png" width="68.4" style="display: block; margin: auto;" /> <br> ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> <br> ```r face1() ``` <img src="images/happy-fn-1.png" width="68.4" style="display: block; margin: auto;" /> ]]]] --- layout: true # <i class="fas fa-grin-alt"></i> Drawing faces .circle[3] .grey[Human-centered design] # Adapt computational systems .monash-blue[for human] use with syntactic sugar --- --- count: false .flex[ .w-33.pr2[ ```r face1() ``` <img src="images/happy-fn-1.png" width="144" style="display: block; margin: auto;" /> ] .w-33.pr2[ ```r face2() ``` <img src="images/sad-fn-1.png" width="144" style="display: block; margin: auto;" /> ] .w-33.pr2[ ```r face3() ``` .center.f-headline[ ? ] ] ] -- <br> **Alternative function names:** .flex[ .w-33.pr2[ ```r face_happy() ``` ] .w-33.pr2[ ```r face_sad() ``` ] .w-33.pr2[ ```r face_angry() ``` ]] <span class=' f2 '><i class="fas fa-question-circle animate__animated animate__heartBeat animate__infinite "></i> Now what do you expect for the output? </span> -- * Functions are named after emotions * Emotion is a surrogate for describing the entire face --- layout: false class: middle inform-slide .f1[What if you want to draw a face that is winking? <i class="far fa-smile-wink"></i>] -- .f1[... with a grin? <i class="far fa-grin-wink"></i>] -- .f1[... or with the tongue out? <i class="far fa-grin-tongue-wink"></i>] -- <br> .f1[The differences between facial features are small, but you need an **entire new function** that contains instructions for the *whole* face and a **new function name**.] -- <span class=' f2 '><i class="fas fa-question-circle animate__animated animate__heartBeat animate__infinite "></i> How would you design the system to draw faces? </span> --- layout: true # <i class="fas fa-surprise"></i> Drawing faces .circle[4] .grey[Rethinking function arguments as facial parts] # Let's .monash-blue[reframe] how we think --- --- <i class="fab fa-github"></i> https://github.com/emitanaka/portrait ```r library(portrait) ``` -- .flex[ .w-30[ * Let's **_reframe_** how we think * A face is made up of: * eyes * mouth * shape ] .w-70[ ]] --- <i class="fab fa-github"></i> https://github.com/emitanaka/portrait ```r library(portrait) ``` .flex[ .w-30[ * Let's **_reframe_** how we think * A face is made up of: * eyes * mouth * shape ] .w-70[ .flex[ .w-50.pr3[ ```r face(eyes = "googly", mouth = "smile", shape = "round") ``` <img src="images/face-googly-1.png" width="144" style="display: block; margin: auto;" /> ] .w-50[ {{content}} ]] ]] -- ```r face(eyes = "round", mouth = "sad", shape = "oval") ``` <img src="images/face-googly2-1.png" width="144" style="display: block; margin: auto;" /> -- * We can easily make large number of faces with a single function -- * It makes users think about faces based on facial features -- <span class=' f2 '><i class="fas fa-question-circle animate__animated animate__heartBeat animate__infinite "></i> But what about hair, nose and other facial features? </span> --- .flex[ .w-30[ * A face is made up of: * eyes * mouth * shape * **hair** <i class="fas fa-hand-point-left"></i> * **nose** <i class="fas fa-hand-point-left"></i> ] .w-70[ * Adding more arguments: .flex[ .w-50.pr3[ ```r face(eyes = "googly", mouth = "smile", shape = "round", * hair = "none", * nose = "simple") ``` <img src="images/face-googly-2-1.png" width="144" style="display: block; margin: auto;" /> ] .w-50[ ```r face(eyes = "googly", mouth = "smile", shape = "round", * hair = "mohawk", nose = "simple") ``` <img src="images/face-googly-3-1.png" width="144" style="display: block; margin: auto;" /> ]]] ] -- <br> <span class=' f2 '><i class="fas fa-question-circle animate__animated animate__heartBeat animate__infinite "></i> But about other facial features? </span> --- layout: true # <i class="fas fa-meh-blank"></i> Drawing faces .circle[5] .grey[Object oriented programming] # Rethink everything as an .monash-blue[object] --- --- .flex.h-100[ .w-50.pr3[ ```r library(portrait) *face() ``` ] .w-30.pl3[ .output-box.w-100[ <img src="images/face1-1.png" width="288" style="display: block; margin: auto;" /> ]] ] --- .flex.h-100[ .w-50.pr3[ ```r library(portrait) face() + * cat_shape() ``` ] .w-30.pl3[ .output-box.w-100[ <img src="images/face2-1.png" width="288" style="display: block; margin: auto;" /> ]] ] --- .flex.h-100[ .w-50.pr3[ ```r library(portrait) face() + cat_shape() + * cat_eyes() ``` ] .w-30.pl3[ .output-box.w-100[ <img src="images/face3-1.png" width="288" style="display: block; margin: auto;" /> ]] ] --- .flex.h-100[ .w-50.pr3[ ```r library(portrait) face() + cat_shape() + cat_eyes() + * cat_nose() ``` ] .w-30.pl3[ .output-box.w-100[ <img src="images/face4-1.png" width="288" style="display: block; margin: auto;" /> ]]] --- .flex.h-100[ .w-50.pr3[ ```r library(portrait) face() + cat_shape() + cat_eyes() + cat_nose() + * cat_whiskers() ``` ] .w-30.pl3[ .output-box.w-100[ <img src="images/face5-1.png" width="288" style="display: block; margin: auto;" /> ] ] ] --- .flex.h-100[ .w-50.pr3[ ```r library(portrait) face() + * dog_shape() + * cat_eyes(fill = "red") + cat_nose() + cat_whiskers() ``` ] .w-30.pl3[ .output-box.w-100[ <img src="images/face6-1.png" width="288" style="display: block; margin: auto;" /> ] ] ] --- .flex.h-100[ .w-50.pr3[ ```r library(portrait) face() + dog_shape() + cat_eyes(fill = "red") + cat_nose() + * cat_whiskers(size = 6, * color = "brown") + * sketch_mouth(smile = 0.3, * size = 3) ``` ] .w-30.pl3[ .output-box.w-100[ <img src="images/face7-1.png" width="288" style="display: block; margin: auto;" /> ] ] ] --- layout: false class: inform-slide middle # .f1[Software design for everyday users] .f2.pl3[ 1. Imperative instructions for the computer <i class="fas fa-long-arrow-alt-right"></i> more work for humans 1. Recipe functions <i class="fas fa-long-arrow-alt-right"></i> One function to draw one complete face 1. Syntactic syntax <i class="fas fa-long-arrow-alt-right"></i> Make it easier for humans to read code 1. A function with multiple arguments <i class="fas fa-long-arrow-alt-right"></i> <br>One function to draw multiple complete faces 1. Finite number of functions to draw<br> _infinite_ possible _incomplete_ and complete faces ] .f1[ The tool **_you choose_** to use can .monash-blue[**enforce a certain way of thinking**] and may restrict you on what you can do. ] ??? * You can lock yourself in a system that doesn't help you grow. --- name: edibble class: transition animate__animated animate__slideInLeft .square-number[4] <br> # The .yellow[**grammar of experimental designs**] with .yellow[`edibble`] --- # The *grammar of experimental design* with `edibble` .flex.h-100[ .w-65[ ```r library(edibble) *start_design("My experiment") ``` ] .w-35.pl3.pr3.monash-bg-gray10[ .output-box.f6.truncate[ <img src="images//edibble-part1.svg" width="350%" style="display: block; margin: auto;" /> ] ] ] --- # The *grammar of experimental design* with `edibble` .flex.h-100[ .w-65[ ```r library(edibble) start_design("My experiment") %>% * set_units(wholeplot = 4) ``` ] .w-35.pl3.pr3.monash-bg-gray10[ .output-box.f6.w-100.truncate[ <img src="images//edibble-part2.svg" width="350%" style="display: block; margin: auto;" /> ] ] ] --- # The *grammar of experimental design* with `edibble` .flex.h-100[ .w-65[ ```r library(edibble) start_design("My experiment") %>% set_units(wholeplot = 4) %>% * set_units(subplot = nested_in(wholeplot, 2)) ``` ] .w-35.pl3.pr3.monash-bg-gray10[ .output-box.f6.w-100.truncate[ <img src="images//edibble-part3.svg" width="350%" style="display: block; margin: auto;" /> ] ] ] --- # The *grammar of experimental design* with `edibble` .flex.h-100[ .w-65[ ```r library(edibble) start_design("My experiment") %>% * set_units(wholeplot = 4, * subplot = nested_in(wholeplot, 2)) ``` ] .w-35.pl3.pr3.monash-bg-gray10[ .output-box.f6.w-100.truncate[ <img src="images//edibble-part4.svg" width="350%" style="display: block; margin: auto;" /> ] ] ] --- # The *grammar of experimental design* with `edibble` .flex.h-100[ .w-65[ ```r library(edibble) start_design("My experiment") %>% set_units(wholeplot = 4, subplot = nested_in(wholeplot, 2)) %>% * set_trts(water = c("irrigated", "rainfed"), * fertilizer = c("A", "B")) ``` ] .w-35.pl3.pr3.monash-bg-gray10[ .output-box.f6.w-100.truncate[ <img src="images//edibble-part5.svg" width="350%" style="display: block; margin: auto;" /> ] ] ] --- # The *grammar of experimental design* with `edibble` .flex[ .w-65[ ```r library(edibble) start_design("My experiment") %>% * set_trts(water = c("irrigated", "rainfed"), * fertilizer = c("A", "B")) %>% set_units(wholeplot = 4, subplot = nested_in(wholeplot, 2)) ``` ] .w-35.pl3.pr3.monash-bg-gray10[ .output-box.f6.w-100.truncate[ <img src="images//edibble-part6.svg" width="350%" style="display: block; margin: auto;" /> ] ] ] --- # The *grammar of experimental design* with `edibble` .flex.h-100[ .w-65[ ```r library(edibble) start_design("My experiment") %>% * set_trts(water = c("irrigated", "rainfed")) %>% set_units(wholeplot = 4) %>% * set_trts(fertilizer = c("A", "B")) %>% set_units(subplot = nested_in(wholeplot, 2)) ``` ] .w-35.pl3.pr3.monash-bg-gray10[ .output-box.f6.w-100.truncate[ <img src="images//edibble-part7.svg" width="350%" style="display: block; margin: auto;" /> ] ] ] --- # The *grammar of experimental design* with `edibble` .flex.h-100[ .w-65[ ```r library(edibble) start_design("My experiment") %>% set_units(wholeplot = 4, subplot = nested_in(wholeplot, 2)) %>% set_trts(water = c("irrigated", "rainfed"), fertilizer = c("A", "B")) %>% * allot_trts(water ~ wholeplot, * fertilizer ~ subplot) ``` ] .w-35.pl3.pr3.monash-bg-gray10[ .output-box.f6.w-100.truncate[ <img src="images//edibble-part8.svg" width="350%" style="display: block; margin: auto;" /> ] ] ] --- # The *grammar of experimental design* with `edibble` .flex.h-100[ .w-65[ ```r library(edibble) start_design("My experiment") %>% set_units(wholeplot = 4, subplot = nested_in(wholeplot, 2)) %>% set_trts(water = c("irrigated", "rainfed"), fertilizer = c("A", "B")) %>% allot_trts(water ~ wholeplot, fertilizer ~ subplot) %>% * assign_trts("random", seed = 1) ``` ] .w-35.pl3.pr3.monash-bg-gray10[ .output-box.f6.w-100.truncate[ <img src="images//edibble-part9.svg" width="350%" style="display: block; margin: auto;" /> ] ] ] --- # The *grammar of experimental design* with `edibble` .flex.h-100[ .w-65[ ```r library(edibble) start_design("My experiment") %>% set_units(wholeplot = 4, subplot = nested_in(wholeplot, 2)) %>% set_trts(water = c("irrigated", "rainfed"), fertilizer = c("A", "B")) %>% allot_trts(water ~ wholeplot, fertilizer ~ subplot) %>% assign_trts("random", seed = 1) %>% * serve_table() ``` ] .w-35.pl3.pr3.monash-bg-gray10[ .output-box.f6.w-100.truncate[ <img src="images//edibble-final.svg" width="200%" style="display: block; margin: auto;" /> ] ] ] --- # The *grammar of experimental design* with `edibble` .flex.h-100[ .w-65[ ```r library(edibble) start_design("Modified design") %>% * set_units(block = 2, * subplot = nested_in(block, 4)) %>% set_trts(water = c("irrigated", "rainfed"), fertilizer = c("A", "B")) %>% * allot_trts(water:fertilizer ~ subplot) %>% assign_trts("random", seed = 1) %>% serve_table() ``` ] .w-35.pl3.pr3.monash-bg-gray10[ .output-box.f6.w-100.truncate[ <img src="images//edibble-rcbd.svg" width="200%" style="display: block; margin: auto;" /> ] * The resulting design is what we call "randomised complete block design" ] ] -- --- name: edibble # The *grammar of experimental design* with `edibble` .flex.h-100[ .w-65[ ```r library(edibble) start_design("Modified design") %>% set_units(block = 2, subplot = nested_in(block, 4)) %>% set_trts(water = c("irrigated", "rainfed"), fertilizer = c("A", "B")) %>% allot_trts(water:fertilizer ~ subplot) %>% assign_trts("random", seed = 1) %>% * set_rcrds_of(subplot = c("yield", "disease"), * block = "manager") %>% serve_table() ``` * The functions are reminiscent of the fundamental experimental terminology [<i class="fas fa-caret-right"></i>](#terms) ] .w-35.pl3.pr3.monash-bg-gray10[ .output-box.f6.w-100.truncate[ <img src="images//edibble-rcbd-response.svg" width="135%" style="display: block; margin: auto;" /> ] ] ] --- # The *grammar of experimental design* with `edibble` ```r out <- start_design("Modified design") %>% set_units(block = 2, subplot = nested_in(block, 4)) %>% set_trts(water = c("irrigated", "rainfed"), fertilizer = c("A", "B")) %>% allot_trts(water:fertilizer ~ subplot) %>% assign_trts("random", seed = 1) %>% set_rcrds_of(subplot = c("yield", "disease"), block = "manager") %>% * expect_rcrds(yield = to_be_numeric(with_value(">=", 0)), * disease = to_be_factor(levels = c("none", "moderate", "severe"))) %>% serve_table() ``` -- ```r export_design(out, file = "design-layout.xlsx", overwrite = TRUE) ``` * The exported file has data validation features embedded --- class: inform-slide middle center .f1[There are more .f3[(not-well documented)] features in `edibble`] -- .f1[More on those on Thursday!] --- class: inform-slide middle .f1[ * Our understanding of experimental design is <span class="monash-blue">**growing**</span> and so the tool should <span class="monash-blue">**evolve**</span> with better understanding {{content}} ] -- * The idea for `edibble` was conceived early 2019, the code base was released publicly on 31st Dec 2020. {{content}} -- * Since its initial public realease, underlying structure in `edibble` has evolved drastically for the better {{content}} -- * The development of a good tool is a community effort so... --- class: inform-slide # .f1[Get in touch!] .f2[ * The purpose of `edibble` is to help you plan experiments better * `edibble` gets better with feedback ] <ul class="fa-ul f2"> <li><span class="fa-li"><i class="fas fa-link fa-spin"></i></span>Slides: <a href='https://emitanaka.org/slides/stats4bio2021/edibble'>emitanaka.org/slides/stats4bio2021/edibble</a> </li> <li><span class="fa-li"><i class="fab fa-r-project"></i></i></span> Package documentation: <a href='https://edibble.emitanaka.org'>edibble.emitanaka.org</a></li> <li><span class="fa-li"><i class="fab fa-github"></i></span>Source code: <a href='https://github.com/emitanaka/edibble'>github.com/emitanaka/edibble</a></li> <li><span class="fa-li"><i class="fas fa-envelope"></i></span><a href="mailto:emi.tanaka@monash.edu">emi.tanaka@monash.edu</a> <i class="fab fa-twitter "></i> <a href="https://twitter.com/statsgen">@statsgen</a></li> </ul> .f2[ * Feature requests or issues with `edibble`? Submit or upvote here: <a href='https://github.com/emitanaka/edibble/issues'>github.com/emitanaka/edibble/issues</a>, send me an email or tell me now! ] ??? * `edibble` is a community effort * make use