ONA – Zadanie 2 – podstawowa liczba odtwarzania wirusa

Naszym zadaniem będzie implementacja funkcji, która będzie wykorzystywac metodę liniowych najmniejszych kwadratów, aby znaleźć podstawową liczbę odtwarzania dla przypadków COVID-19 w Polsce.

W naszym (niezmiernie uproszczonym i nie nadającym się do zastosowań praktycznych, ale ilustrującym kluczowe idee) modelu, przyjmiemy, że początkowy rozwój wirusa w populacji rośnie wg wykładniczego wzrostu:

eq1

gdzie t oznacza czas (w dniach), n_E(t) oznacza liczbę osób chorych w momencie t, R_0 jest szukaną podstawową liczbą odtwarzania, zaś \tau przyjmiemy za równą 1.

Nasz program będzie wykorzystywał fakt, że to równanie po obustronnym zlogarytmowaniu staje się liniowe:

eq2

Jeśli mamy dane o liczbie potwierdzonych chorych w pewnym okresie (dla każdego kolejnego dnia), znamy \tau, to możemy wykorzystać liniową ważoną metodę najmniejszych kwadratów do dopasowania rozwiązania, aby znaleźć log(R_0).

Warto  pamiętać, że w tym przypadku, jeśli nie zastosujemy wag w metodzie najmniejszych kwadratów, nasza metoda będzie minimalizować |log(x)-log(b)|^2, co nie będzie prawidłowe. Jak widać na poniższym rysunku, dopasowanie do danych jest lepsze (zwłaszcza z prawej strony) dla problemu ważonego.

Figure_1Dlatego warto przypomnieć sobie zadanie o ważonym zagadnieniu liniowych największych kwadratów, które ma podane rozwiązanie w materiałach do metod numerycznych. W naszym przypadku wagi w_i są równe n_E(i).

Punktacja:

  1. Napisanie funkcji wykorzystującej funkcję scipy.linalg.lstsq (proszę nie używać funkcji typu polyfit) i obliczającej ważony liniowy problem najmniejszych kwadratów (5 pktów)
  2. Napisanie funkcji wykorzystującej funkcję urlopen() i dane dostępne publicznie aby pobrać pierwsze 28 dni, kiedy w wybranym kraju (np. Polsce) występowały zachorowania (tj. pomijając pierwsze zera w linii odpowiadającej danemu krajowi) (5 pktów)
  3. Napisanie programu, który wykorzystuje te dane, aby obliczyć R_0 zgodnie z wzorami podanymi powyżej. Program powinien też generować wykres podobny do powyższego. (5 pktów)

Rozwiązania należy nadsyłać w ciągu dwóch tygodni (czyli do 13. maja włącznie) na mój adres e-mail z dopiskiem [ONA-2] w tytule. Jak zwykle, proszę o skomentowane pliki .py jako normalne załączniki.

14 thoughts on “ONA – Zadanie 2 – podstawowa liczba odtwarzania wirusa

  1. bartek Post author

    Zgodnie z tym co mówiłem podczas wykładu, można używać pakietu pandas do wczytywania pliku CSV, ale można też używać po prostu funkcji readlines() i metody .split() na napisach.

    Reply
    1. Weronika

      W którym miejscu, używając pakietu pandas powinniśmy wówczas zastosować funkcję urlopen? Mam wrażenie, że pd.read_csv jest samowystarczalne bez tej funkcji. Skłaniałabym się jednak bardzo do używania tego pakietu ze względu na podział w danych na prowincje/stany, co przy Polsce nie ma znaczenia, jednak przy Chinach mogłoby nam wypluwać różne kruczki, które rozwiąże pd.groupby.

      Reply
      1. bartek Post author

        Oryginalne zadanie nie zawierało żadnego odniesienia do pakietu pandas, więc zalecało urlopen() do pobrania danych. Jeśli korzysta Pani z pandas, może Pani otwierać pliki zdalne, więc nie musi pani korzystać z urlopen()

        Reply
  2. bartek Post author

    Jeszcze jeden komentarz wynikający z pytań jednego ze słuchaczy. Wartość n_e(0) jest w modelu parametrem a równania a*R^t. Jeśli Państwo założą, że w związku z tym można po prostu wstawić wartość z pierwszego dnia i nie szukać tego współczynnika, to ograniczają Państwo przestrzeń modeli. Przypominam, że szukamy modelu, w którym również pomiar liczby chorych pierwszego dnia może być błędny, co oznacza, że parametr a jest szukaną, a nie daną.

    Reply
  3. Maks Dobrowolski

    Czy mamy napisać program tylko dla danych z Polski, czy to osoba odpalającą program ma mieć możliwość wyboru państwa z danych?

    Reply
    1. bartek Post author

      W opisie mowa jest o ‘wybranym kraju’, idealnie jeśli użytkownik może go wybrać podczas uruchomienia

      Reply
  4. Paulina Kucharewicz

    Czy w związku z tym mamy też ignorować równanie dla pierwszego dnia podczas szukania współczynników funkcji, ponieważ dla niego wagą powinno być nE(0), które zakładamy, że może być błędne?

    Reply
    1. bartek Post author

      Wszystkie pomiary mogą być różne od modelu i mogą być też błędne, choć to dwie różne sprawy są. Jak w każdym przypadku dopasowania danych do modelu, szukamy najlepszego modelu jeśli chodzi o dopasowanie do danych. Jeśli Państwo uznaliby, że nE(0) jest już gotowym parametrem modelu, to przypisywaliby Państwo temu kokretnemu punktowi danych wagę nieskończenie wielką. Natomiast dopasowywanie tego parametru nie wyklucza stosowania wagi. Nie warto brać pomiarów zerowych, ale takich tam być nie powinno

      Reply
  5. Ignacy

    Czy wagi w zadaniu powinny być równe liczbie przypadków czy logarytmowi z liczby przypadków?

    Reply
    1. bartek Post author

      Tak, choć moje dane pochodziły z innego źródła i mogą niewiele różnić się od tych, które Państwo pobierają. Nie mniej zasadniczo, obraz powinien być podobny, mimo jakichś drobnych odchyleń.

      Reply
  6. Weronika

    Czy “wykres podobny do powyższego” oznacza, że powinniśmy rozwiązać również problem nieważony, czy wystarczy część bez niebieskiej linii?

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>