A link that can tell more than dozens of lines of R code – what’s new in archivist?

Can you spot the difference between this plot:

And this one:

You are right! The latter has an embedded piece of R code.
What for?

It’s a call to a function aread from archivist – a package that manages external copies of R objects. This piece of code was added by the function addHooksToPrint(), that enriches knitr reports in links to all objects of a given class, e.g. ggplot.

You can copy this hook to your R session and you will automagically recreate this plot in your local session.

But it’s not all.
Actually here the story is just beginning.

Don’t you think, that this plot is badly annotated? It is not clear what is being presented. Something about terrorism, but for which year, are these results for all countries or there is some filtering? What is on axes? Why the author skip all these important information? Why he does not include the full R code that explains how this plot was created?

Actually, having this single link you can get answers for all these questions.

First, let’s download the plot and extract the data out of it.

This data object is also in the repository so I can download it with the aread function.

But here is the coolest part.
Having an object one can (in some cases) examine the history of this objects, i.e. check how it was created. Here is how to do this:

Now you can see what operations have been used to create data used in this plot. It’s clear how the aggregation has been done, what is the filtering condition and so on.
Also you have hashes to all objects created along the way, co you can download the partial results. This history is being recorded with an operator %a% that is working in a similar fashion to %>%.

We have the plot, now we now what is being presented, let’s change some annotations.

The ahistory() function for remote repositories was introduced to archivist in version 2.1 (on CRAN since yesterday). Other new feature is the support for repositories in shiny applications. Now you can enrich your app in links to copies of R objects generated by shiny.
You can find more information about these and other features in the useR2016 presentation about archivist (html, video).
Or look for Marcin Kosiński talk during the european R users meeting in Poznań.

The data presented in here is just a small fraction of data from National Consortium for the Study of Terrorism and Responses to Terrorism (START) (2016) retrieved from http://www.start.umd.edu/gtd.

Z pamiętnika nauczyciela akademickiego

Jedną z zaproszonych prelegentek na useR 2016 była Deborah Nolan z referatem ,,Statistical Thinking in a Data Science Course’’. Dora jest profesorem na Berkeley, zajmuje się między innymi technikami nauczania statystyki i napisała świetną książkę ,,Teaching Statistics: A Bag of Tricks’’. Jest też orędowniczką wizualizacji danych i poznawania statystyki przez eksperyment. W swoim referacie poruszyła kilka kwestii, które są mi bliskie i które uważam za ważne, więc poniżej przedstawię je miksując z własnymi doświadczeniami z prowadzenia zajęć w poprzednim semestrze. Całą prezentacje Dory można obejrzeć tutaj a grafiki w tym wpisie pochodzą z jej prezentacji.

Swoją drogą, podczas useR zorganizowane były dwie sesje poświęcone nauczaniu statystyki z użyciem R, jedną nawet miałem przyjemność moderować. Lista referatów z tych sesji znajduje się tutaj. Można też obejrzeć nagrania.

Wróćmy do prezentacji Dory.
Jedną z praktyk dotyczących nauczania statystyki z którą chciała się rozliczyć, jest podejście, że analiza eksploracyjna i wizualizacja danych jest dla dzieci, można tego uczyć w przedszkolu, ale nie wypada uczyć tego matematyków na studiach. Na studiach jest miejsce wyłącznie na teorię. Słowo wyłącznie jest tu użyte dosłownie. Nie jeden z nas doświadczył zajęć ze statystyki w których nie pojawiły się żadne [!] dane. Zdaniem Dory teoria jest bardzo ważna, ale drogą do niej są doświadczenia i intuicje zrodzone z EDA.

Czasem, nawet jeżeli dane się pojawiają, to często w charakterze obiadu w puszce. Dane tak przygotowane by zastosować do tych konkretnych danych jedną, jedyną właściwą, konkretną metodę, pokazać wyniki i lecieć dalej.
Tymczasem prawdziwa analiza danych dla niebanalnych problemów wygląda zupełnie inaczej.
Czasem w ogóle nie wiadomo co trzeba zrobić. A nawet jeżeli już wiadomo co zrobić to często nie wiadomo jaką metodą. Samo ustalanie co i jak może stanowić najtrudniejszy problem, który jest do rozwiązania.

Ok, wiemy już, że na zajęciach ze statystyki chcemy użyć danych i że chcemy by problemy były niebanalne. Jak to zrobić? Pomysł jest w sumie prosty, wprowadzić projekty oparte o współczesne, duże, bogate, złożone dane, związane z otwartymi pytaniami badawczymi.

