Wykorzystanie pakietu simecoldo modelowania zachorowań na grypę. Marta Markiewicz, Anna Sikora, Katarzyna Zajączkowska, Michał Balcerek, Piotr Kupczyk (PWr)
Runda 1 zawirusowane dane NAPOTKANE PROBLEMY ten sam okres dwa raporty ZAPROPONOWANE ROZWIĄZANIE rozważanie obydwu raportów Lata 2000-2006 2 przedziały wiekowe Lata 2007-2010 4 przedziały wiekowe Otrzymywanie absurdów przywyliczaniu liczby ludności województw ze wzoru Liczba ludności = zapadalność * 100 tys / liczba.ogol Podział danych wykorzystanie struktury ludności oraz współczynników, oszacowanych na podstawie lat 2007-2010 Ponownewyliczeniezapadalności na podstawie liczby.ogol oraz danych dotyczących liczby ludności zamieszczonych na stronie GUS-u
Problem
Zmiana liczby zachorowań według czasu
Runda 2 czas na seans
1. mapa=function(i){ 2. x<-1:16 3. ind<-1:16 4. for(j in 1:16){ 5. x[j]=grypa$zapadalnosc.ogol[(i-1)*16+j] 6. } 7. library(maptools) 8. woj.shape = readshapepoly("wojew_region.shp",proj4string=crs("+proj=longlat +ellps=clrk66")) #,IDvar="NAZ_WOJ" 9. xw= as.numeric(strsplit("15.37838 17.84389 22.14644 14.74992 18.90744 19.43922 20.35774 17.39268 21.45352 22.32370 17.21543 18.71407 19.98711 20.19659 16.21633 14.71769"," ")[[1]]) 10. yw= as.numeric(strsplit("51.19397 53.20162 51.37287 52.37669 51.68097 50.00130 52.55559 50.72684 50.08081 53.26125 54.23526 50.61751 50.77654 53.95697 52.39657 53.63893"," ")[[1]]) 11. nw= c("dolnośląskie","kujawsko-pomorskie, "lubelskie","lubuskie", "łódzkie","małopolskie", "mazowieckie, "opolskie","podkarpackie", "podlaskie","pomorskie", "śląskie","świętokrzyskie","warmińskomazurskie","wielkopolskie","zachodnio-pomorskie")
O pakiecie SIMECOL słów kilka Pakiet simecolzostał stworzony aby ułatwić symulacje ekologicznych oraz dynamicznych modeli. Aby to osiągnąć, simecolwykorzystuje obiektowe podejście do problemu, używając systemu klas S4. ClassodeModel modele wykorzystujące równania różniczkowe zwyczajne ClassgridModel modele wykorzystujące kratę ClassrwalkModel modele z przemieszczaniem się cząstki ClassinbasedModel modele dostosowane indywidualnie do potrzeb użytkownika
main= function(time, init, parms,...) to funkcja przechowująca główne równania modelu equations: fakultatywna lista przechowująca dowolne podrównaniamodelu. parms: lista/wektor ze stałymi parametrami modelu times:wekorokreślający momenty kolejnych kroków symulacji init:wektor/macierz przedstawiający stan początkowy symulacji inputs: dane z zewnątrz solver: określa używany algorytm np. "lsoda", "rk4" lub "euler ( równania różniczkowe ), "iterator" ( użyteczny przy modelach indywidualnych ). Oczywiście można również zdefiniować własne solvery. observer: opcjonalna funkcja, używana do wyświetlania infna ekranie, wizualizacji, animacji out: przechowuje wyniki symulacji po jej uruchomieniu initfunc: funkcja opcjonalna, wywoływana automatycznie, np. gdy tworzony jest nowy obiekt
Szef kuchni SIMECOL poleca... Wśród przykładowych modeli, jakie oferuje pakiet simecolznajdziemy m.in.: prey 0.6 1.2 1.8 lv -model Lotki-Volterry, zwany też modelem drapieżnikofiara 0 20 40 60 80 100 time CA model automatu komórek rwalk błądzenie losowe predator 0.6 1.2 1.8 0 20 40 60 80 100 time
Inspiracja Przykład: Stochastic Cellular Automaton Rozprzestrzenianie się roślin, zwierząt, chorób... Zasady przeżycia/przetrwania: 1. Liczba bezpośrednich sąsiadów: N_n = n_neighbours {0,...,8}, 2. Prawdopodobieństwo rozmnożenia dla jednej dojrzałej jednostki: p_seed 3. Całkowite prawdopodobieństwo rozmnożenia dla pustej komórki: p_gen 4. Prawdopodobieństwo śmierci: p_death, 5.Odstęp czasu:t = 1, 6. Funkcja stanu: = t (wiek) dla komórki żyjącej = 0 dla komórki nieżywej
CA <- new('gridmodel', main = function(time, init, parms){ Z<-init with(parms,{ nn <- eightneighbours(z >= adult) pgen<-1-(1-pseed)^nn zgen<-ifelse(z==0&runif(z)<pgen,1,0) zsurv<-ifelse(z>=1&runif(z)<(1-pdeath),z+ 1,0) zgen+zsurv }) }, parms=list(adult=2,pseed=0.2,pdeath=0.1), times=c(from=1,to=50,by=1), init=matrix(0,nrow=80,ncol=80), solver ='iteration', initfunc = function(obj) { init(obj)[38:42, 38:42] <- 1 obj } ) library('simecol') #(1) symulujemy model CA <- sim(ca) #(2) rysujemy model plot(ca) #(3)Wyniki o<-out(ca)
Runda 3 ćwiczymy wyobraźnię
1. if( i> 1000 ){ 2. ## rule 2: growth and survival of juveniles 3. xsurvj <- ifelse(x>=1 & x < adult & runif(x) <= pj, x+1,floor(runif(1,0,2)) ) 4. ## rule 2: growth and survival of adults 5. xsurva<-ifelse(x>=adult & x < old & runif(x) <= pa, x+1, 0 ) 6. ## rule 2: growth and survival of senescent 7. xsurvs<-ifelse(x>= old & runif(x) <= ps, x+1, 0 ) 8. ## rule 2: growth and survival of senescent 9. x <-xgen+ xsurvj+ xsurva+ xsurvs 10. } 11. else { 12. ## rule 2: growth and survival of juveniles 13. xsurvj <- ifelse(x>=1 & x < adult & runif(x) <= pj2, x+1, floor(runif(1,0,2)) ) 14. ## rule 2: growth and survival of adults 15. xsurva<-ifelse(x>=adult & x < old & runif(x) <= pa2, x+1, floor(runif(1, 2,5)) ) 16. ## rule 2: growth and survival of senescent 17. xsurvs<-ifelse(x>= old & runif(x) <= ps2, x, floor( runif(1,0, 5) ) ) 18. ## rule 2: growth and survival of senescent 19. x <-xgen+ xsurvj+ xsurva+ xsurvs 20. }
Dziękujemy za uwagę Literatura: Thomas Petzoldt, KarstenRinke, simecol: An Object-Oriented Framework for Ecological Modeling in R Thomas Petzoldt, Simulation of ecological (and other) dynamic systems Thomas Petzoldt, Objects, Clones and Collections Dynamic (Ecological) Models and Scenarios with simecol