From af6193287c5c54daf914fee2a8d501b8adeaa6bf Mon Sep 17 00:00:00 2001 From: AJ Rossini Date: Thu, 17 Sep 2009 16:01:52 +0200 Subject: [PATCH] talk materials. --- Doc/talks/Rossini-DSC-July2009.lisp | 124 +++++++ Doc/talks/Rossini-Vandy-Oct2009.tex | 640 +++++++++++++++++++++--------------- Doc/talks/test1.png | Bin 0 -> 37452 bytes 3 files changed, 493 insertions(+), 271 deletions(-) create mode 100644 Doc/talks/Rossini-DSC-July2009.lisp create mode 100644 Doc/talks/test1.png diff --git a/Doc/talks/Rossini-DSC-July2009.lisp b/Doc/talks/Rossini-DSC-July2009.lisp new file mode 100644 index 0000000..a65b2d9 --- /dev/null +++ b/Doc/talks/Rossini-DSC-July2009.lisp @@ -0,0 +1,124 @@ +;;; -*- mode: lisp -*- + +;;; Time-stamp: <2009-07-14 15:09:33 tony> +;;; Creation: <2009-03-12 17:14:56 tony> +;;; File: plotting-data.lisp +;;; Author: AJ Rossini +;;; Copyright: (c)2009--, AJ Rossini. BSD, LLGPL, or GPLv2, depending +;;; on how it arrives. +;;; Purpose: Example of generating plots. + +;;; What is this talk of 'release'? Klingons do not make software +;;; 'releases'. Our software 'escapes', leaving a bloody trail of +;;; designers and quality assurance people in its wake. + +;;; This organization and structure is new to the 21st Century +;;; version.. Think, "21st Century Schizoid Man". + +;; SETUP FOR PLOT EXAMPLE: +(in-package :cl-user) + +(defpackage :cl-2d-user-x11 + (:use :cl :cl-cairo2 :cl-2d :cl-numlib :cl-colors :bind :cls) + (:shadowing-import-from :lisp-stat call-method call-next-method + + expt + - * / ** mod rem abs 1+ 1- log exp sqrt sin cos tan + asin acos atan sinh cosh tanh asinh acosh atanh float random + truncate floor ceiling round minusp zerop plusp evenp oddp + < <= = /= >= > > ;; complex + conjugate realpart imagpart phase + min max logand logior logxor lognot ffloor fceiling + ftruncate fround signum cis + + <= float imagpart)) + +(in-package :cl-2d-user-x11) + +;; PLOT EXAMPLE +#+nil +(progn + + + ;; this is how you create an X11 frame. If you supply a + ;; background-color to as-frame, each plot will clear the frame with + ;; this color. + + (defparameter *frame1* (as-frame (create-xlib-image-context 300 300) + :background-color +white+)) + + ;; or netbook size, picture is similar but on a lower-res display window. + (defparameter *frame2* (as-frame (create-xlib-image-context 200 200) + :background-color +white+)) + + (plot-function *frame1* + #'exp (interval-of 0 2) + :x-title "x" + :y-title "exp(x)") + + ;; split the frame, and you can draw on the subframes independently. + ;; I do this a lot. + + (bind ((#2A((f1 f2) (f3 f4)) + (split-frame *frame2* (percent 50) (percent 50)))) + (defparameter *f1* f1) + (defparameter *f2* f2) + (defparameter *f3* f3) + (defparameter *f4* f4)) + + + (bind ((#2A((f1 f2) (f3 f4)) + (split-frame *frame2* (percent 75) (percent 25)))) + (defparameter *f1* f1) + (defparameter *f2* f2) + (defparameter *f3* f3) + (defparameter *f4* f4)) + + (plot-function *f1* #'sin (interval-of 0 2) :x-title "x" :y-title "sin(x)") + (plot-function *f2* #'cos (interval-of 0 2) :x-title "x" :y-title "cos(x)") + (plot-function *f3* #'tan (interval-of 0 2) :x-title "x" :y-title "tan(x)") + (plot-function *f4* #'/ (interval-of 0 2) :x-title "x" :y-title "1/x") + + (clear *frame1*) + + + (let* ((n 500) + (xs (num-sequence :from 0 :to 10 :length n)) + (ys (map 'vector #'(lambda (x) (+ x 8 (random 4.0))) xs)) + (weights (replicate #'(lambda () (1+ (random 10))) n 'fixnum)) + (da (plot-simple *frame1* (interval-of 0 10) (interval-of 10 20) + :x-title "x" :y-title "y"))) + (draw-symbols da xs ys :weights weights)) + + (xlib-image-context-to-png (context *frame1*) "/home/tony/test1.png") + (xlib-image-context-to-png (context *frame2*) "/home/tony/test2.png") + ) + + +;;; EXAMPLE FOR DSC2009 + (defparameter *frame2* (as-frame (create-xlib-image-context 400 400) + :background-color +white+)) + + (bind ((#2A((f1 f2) (f3 f4)) + (split-frame *frame2* (percent 50) (percent 50)))) + (defparameter *f1* f1) + (defparameter *f2* f2) + (defparameter *f3* f3) + (defparameter *f4* f4)) + (plot-function *f1* #'sin (interval-of 0 2) :x-title "x" :y-title "sin(x)") + (plot-function *f2* #'cos (interval-of 0 2) :x-title "x" :y-title "cos(x)") + (plot-function *f3* #'tan (interval-of 0 2) :x-title "x" :y-title "tan(x)") + + (num-sequence :from 0 :to 10 :length 30) + + (let* ((n 500) + (xs (num-sequence :from 0 :to 10 :length n)) + (ys (map 'vector #'(lambda (x) (+ x 8 (random 4.0))) xs)) + (weights (replicate #'(lambda () (1+ (random 10))) n 'fixnum)) + (da (plot-simple *f4* (interval-of 0 10) (interval-of 10 20) + :x-title "x" :y-title "y"))) + (draw-symbols da xs ys :weights weights)) + (xlib-image-context-to-png (context *f1*) "/home/tony/test1.png") + (xlib-image-context-to-png (context *frame2*) "/home/tony/test2.png") + (destroy (context *frame2*)) + + diff --git a/Doc/talks/Rossini-Vandy-Oct2009.tex b/Doc/talks/Rossini-Vandy-Oct2009.tex index 20b0fe9..7df8502 100644 --- a/Doc/talks/Rossini-Vandy-Oct2009.tex +++ b/Doc/talks/Rossini-Vandy-Oct2009.tex @@ -32,7 +32,288 @@ \titlepage \end{frame} -\section{What Works?} +\begin{frame}[fragile]{Intro to Lisp notation} +\begin{verbatim} +;; This is a comment +#| + and so is this +|# +'(a list of things to become data) +(list a list of things to become data) +(what-I-execute with-one-thing with-two-thing) +;; that is: +(my-fcn-name input1 + input2) ; and to auto-gen input1: +(my-fcn-name (my-fcn-name input3 input4) + input2) +\end{verbatim} +\end{frame} + + +\begin{frame}{What do you do?} +When you begin to work on an activity (methodological, theoretical, +application/substantive), and go to the keyboard to work on a +computer, {\textbf what do you do?} +\end{frame} + + +\section{Computable Statistics} + +\begin{frame}{Can we compute with them?} + 3 Toy Examples: + \begin{itemize} + \item Statistical Research (``Annals work'') + \item Consulting, Applied Statistics, Scientific Honesty. + \item Reimplementation. + \end{itemize} + Can ``compute'' with the information given? (that is: + \begin{itemize} + \item do we have sufficient information to communicate enough for + the right person to understand or recreate the effort? + \item have we sufficient clarity to prevent misunderstandings about + intentions and claims? + \end{itemize} + ) +\end{frame} + +\begin{frame}[fragile]{Example 1: Theory\ldots} + \label{example1} + Let $f(x;\theta)$ describe the likelihood of XX under the following + assumptions. + \begin{enumerate} + \item assumption-1 + \item assumption-2 + \end{enumerate} + Then if we use the following algorithm: + \begin{enumerate} + \item step-1 + \item step-2 + \end{enumerate} + then $\hat{\theta}$ should be $N(0,\hat\sigma^2)$ with the following + characteristics\ldots +\end{frame} + +\begin{frame} + \frametitle{Can we compute, using this description?} + Given the information at hand: + \begin{itemize} + \item we ought to have a framework for initial coding for the + actual simulations (test-first!) + \item the implementation is somewhat clear + \item We should ask: what theorems have similar assumptions? + \item We should ask: what theorems have similar conclusions but + different assumptions? + \end{itemize} +\end{frame} +\begin{frame}[fragile]{Realizing Theory} +\small{ +\begin{verbatim} +(define-theorem my-proposed-theorem + (:theorem-type '(distribution-properties + frequentist likelihood)) + (:assumes '(assumption-1 assumption-2)) + (:likelihood-form + (defun likelihood (data theta gamma) + (exponential-family theta gamma))) + (:compute-by + '(progn + (compute-start-values thetahat gammahat) + (until (convergence) + (setf convergence + (or (step-1 thetahat) + (step-2 gammahat)))))) + (:claim (equal-distr '(thetahat gammahat) 'normal)))) +\end{verbatim} +} +\end{frame} + +\begin{frame}[fragile]{It would be nice to have} +\begin{verbatim} + (theorem-veracity 'my-proposed-theorem) +\end{verbatim} +returning some indication of how well it met given computable claims, +modulo what proportion of computable claims could be tested. +\begin{itemize} +\item and have it run some illustrative simulations which suggest + which might be problematic in real situations, and real situations + for which there are no problems. +\item and work through some of the logic based on related claims using + identical assumptions to confirm some of the results +\end{itemize} +\end{frame} + +\begin{frame}[fragile]{and why not...?} +\begin{verbatim} + (when (> (theorem-veracity + 'my-proposed-theorem) + 0.8) + (make-draft-paper 'my-proposed-theorem + :style :JASA + :output-formats + '(LaTeX MSWord))) +\end{verbatim} +\end{frame} + +\begin{frame}{Comments} + \begin{itemize} + \item Of course the general problem is very difficult, but one must + start somewhere. + \item I'm working on some basic statistical proof of concepts (not + finished): T-Test, linear regression (LS-based, Normal-Normal Bayesian) + \item Areas targetted for medium-term future: resampling methods and + similar algorithms. + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Example 2: Practice\ldots} + \label{example2} + The dataset comes from a series of clinical trials, some with active + control and others using placebo control. We model the primary + endpoint, ``relief'', as a binary random variable. There is a + random trial effect on relief as well as severity due to differences + in recruitment and inclusion/exclusion criteria from 2 different + trial networks. +\end{frame} + +\begin{frame} + \frametitle{Can we compute, using this description?} + \begin{itemize} + \item With a real such description, it is clear what some of the + potential models might be for this dataset + \item It should be clear how to start thinking of a data dictionary + for this problem. + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{Can we compute?} +\begin{verbatim} +(dataset-metadata paper-1 + :context 'clinical-trial 'randomized + 'active-ctrl 'placebo-ctrl 'metaanalysis + :variables '((relief :model-type dependent + :distr binary) + (trial :model-type independent + :distr categorical) + (disease-severity)) + :metadata '(incl-crit-net1 excl-crit-net1 + incl-crit-net1 excl-crit-net2 + recr-rate-net1 recr-rate-net2)) + (propose-analysis paper-1) + ; => (list 'tables '(logistic-regression)) +\end{verbatim} +\end{frame} + +\begin{frame}{Example 3: The Round-trip\ldots} + \label{example3} + The first examples describe ``ideas $\rightarrow$ code'' + + Consider the last time you read someone else's implementation of a + statistical procedure (i.e. R package code). When you read the + code, could you see: + \begin{itemize} + \item the assumptions used? + \item the algorithm implemented? + \item practical guidance for when you might select the algorithm + over others? + \item practical guidance for when you might select the + implementation over others? + \end{itemize} + These are usually components of any reasonable journal article. + \textit{(Q: have you actually read an R package that wasn't yours?)} +\end{frame} + +\begin{frame}{Exercise left to the reader!} + +% (aside: I have been looking at the \textbf{stats} and \textbf{lme4} +% packages recently -- \textit{for me}, very clear numerically, much +% less so statistically) +\end{frame} + +\section{Context} + +\begin{frame}{Point of Examples} + \begin{itemize} + \item Few statistical concepts are ``computable'' with existing systems. + + \item Some of this work is computable, let the computer do it. + + \item There is little point in having people re-do basics + + \item Computing environments for statistical work have been stable + for far too long, and limit the development and implementation of + better, more efficient, and more appropriate methods by allowing + people to be lazy (i.e. classic example of people publishing + papers on changes which are very minimal from a + methodological/theoretical view, but very difficult from an + implementation/practical view). + \end{itemize} +\end{frame} + +\begin{frame}{Current State} + + The current approaches to how statisticians interface with computers + to perform data analysis can be put into 2 camps + \begin{enumerate} + \item GUI with a spreadsheet (Excel/Minitab/Rcmdr without the + script) + \item applications programming (with + \end{enumerate} + There are different levels of sophistication, and some merging. +\end{frame} + +\begin{frame}{Issues which arise when computing...} + \begin{enumerate} + \item relevant substantive issues (causality, variable independence, + design issues such as sampling strategies) not incorporated. + \item irrelevant substantive issues (coding, wide vs. long + collection, other non-statistical data management issues) become + statistically-relevant. + \item little support for encoding theoretical considerations (``expert + systems'' for guidance). Must be hard-coded in and hard-coded + away (``stars for p-values as evil''). Nearly impossible to + construct and apply philosophical opinions to ensure appropriate + use (and training through use) of singular or personalized + mixtures of statistical philosophies when doing data analysis (or + methodological development, or theoretical development). + \end{enumerate} +\end{frame} + +\begin{frame}{Problem Statement} + + How can statistical computing environments support appropriate use + of statistical concepts (algorithmic, knowledge-centric, + knowledge-managing, philosophical discipline), so that the computing + structure doesn't rely on data-munging or numerical skill? + +\end{frame} + + +\begin{frame}{Goals for this Talk}{(define, strategic approach, + justify)} + + \begin{itemize} + \item To describe the concept of \alert{computable statistics}, + placing it in a historical context. + + \item To demonstrate that \alert{a research program} + implemented through simple steps can increase the efficiency of + statistical computing approaches by clearly describing both: + \begin{itemize} + \item numerical characteristics of procedures, + \item statistical concepts driving them. + \end{itemize} + + \item To justify that the \alert{approach is worthwhile} and + represents a staged effort towards \alert{increased use of best + practices} and efficient tech transfer of modern statistical + theory (i.e. why must we wait 10 years for Robins' estimation + approaches?) + \end{itemize} + (unfortunately, the last is still incomplete) +\end{frame} + +\section{CLS Works?} \label{sec:work} \begin{frame}{Is it Vaporware? Not quite} @@ -47,7 +328,7 @@ \label{sec:work:graphics} \begin{frame}{Silly Visualization Example} -\includegraphics[width=3in,height=3in]{/home/tony/test1.png} + \includegraphics[width=3in,height=3in]{./test1.png} \end{frame} \begin{frame}[fragile]{How?} @@ -56,9 +337,9 @@ (as-frame (create-xlib-image-context 200 200) :background-color +white+)) (bind ((#2A((f1 f2) (f3 f4)) - (split-frame *frame2* - (percent 50) - (percent 50)))) + (split-frame *frame2* + (percent 50) + (percent 50)))) (defparameter *f1* f1) ; lower left (defparameter *f2* f2) ; lower right f3 f4 (defparameter *f3* f3) ; top left f1 f2 @@ -187,24 +468,16 @@ \end{verbatim} \end{frame} -\begin{frame}{Outline} - \tableofcontents -\end{frame} - \section{Common Lisp Statistics} \label{sec:CLS} \begin{frame}{Why CLS?} \begin{itemize} - \item a component-based structure for statistical computing - \item Common Lisp provides a simple, \emph{primitive}, syntax - \item Common Lisp provides an amazing number of advanced features - that keep getting reinvented in other languages. - \item Common Lisp has linkages to many amazing features developed in - other languages. - \item ability to leverage non-statisticians interested in computing - technologies (compilers, protocols, interfaces, libraries, - functionality which can be reused for statistical purposes) + \item a component-based structure for statistical computing, + allowing for small and specific specification. + \item a means to drive philosophically customized data analysis, and + enforce a structure to allow simple comparisons between + methodologies. \item This is a ``customization'' through packages to support statistical computing, not a independent language. ``Ala Carte'', not ``Menu''. @@ -217,8 +490,8 @@ \begin{frame}{Current Functionality} \begin{itemize} - \item basic dataframes (similar to R); indexing/slicing API under - development. + \item basic dataframes (similar to R); subsetting API under + development. \item Basic regression (similar to XLispStat) \item matrix storage both in foreign and lisp-centric areas. \item LAPACK (small percentage, increasing), working with both @@ -232,13 +505,11 @@ \begin{frame}[fragile]{Computational Environment Supported} \begin{itemize} - \item Should work on Linux, with recent SBCL versions + \item works on Linux, with recent SBCL versions \item Definitely works on bleeding edge Debian (unstable). \item Has worked for weak definitions of ``work'' on 4 different - people's environments (not quite, but sort of requires a + people's computers (not quite, but sort of requires a \verb+/home/tony/+ !) - \item Threaded support on threaded lisps (SBCL/CCL, soon CLISP). - But not yet integrated. \end{itemize} \end{frame} @@ -247,89 +518,104 @@ \begin{itemize} \item Better integration of data structures with statistical routines (auto-handling with dataframes, rather than manual parsing). + \item dataframe to model-matrix tools (leveraging old XlispStat GEE + package) \end{itemize} Medium/Long Term \begin{itemize} - \item Support for CLISP (byte-compiled interpreted lisp) and Clozure - Common Lisp (formerly OpenMCL) - \item high-level Front-end API to a number of matrix and numerical - packages and numerical structures ( - \item constraint system for interactive GUIs and graphics - \item full LispStat compatibility (object system partially works; - GUI support coming). - \item Integrated threading via Bordeaux threads (portable CL API package). + \item Support for other Common Lisps + \item Cleaner front-end API to matrices and numerical algorithms + \item constraint system for different statistical algorithm + development, as well as for interactive GUIs and graphics + \item LispStat compatible (object system in-progress, GUI to do) + \item Integrated invisible parallelization when more efficient + (multicore, threading, and user-space systems) \end{itemize} \end{frame} -\subsection{Common Lisp} -\label{sec:CLS:lisp} -\begin{frame}{Common Lisp} +\section{Vaporware?} + +\begin{frame}[fragile]{What does NOT work?} + Primarily, the reason that we doing this: + + \textbf{Computable and Executable Statistics} + + but consider XML: +\begin{verbatim} +accord +\end{verbatim} +becomes +\begin{verbatim} +; data follows keywords... +(car :brand 'honda :engine "4cyl" accord) +\end{verbatim} +\end{frame} + +\section{Discussion} + + + + +\begin{frame}{Why use Common Lisp?} \begin{itemize} \item Parens provide clear delineation of a \textbf{Complete Thought} (functional programming with side effects). - \item Lisp-2 (symbols can denote both a separate function and a value) + \item Lisp-2 (symbols represent a different function and variable) \item ANSI standard (built by committee, but the committee was reasonably smart) \item Many implementations \item Most implementations are interactive \textbf{compiled} - languages (few are interpreted, and those are usually - byte-compiled). + languages (few are interpreted, nearly all byte-compiled). \item The Original \emph{Programming with Data} Language - (\emph{Programs are Data} and \emph{Data are Executable} also - apply). + (\emph{Programs are Data} and \emph{Data are Executable} apply). \item advanced, powerful, first-class macros (macros functionally re-write code, allowing for structural clarity and complete destruction of syntax, should that be reasonable) \end{itemize} \end{frame} -\begin{frame}{Common Lisp Packages} +\begin{frame}{Available Common Lisp Packages} (They are packages and called packages, not libraries. Some people can rejoice!) \begin{itemize} - \item infrastructure enhancement: infix-notation, data structures, - control and flow structures + \item infrastructure \emph{enhancements}: infix-notation, data + structures, control and flow structures \item numerics, graphics, GUIs, \item primitive R to CL compiler (which could also be considered an object-code compiler for R); 3 interfaces which embed R within CL. - \item Web 2.0 support and reporting facilities (similar to TeX) for PDF. + \item Web 2.0 support and TeX-like reporting facilities for PDF + output. \end{itemize} See \url{http://www.common-lisp.net/} and \url{http://www.cliki.org/}. CLS sources can be found on \url{http://github.com/blindglobe/} \end{frame} -\section{What else about CLS is still Vaporware?} - -\begin{frame}[fragile]{What does NOT work?} - Primarily, the reason that we doing this: - - \textbf{Computable and Executable Statistics} +\begin{frame}{Why not use R?} + \begin{itemize} + \item the R programming language is incomplete and under constant + redefinition. Common Lisp is standardized (for many years), with + many implementations + \item R isn't compiled and appliction delivery can be tough (package + delivery is mostly solved) + \item Without parens, Common Lisp could be R (interactive, or batch, + or through ``compiled applications''). + \item R is the Microsoft of statistical computing. + \item many ``warts'' that R has, can't be fixed due to sizeable user + populations or heavy-weight vested interests. + \item Evolutionary development requires strawmen upon which to use + for development. +\end{itemize} - (which is the subject of another talk, slides in the backup). But - consider XML: -\begin{verbatim} -accord -\end{verbatim} -becomes -\begin{verbatim} -; data follows keywords... -(car :brand 'honda :engine "4cyl" accord) -\end{verbatim} \end{frame} -\section{Discussion} - \begin{frame}{Conclusion} - Active but slow development, spanning the range of needs: - \begin{itemize} - \item Numerics: Linear algebra basics done -- full development - \item Static graphics: progress being made, have a partial - grid-solution, need interactive graphics - \item LispStat emulation needs to be finished - \item Model specification and unification - \end{itemize} + + This slowly developing research program aims to a statistical + computing system which enables sophisticated statistical research + which can be readily transfer to applications, is supportable. + Related numerical/statistical projects: \begin{itemize} \item Incanter : R/LispStat/Omegahat-like system for Clojure (Lisp @@ -338,20 +624,24 @@ becomes using Lisp \item matlisp/LispLab : LAPACK-based numerical linear algebra packages \item GSLL : GNU Scientific Library, Lisp interface. + \item RCL, RCLG, CLSR (embedding R within Common Lisp) \end{itemize} \end{frame} -\begin{frame}{Followup} - I'd be happy to talk with anyone on the following topics: +\begin{frame}{What can you do to follow up?} + \begin{itemize} - \item Introduction to Common Lisp - \item support for new statistical programming environment modalities - (subject for another talk). - \item computable and executable statistics (code that explains - itself and can be parsed to generate knowledge about its claims; - ``XML's promise'') + \item Read: Introduction to Common Lisp: Paul Graham's ANSI Common Lisp, + enjoyable book with boring title, best intro to S4 classes + around. Practical Common Lisp, by Peter Seibel + \item Consider: how a computing environment could better support + features in the research you do (event-time data, design, + longitudinal data modeling, missing and coarsened data, multiple + comparisons, feature selection). \end{itemize} - and if you are interested in getting involved, or trying it out. + The next stage of reproducible research will require computable + statistics (code that explains itself and can be parsed to generate + knowledge about its claims; ``XML's promise''). \end{frame} \end{document} @@ -380,198 +670,6 @@ becomes \end{itemize} \end{frame} -\section{Computable Statistics} - -\begin{frame}{Can we compute with them?} - 3 Examples, of which we only present the first - \begin{itemize} - \item Research. - \item Consulting, Applied Statistics, Scientific Honesty. - \item Reimplementation. - \end{itemize} - Consider whether one can ``compute'' with the information given? - (that is: - \begin{itemize} - \item do we have sufficient information to communicate enough - for the right person to recreate the analysis? - \item have we sufficient clarity to prevent misunderstandings about - intentions and claims? - \end{itemize} - ) -\end{frame} - -\begin{frame}[fragile]{Example 1: Theory\ldots} - \label{example1} - Let $f(x;\theta)$ describe the likelihood of XX under the following - assumptions. - \begin{enumerate} - \item assumption-1 - \item assumption-2 - \end{enumerate} - Then if we use the following algorithm: - \begin{enumerate} - \item step-1 - \item step-2 - \end{enumerate} - then $\hat{\theta}$ should be $N(0,\hat\sigma^2)$ with the following - characteristics\ldots -\end{frame} - -\begin{frame} - \frametitle{Can we compute, using this description?} - Given the information at hand: - \begin{itemize} - \item we ought to have a framework for initial coding for the - actual simulations (test-first!) - \item the implementation is somewhat clear - \item We should ask: what theorems have similar assumptions? - \item We should ask: what theorems have similar conclusions but - different assumptions? - \end{itemize} -\end{frame} - -\begin{frame}[fragile]{Realizing Theory} -\small{ -\begin{verbatim} -(define-theorem my-proposed-theorem - (:theorem-type '(distribution-properties - frequentist - likelihood)) - (:assumes '(assumption-1 assumption-2)) - (:likelihood-form - (defun likelihood (data theta gamma) - (exponential-family theta gamma))) - (:compute-by - '(progn - (compute-starting-values thetahat gammahat) - (until (convergence) - (setf convergence - (or (step-1 thetahat) - (step-2 gammahat)))))) - (:claim (assert - (and (equal-distribution thetahat 'normal) - (equal-distribution gammahat 'normal))))) -\end{verbatim} -} -\end{frame} - -\begin{frame}[fragile]{It would be nice to have} -\begin{verbatim} - (theorem-veracity 'my-proposed-theorem) -\end{verbatim} -\end{frame} - -\begin{frame}[fragile]{and why not...?} -\begin{verbatim} - (when (theorem-veracity - 'my-proposed-theorem) - (write-paper 'my-proposed-theorem - :style :JASA - :output-format - '(LaTeX MSWord))) -\end{verbatim} -\end{frame} - -\begin{frame}{Comments} - \begin{itemize} - \item The general problem is very difficult - \item I'm working on some basic statistical proof of concepts (not - finished): linear regression (LS-based, Normal-bayesian) and the - T-test. - \item Areas targetted for medium-term future: resampling methods and - similar algorithms. - \end{itemize} -\end{frame} - -\begin{frame} - \frametitle{Example 2: Practice\ldots} - \label{example2} - The dataset comes from a series of clinical trials. We model the - primary endpoint, ``relief'', as a binary random variable. There is - a random trial effect on relief as well as severity due to - differences in recruitment and inclusion/exclusion criteria. -\end{frame} - -\begin{frame} - \frametitle{Can we compute, using this description?} - \begin{itemize} - \item With a real such description, it is clear what some of the - potential models might be for this dataset - \item It should be clear how to start thinking of a data dictionary - for this problem. - \end{itemize} -\end{frame} - -\begin{frame}[fragile]{Can we compute?} -\begin{verbatim} - (dataset-metadata paper-1 - :context 'clinical-trials - :variables '((relief :model-type dependent - :distribution binary) - (trial :model-type independent - :distribution categorical) - (disease-severity)) - :metadata '(inclusion-criteria - exclusion-criteria - recruitment-rate)) - (propose-analysis paper-1) - ; => '(tables - ; (logistic regression)) -\end{verbatim} -\end{frame} - -\begin{frame}{Example 3: The Round-trip\ldots} - \label{example3} - The first examples describe ``ideas $\rightarrow$ code'' - - Consider the last time you read someone else's implementation of a - statistical procedure (i.e. R package code). When you read the - code, could you see: - \begin{itemize} - \item the assumptions used? - \item the algorithm implemented? - \item practical guidance for when you might select the algorithm - over others? - \item practical guidance for when you might select the - implementation over others? - \end{itemize} - These are usually components of any reasonable journal article. - \textit{(Q: have you actually read an R package that wasn't yours?)} -\end{frame} - -\begin{frame}{Exercise left to the reader!} - -% (aside: I have been looking at the \textbf{stats} and \textbf{lme4} -% packages recently -- \textit{for me}, very clear numerically, much -% less so statistically) -\end{frame} - - - -\section{Context} - -\begin{frame}{Goals for this Talk}{(define, strategic approach, - justify)} - - \begin{itemize} - \item To describe the concept of \alert{computable and executable - statistics}, placing it in a historical context. - - \item To demonstrate that \alert{a research program} - implemented through simple steps can increase the efficiency of - statistical computing approaches by clearly describing both: - \begin{itemize} - \item numerical characteristics of procedures, - \item statistical concepts driving them. - \end{itemize} - - \item To justify that the \alert{approach is worthwhile} and - represents a staged effort towards \alert{increased use of best - practices}. - \end{itemize} - (unfortunately, the last is still incomplete) -\end{frame} - \begin{frame}{Historical Computing Languages} \begin{itemize} diff --git a/Doc/talks/test1.png b/Doc/talks/test1.png new file mode 100644 index 0000000000000000000000000000000000000000..5bf09f6380647262976da8af012d2a6a7afec195 GIT binary patch literal 37452 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