Skąd brać takie projekty? Na naszych zajęciach na MIM UW czy MiNI PW udało się nawiązać współpracę z Ministerstwem Zdrowia, firmą Applica, działem badawczym Centrum Nauki Kopernik, Entuzjastami Edukacji i zespołem USOSa. Każdy z partnerów dał zbiór danych i wsparcie przy pozyskaniu wiedzy dziedzinowej. Dużych i ciekawych danych było więc sporo, do danych były dołączone dosyć otwarte problemy do rozwiązania.
Każdy projekt miał trzy fazy, co pozwoliło na stopniowe usprawnianie opracowanego rozwiązania, podsłuchanie tego co zrobiły inne grupy i ewentualne zaadaptowanie ich rozwiązań. Miłym bonusem była możliwość zaproszenia ekspertów dziedzinowych ze współpracujących instytucje na prezentacje projektów, dzięki czemu można wymienić się doświadczeniami z analiz (udało się między innymi zaprosić dyrektora IBE, capo di tutti capi USOSa, zrobić prezentacje w CNK).
[btw: Teraz szukam partnerów do projektów na przyszły rok, więc jeżeli Wasza firma/organizacja robi ciekawe rzeczy z ciekawymi danymi to zapraszam do kontaktu].

Co ciekawe, dyskusja po referacie Dory krążyła wokół obawy (wspólnej dla wielu krajów) ,,Ale nasi przełożeni są matematykami, nasi koledzy są matematykami, nasi studenci są matematykami, czy im się to spodoba?”. Odpowiedź prowadzącej była prosta. Jednym się spodoba, innym nie. Ale warto dać studentom trochę różnorodności. Bo na obecnie przematematyzowanej statystyce osoby preferujące doświadczalne podejście do analizy danych mogą nie znaleźć inspiracji. Może więc warto im pokazać, że analiza danych ma wiele oblicz i różne oblicza kręcą różne osoby.

Jak te projekty przyjeli moi studenci? Czy chciało im się spędzać godziny nad projektem, by sprawdzać co tam jeszcze można z tych danych wycisnąć? Czy studentom przyzwyczajonym do dowodzenia twierdzeń takie zajęcia mogą się w ogóle spodobać jeżeli za problemem do analizy nie stoi Google albo Microsoft?

Jednym tak innym nie. Znaleźli się studenci traktujący projekty jako zło konieczne. Wczytaj dane, wytrenuj las losowy, pokaż wynik, zapomnij. Ale trafiły się grupy robiące z danymi cuda. Na statystyce II znalazły się grupy, które do predykcji używały modeli mieszanych, regresji Poissona czy thin plate splines, choć żadnej z tych metod nie omawialiśmy na wykładzie [!!! i o to chodzi]. Na R i Duże Dane kilka zespołów wykorzystało łańcuchy markowa (których nie omawialiśmy na naszych zajęciach) i wywiązała się dyskusja czy założenia tej metody są w określonej sytuacji spełnione czy nie.

Jaka jest więc pointa? Dajmy studentom trochę różnorodności. Obok klasycznych matematycznych wykładów ze statystyki zróbmy miejsce na trochę szaleństwa w eksploracje danych mniej lub bardziej na oślep licząc, tak by uczyć się poruszać w gąszczu prawdziwych problemów. A nuż im się ten gąszcz spodoba.

Przyszłość ggvis

data-science
W przybliżeniu taki tytuł nosił referat Hadleya Wickhama, ale w rzeczywistości był to referat o przyszłości universum pakietów tworzonych i współtworzonych przez Hadleya.
A jest to ciekawy kierunek, więc poniżej napiszę o nim trochę więcej. (btw: zaproponował by zamiast hadleyverse używać nazwy tidyverse. Dlaczego tidy? o tym poniżej).

Prezentacja była świetnie przygotowana. Była jedną z dwóch najlepszych tego useR (drugą była prezentacja Donalda Knutha, ale z zupełnie innego powodu).
Niedługo powinna być dostępna pod tym adresem.

Jednym z ciekawszych wątków był wybór stawiany przed R pomiędzy byciem językiem programowania a byciem językiem do interaktywnej analizy danych. Z pewnością R jest bardziej językiem eksploracji danych niż językiem programistów, stąd pozycje typu The R inferno, wytykające rozwiązania nie do pomyślenia w dojrzałych językach programowania. Niekonsekwencje, które przeszkadzają lub drażnią wielu programistów, są jednak czasem wprowadzane celowo, po to by ułatwić prace z danymi.

O jakie niekonsekwencje chodzi? Zagadka z prezentacji Hadleya jest następująca, co jest wynikiem poniższego kodu.

Programiści przyzwyczajeni do klasycznych języków programowania spodziewaliby się, że wynikiem jest albo błąd (w obiekcie df nie ma slotu x, jest xyz) albo wektor z napisem. A tymczasem wynikiem jest factor z uwagi na domyślne parametry data.frame (uzupełnianie nazw argumentów i domyślna konwersja do faktorów). R core podjął lata temu decyzje by budować język ułatwiający analizę danych a nie pracę programistów, stąd niektóre błędy są maskowane i ,,naprawiane’’ po cichu w tle.

Drugim wyborem o którym mówił Hadley jest rozdźwięk pomiędzy byciem konserwatywnym a utopistą. Przy czym konserwatywny oznacza tu dbający o wsteczną zgodność z poprzednimi wersjami a utopista oznacza radosną budowę nowych rzeczy czasem bez zachowywania ciągłości z przeszłością. Użytkownicy ggplot2 i pochodnych pakietów na własnej skórze doświadczyli, że Hadley stawia się raczej bliżej utopisty adoptującego nowe rozwiązania, w przeciwieństwie do R core, które stara się zachować stabilność i wsteczną kompatybilność.

No właśnie, w przypadku obu wyborów kierunek tidyverse okazał się inny, niż ten który wybrał R code.

A tidyverse rośnie w siłę, zapowiedziane są pakiety gggeom i ggstat które mają zająć się właściwym uporządkowaniem tworzenia geometrii i tworzenia statystyk. data.frame zostanie zastąpiony przez tibble.
Funkcje będą jeszcze bardziej leniwe (w sensie leniwej ewaluacji) a struktury obiektów ujednolicone (do ramek danych) przez co będzie można pracować na bardziej spójnych strukturach.
To uniwersum rozwiązań rozrastać się będzie wewnątrz R, ale stanie się od reszty R coraz bardziej niezależne.
Pokryje kluczowe aktywności wykonywane przy analizie danych, opisane na wykresie rozpoczynającym ten blog (oczywiście autorstwa HW).
A co będzie później?
Obserwując tempo rozwoju tego universum, dowiemy się już wkrótce.

eRka: wakacyjny zespołowy konkurs z R

R_competition_final2

eRka wspólnie z Do-IT Solutions (z patronami INIME, FuRBS i SmarterPoland.pl) przygotowała na te wakacje zespołowy konkurs analizy danych.

Dane dotyczą wyników edukacyjnych uczniów z RPA. Być może pamiętacie, że dane były wykorzystywane w hackatonie organizowanym przez eRka rok temu, ale teraz i danych jest więcej i wyzwań jest więcej.

Więcej informacji o tym konkursie, w tym zasady i tematy analiz, znajduje się na tej stronie, a w języku polskim na tej stronie.

Od piątku można będzie zgłaszać zespoły.

useR 2016 – tutoriale

IMG_1102

Właśnie zakończył się pierwszy dzień useR2016, czyli sesja z tutorialami.
Do wyboru było wiele ciekawych pozycji (lista z opisami tutaj). Poniżej opiszę wrażenia z czterech, w których uczestniczyłem.

Never Tell Me the Odds! Machine Learning with Class Imbalances Max Kuhn – Pfizer.
Materiały do tego tutorialu znajdują się na githubie. Max (znany pewnie większości jako twórca pakietu caret) opowiadał o strategiach radzenia sobie z niezrównoważonymi klasami w problemie klasyfikacji. I oczywiście pokazywał jak rozwiązać ten problem z pakietem caret. O ile problemu prawie nie ma dla takich metod jak regresja logistyczna, to dla metod opartych o drzewa problem może być poważny. W materiałach jest porównanie trzech głównych strategii radzenia sobie z tym problemem: undersampling, oversampling i zmiana funkcji kosztu.
To był moim zdaniem najlepszy tutorial tej edycji useR.

Machine Learning Algorithmic Deep Dive, Erin LeDell – H2O.ai.
Równolegle prowadzony był tutorial pracownika H2O. To właśnie afiliacja prelegenta jak i atrakcyjne ,,deep dive” skusiła mnie i ponad 150 innych osób do wzięcia udziału w tym tutorialu. Ale okazało się, że nie było miejsca na głębokie zanurzenie, co najwyżej udało się zamoczyć stopy.
O ile sam tutorial był średnio udany (problemy z instalacją jupitera wykosiły ponad połowę osób, a jak się okazało wcale nie był on potrzebny bo i tak nie było czasu na uruchomienie kodu) to materiały są całkiem niezłe. Znajdują się one na githubie.

An Introduction to Bayesian Inference using R Interfaces to Stan, Ben Goodrich
Ponieważ język Stan znajduje się bardzo wysoko na liście rzeczy, które chciałbym bliżej poznać, z wielkimi nadziejami zapisałem się na ten tutorial. Ben jest jednym z kluczowych twórców Stana. Materiały z tego tutorialu znajdują się na tej stronie.
Materiały są ciekawe, choć jak dla mnie mogłoby być więcej bardziej złożonych przykładów zamiast zastanawiania się dlaczego ci częstościowi statystycy są tacy źli.
Najbardziej spodobał mi się ten slajd pokazujący jak sprawnie NUTS radzi sobie z korelacją kolejnych obserwacji (w porównaniu do RW Metropolisa czy algorytmu Gibbsa). To akurat dobra motywacja by dalej zgłębiać ten pakiet.

Using R with Jupyter Notebooks for Reproducible Research, Andrie de Vries & Micheleen Harris
W sali obok stan’a toczył się tutorial poświęcony bibliotece jupiter. Materiały są dostępne na githubie. Poza podstawami jupitera można było poznać https://notebooks.azure.com, czyli usługę pozwalającą na hostowanie notebooków na microsoftowym azurze. Najciekawsza na tym tutorialu była forma. Prowadząca wykorzystywała kilka ciekawych tricków związanych z prowadzeniem warsztatów, jak np. używanie karteczek aby szybko sygnalizować, że są jakieś problemu czy by robić szybkie binarne ankiety.

Obejrzyj dane zanim je pokażesz

Dzisiaj Polityka opublikowała artykuł Rząd zapowiadał, że ograniczy biurokrację. Zamiast tego cudownie się rozmnożył. W artykule są przykłady rosnącej biurokracji, tutaj mierzonej liczbą ministrów i wiceministrów.

Generalnie lubię w Polityce to, że często (w porównaniu z innymi portalami) opierają się na liczbach. Choć niestety rzadko pokazują te liczby za pomocą wykresu, zazwyczaj są to tabele lub takie zestawienie jak po prawej stronie.

Ale, myślę sobie, są dane wiec je pokażę. Przepisałem nazwy krajów i liczby ministrów, z wikipedii pobrałem informacje o wielkości ludności poszczególnych krajów.
Wyniki poniżej.
Widząc taki wykres dwie rzeczy rzucają się w oczy, (1) po Brexicie średnia liczba ministrów na kraj zmaleje, (2) co jest w sumie zaskakujące, liczba ministrów praktycznie nie zależy od ludności kraju (poniżej oś OX jest w skali sqrt a wciąż nie widać zależności).

Screen Shot 2016-06-27 at 22.07.17

Pointa: Z biurokracją trzeba walczyć. Ale akurat dane o liczbie ministrów nie pokazują polskiej biurokracji w najgorszym świetle.

Wykres i dane można pobrać instrukcją

Shiny + archivist = reproducible interactive exploration


Shiny is a great tool for interactive exploration (and not only for that). But, due to its architecture, all objects/results that are generated are stored in a separate R process so you cannot access them easily from your R console.

In some cases you may wish to retrieve a model or a plot that you have just generated. Or maybe just wish to store all R objects (plots, data sets, models) that have been ever generated by your Shiny application. Or maybe you would like to do some further tuning or validation of a selected model or plot. Or maybe you wish to collect and compare all lm() models ever generated by your app? Or maybe you would like to have an R code that will recover given R object in future.

So, how to do this?

Czytaj dalej Shiny + archivist = reproducible interactive exploration

StatTuba a PolakPotrafi

Wspólnie z Agnieszką Tomczyk na serwisie crowdfundingowym PolakPotrafi uruchomiliśmy kampanię ‘Jak zważyć psa linijką’. Celem jest przygotowanie materiałów warsztatowych do lekcji statystyki w szkołach, powkładanie ich do 25 StatTub i rozesłanie po Polsce.

StatTuba to tuba z komiksami, materiałami do pracy własnej, scenariuszem lekcji dla nauczyciela matematyki. Z taką tubą zainteresowany nauczyciel może samodzielnie poprowadzić lekcję o regresji liniowej.

Krótkie jednominutowe wprowadzające video powyżej, a więcej informacji znajduje się na stronie https://polakpotrafi.pl/projekt/jak-zwazyc-psa-linijka.

Pomóc można nam wspierając finansowo kampanię lub rozsyłając informację o niej do szerszego grona osób.

Na wspieranie jest ponad miesiąc czasu. Jeżeli się uda, to pierwsze StatTuby wyruszą na 1 września.

Beta i Bit dla najmłodszych


Czas na trzecią zagadkę z serii Beta i Bit. Tym razem jest ona skierowana do najmłodszych, powiedzmy dzieci w wieku 7-14.

Doświadczenia z warsztatów prowadzonych w ramach Uniwersytetu Dzieci przekuliśmy na 8-stronicowy komiks, w którym Beta i Bit opowiadają jak ważyć linijką czy to psa czy T-Rexa.

Polskojęzyczna wersja komiksu jest dostępna na stronie http://betabit.wiki/story/JakZwazycPsa/, angielsko języczna jest na stronie http://betabit.wiki/story/HeavyDog/.

A więc jakie jest zadanie?

Trzeba na podstawie danych ze strony 6.-7. komiksu oszacować masę T-Rexa. Instrukcja jak to robić znajduje się na stronach 4.-5.

Zdjęcie uzupełnionej strony 7. (można ją wydrukować nawet na czarnobiałej drukarce) wraz z oszacowaniem masy T-Rexa należy wysłać do 4 lipca na adres przemyslaw.biecek na serwerze gmail.com.

Osoby, które prześlą poprawne rozwiązanie otrzymają egzemplarz opowiadań ,,Jak długo żyją Muffinki?” (oferta ważna do wyczerpania zasobów). A osoby, które rozwiążą wszystkie trzy zagadki (frequon+Gra Terenowa+Ile waży T-Rex) otrzymają kubek Bety.

Czy macie w rodzinie dziecko w stosownym wieku?
Wydrukujcie komiks, rozwiążcie go z dzieciakiem i sprawcie mu zbiór opowiadań nawiązujących do statystyki na wakacje.

Screen Shot 2016-06-18 at 19.22.50

EURO 2016 v2

Ostatnio pisałem o artykule w którym uzgadniano szanse wygrania Euro przez drużyny na bazie zakładów bukmacherskich. Dostępny zbiór danych wykorzystaliśmy na ostatnich zajęciach ze Statystyki 2 do zabawy w przewidywanie czy Polska wyjdzie z grupy. Różne osoby, próbowały różnych modeli, jeden przypadł mi szczególnie do gustu i poniżej go opiszę.

Model jest taki: jeżeli drużyna A gra przeciw drużynie B, to liczbę goli, które A strzeli B można modelować jako funkcje zależną od różnicy w sile A-B.

Informacje o różnicach w sile można wziąć np. z rankingu FIFA, informacje o liczbie strzelonych goli z wikipedii. Liczba goli jest całkowita więc przyjmujemy, że modelujemy ją rozkładem Poissona z domyślną funkcją łączącą – log.

I tak powstał poniższy wykres. Każdy mecz drużyn A vs B to dwie kropki, jedna opisuje ile goli A strzeliła B a druga kropka ile goli B strzeliła A. Na osi OX jest różnica siły w rankingu FIFA a na OY liczba strzelonych goli. Szara linia przedstawia oczekiwaną liczbę goli w oparciu o regresję Poissona. Zaznaczyłem też trzy punkty – największe outliery. Belgia jest w rankingu FIFA o prawie 400 punktów wyżej niż Włosi, a jednak to Włosi strzelili dwie bramki. Hiszpania strzeliła 3 gole, choć przy jej przewadze spodziewać można było się mniejszej liczby. Niemcy przy swojej przewadze w rankingu FIFA powinni coś strzelić (choć szans na gol więcej mieli Polacy).

Screen Shot 2016-06-20 at 01.02.03

Taki model. Może założenie o rozkładzie Poissona nie jest najlepsze i ranking FIFA nie jest najbardziej odpowiedni, ale przynajmniej łatwo zapamiętać jak działa i jak korzystać z regresji Poissona.