Gruppenseite - HP Bearbeiten

Diese Seite enthält die gesammelten Materialien der Gruppe 7 - HP für die Portfolioprüfung.

Teilnehmer-innen Bearbeiten

  • Herget, Bianca
  • Pfeifer, Vanessa

Verschiedene Modelle Bearbeiten

Im Folgenden sind verschiedenen Modelle zu finden, die die Verbreitung des Corona-Virus mit verschiedenen Programmen darstellen. Dabei werden unterschiedliche Aspekte betrachtet und anschließend Vor- und Nachteile erläutert.

Das Modell in Excel Bearbeiten

Zunächst wurde versucht in Excel ein erstes Modell zu entwickeln. Dabei steht jede Zelle für eine Person. Es wurde eine 20 x 20 Matrix erstellt, mit den Einträgen 0. Null bedeutet hier, dass die Personen nicht infiziert sind und noch zu den Personen gehören, die noch infiziert werden können (S: susceptible). Zu Beginn wurde ein Infizierter in Zelle J10 gewählt. Alle Infizierte bekamen den Eintrag 1 (I: infected).


 
Abb.1: Ausgangslage


Im nächsten Zeitschritt wurde eine "WENN-Abfrage" verwendet, die einen "ODER-Befehl" enthält. Jede Zelle, die sich in unmittelbarer Nähe (waagrecht, senkrecht oder diagonal) zu der ersten infizierten Zelle befindet, wurde ebenfalls infiziert und bekam den Eintrag 1. Alle anderen Zellen, die sich weiter weg befinden, zeigten weiterhin ein 0 an. Ein Zeitschritt entsprach hierbei 1 Woche.

Es ist davon auszugehen, dass eine mit dem Corona-Virus infizierte Person nach 14 Tagen (2 Wochen) wieder genesen und immun gegenüber einer Neuinfektion ist (R: removed). Diese Personen bekamen in unserem Modell den Eintrag 2. Um dies in der Excel-Datei umzusetzten, wurde eine zweite "WENN-Abfrage" vor die erste gesetzt. In dieser Abfrage wurde die betrachtete Zelle mit der Zelle vor zwei Zeitschritten, die die gleiche Position hat, verglichen, ob es dort schon einen Infizierten gab. Wenn dies so war, gab die aktuelle Zelle eine 2 aus und ansonsten wurde die zweite "WENN-Abfrage" durchlaufen um so neue Infizierte zu erhalten. Nach dem zweiten Zeitschritt trat nun die erste gesunden Person auf:


 
Abb.2: zweiter Zeitschritt


Vor- und Nachteile Bearbeiten

Das Modell in Excel dient dafür einen ersten Überblick über die Verbreitung des Viruses zu bekommen. Auch für Schüler/innen ist es geeignet, da sie selbst dieses Modell entwickeln können. Es ist zu beachten, dass sich in dem vorliegenden Modell, die Personen nicht bewegen, es ist ein starres Modell. Ebenfalls wird jede Person, die sich in der Nähe einer infizierten Person befindet, ebenfalls infiziert. Dies entspricht nicht der Wirklichkeit. Es besteht immer eine gewisse Wahrscheinlichkeit sich zu infizieren oder gesund zu bleiben. Zudem wird das Modell in Excel für viele Wochen sehr aufwendig, da man manuell die einzelnen Zellen nach dem Kopieren der Matrix abändern muss.

Erstes Modell in Octave Bearbeiten

In diesem Modell wird versucht die erste Idee in Excel in Octave zu übertragen. Dazu werden zunächst die Anfangsbedingungen definiert.

Anfangsbedingungen Bearbeiten

Es wird eine 10x10 Gitter erstellt bei dem sich zu Beginn der erste Infizierte bei (5,5) befindet. Jeder Gitterpunkt steht für eine Person, die noch infiziert werden kann und so zu der Gruppe S (susceptible) zählt.

       Nx=10;
       Ny=10;
       i=[1:1:Nx];
       j=[1:1:Ny];
       xInf=(Nx/2);
       yInf=(Ny/2);
       [x,y]=meshgrid(i,j);
       I=[xInf;yInf]% erster Infizierter
       plot([x,y],'*b')

Abstandsfunktion Bearbeiten

Im nächsten Schritt wurde eine Abstandsfunktion definiert, die den "WENN-Befehl" in der Excel Datei ersetzen soll. Sie bestimmt den Abstand zwischen zwei Punkte (Personen) über ihre x- und y-Koordinate. Dadurch wird der Abstand über die verbundene Kantenlänge und nicht mehr über den direkten Weg über die Diagonale bestimmt.

       function abstand=abstand(L,M)
          abstand=abs(L(1,1)-M(1,1))+abs(L(2,1)-M(2,1))
       endfunction

for-Schleife Bearbeiten

In dieser for-Schleife wird der Abstand über die Abstandsfunktion von jedem Gitterunkt P mit dem infizierten Punkt verglichen. Ist der Abstand (die Kantenlänge) kleiner als 2, dann werden die gefundenen Koordinaten zu xInfneu, bzw. yInfneu.

       for x=1:1:Nx;
          for y=1:1:Ny;
            P=[x;y]
             if abstand(P,I)<2
              %alle Punkte die den Kantenlängenabstand 0 oder 1 zu dem infizierten Punkt haben, werden infiziert
              %in den neuen Infizierten wird der alte Infizierte mit rein genommen
                xInfneu=P(1,1)
                yInfneu=P(2,1)
                Infneu=[xInfneu;yInfneu]
       
                figure(1)
                hold on
                plot(xInfneu,yInfneu,'*g')%neue Infizierte werden grün geplottet
                axis([0 11 0 11])
                hold off
              endif
           endfor
        endfor

Diese for-Schleife wurde danach nochmal in einer ähnlich konzipierten Schleife durchlaufen, indem man mit Hilfe der Abstandsfunktion den Abstand von allen Gitterpunkten zu den neuen gefundenen infizierten Punkte aus der ersten Schleife verglich. In der folgenden Darstellung stehen die blauen Punkte für die Personen, die noch infiziert werden können (susceptible), die grünen, die in der ersten Schleife gefunden und infiziert wurden und die roten, die in der zweite Schleife noch hinzugefügt wurden (infected).

 

Vor- und Nachteile Bearbeiten

Diese Modell schafft einen guten Übergang zwischen dem Modell von Excel und das anschließenden SI-Modell. Zwar ist es noch ein starres Modell, da jeder Punkt ein fest zugeordneten Platz im Gitter hat, jedoch ist es nun durch die Abstandsfunktion weniger aufwendig als der "WENN-Befehle" im Excel Modell. Wie zuvor wurde noch immer nicht beachtet, dass ein Infizierter nicht mit der gleichen Wahrscheinlichkeit alle Punkte in der Nähe infiziert.

SI- Modell Bearbeiten

Es wurde ein SI Modell in Octave implementiert. Zusätzlich wurde durch eine Austauschmatrix Bewegungen zwischen den Gebieten, berücksichtigt. Bei dem SI - Modell wird die Gesamtbevölkerung in 2 Gruppen eingeteilt:

          S: susceptibled (Infektionsanfällige)
          I: infected (kummulierte Infizierte)

In unserem Modell betrachten wir 4 verschiedene Bahnhöfe ( Berlin Hbf, Hamburg Hbf, München Hbf und Köln Hbf). Es ist damit zu rechnen, dass jeder Bahnhof, täglich von ca. 400.000 Menschen besucht/durchquert wird.


Definieren der Parameter Bearbeiten

          an=[0.25;0.25;0.25;0.25]; %Ansteckungsrate
          w=1/14; %Genesungsrate
          per=400000; %Anzahl Reisende 
          r=1; %Prozentual erfasste Leute durch Tests
          Ba=4; %4 Bahnhoefe
          t=150; %Tage
       

Die Ansteckungsrate ist in alle 4 Bahnhöfen gleich. Die Genesungsrate setz sich aus der Annahme, dass eine Person nach 14 Tage genesen ist, zusammen. r beschreibt den tatsächlichen prozentualen Anteil der Bevölkerung, der durch einen Corona-Test erfasst wurde.

Ausgangssituation Bearbeiten

Zunächst werden zwei   ×   Matrizen für die Infektionsanfälligen und die Infizierten erstellt:

          S=ones(t,Ba); %Matrix für Infektionsanfällige besteht aus Einser
          I=zeros(t,Ba); %Matrix für Infizierte besteht aus Nuller

Jede Zeile der Matrix beschreibt ein Zeitschritt in Tage und jede Spalte einen Bahnhof. Das Ziel ist es nun die Matrizen so anzupassen, dass in jedem Zeitschritt eine Zeile ausgetauscht wird. Zunächst werden 16 Infizierte in Bahnhof 2 (zweite Spalte) notiert.

          infi= 16; %von 400000 gesunden Personen sind 16 infiziert
          Sanfang=[per per-infi per per]; %An Bahnhof 2 sind 16 weniger gesund
          Ianfang= [0 infi 0 0]; %Nur an Bahnhof 2 befinden sich 16 Infizierte

Diese so entstandenen Vektoren werden nun in die erste Zeile der jeweiligen Matrix eingetragen.

          S(1,:)=Sanfang;
          I(1,:)=Ianfang;

Austauschmatrix Bearbeiten

Im nächsten Schritt wird eine zufällig 4x4 Austauschmatrix A erstellt. Dazu wird zunächst jede Zelle auf eine ganze Zahl gerundet.


          B=rand(4);
          round(B.*100)./100;

Es muss darauf geachtet werden, dass die Summe der Elemente in jeder Spalte eins ergibt. Deshalb wird jedes Element durch den jeweiligen Summe a, b, c oder d genormt.

          a= B(1,1)+B(2,1)+B(3,1)+B(4,1);
          b= B(1,2)+B(2,2)+B(3,2)+B(4,2);
          c= B(1,3)+B(2,3)+B(3,3)+B(4,3);
          d= B(1,4)+B(2,4)+B(3,4)+B(4,4);
          A=[(B(1,1)/a) (B(1,2)/b) (B(1,3)/c) (B(1,4)/d);
             (B(2,1)/a) (B(2,2)/b) (B(2,3)/c) (B(2,4)/d);
             (B(3,1)/a) (B(3,2)/b) (B(3,3)/c) (B(3,4)/d);
             (B(4,1)/a) (B(4,2)/b) (B(4,3)/c) (B(4,4)/d)];

Tag 0 Bearbeiten

Nachdem die Ausgangslage definiert wurde, kann nun die eigentliche Modellierung beginnen. Das SI-Modell wird nach den folgenden Formeln berechnet:

          S'=S-(an/(r*per))*I*S
          I'=I+(an/per)*I*S

Zunächst wird die erste Zeile transponiert, damit man Vektoren komponentenweise miteinander multiplizieren kann. Zur Kontrolle dient nach jeder SI_Berechnung der "sum-Befehl" um zu schauen, wie sich die Reisenden auf die jeweilige Gruppe verteilt haben. Da wir, wie oben erwähnt, zeilenweise die Matrix ergänzen wollen, muss man darauf achten, dass man die berechneten Vektoren wieder transponiert.

          Sneu_Tag=S;
          Ineu_Tag=I;
          S0=Sneu_Tag(1,:).'-(1/(r*per))*an.*Ineu_Tag(1,:).'.*Sneu_Tag(1,:).'; %Zeile als Vektor dargestellt und anweden von Formel S
          I0=Ineu_Tag(1,:).'+(1/per)*an.*Ineu_Tag(1,:).'.*Sneu_Tag(1,:).'; %Zeile Als Vektor von Matrix I und anweden der Formel I
          sum1_1=sum(S0);
          sum1_2=sum(I0);
          Sneu_Tag(1,:)=S0.';
          Ineu_Tag(1,:)=I0.';

for-Schleife Bearbeiten

Eine for-Schleife ist hier von Vorteil, da man so viel mehr Tage betrachten kann.

Im folgenden ist die for-Schleife, die wir in Octave implementiert haben, zu finden. Nach Tag 0 und der Infizierung der an den Bahnhöfen befindlichen Personen, haben wir die Austauschmatrix angewendet, um eine Verteilung der Menschen an die verschiedenen Bahnhöfen zu simulieren. B1 beschreibt die Bewegung der Personen die noch anfällig für eine Infektion sind (S) und B2 beschreibt die Bewegung der infizierten Personen (I).

          for T=1:1:t; %Anzahl der Tage
            %Bewegung
            B1=A*Sneu_Tag(T,:).'; 
            Sneu_Tag(T,:)=B1.'; 
            B2=A*Ineu_Tag(T,:).';
            Ineu_Tag(T,:)=B2.' ;


Nach der Verteilung der Personen wurde wieder das SI Modell angewendet um neue infektionen zu simulieren:

            %SI
            ST=Sneu_Tag(T,:).'-((1/(r*per))*an.*Ineu_Tag(T,:).').*Sneu_Tag(T,:).';
            IT=Ineu_Tag(T,:).'+((1/per)*an.*Ineu_Tag(T,:).').*Sneu_Tag(T,:).';
            sum_1=sum(ST)
            sum_2=sum(IT)
            Sneu_Tag(T+1,:)=ST.';
            Ineu_Tag(T+1,:)=IT.';
          endfor

          %Ausgabe der Endmatrix zur Überprüfung 
          Sneu_Tag
          Ineu_Tag

Plotten Bearbeiten

Im Folgenden sieht man die jeweiligen Plotts von S und I, die die Entwicklung im jeweiligen Bahnhof in den verschiedenen Tagen darstellt.

          %---plotten----
          e=1:1:t+1;
          figure(1)
          plot(e,Sneu_Tag(:,1),e,Sneu_Tag(:,2),e,Sneu_Tag(:,3),e,Sneu_Tag(:,4))
          legend("Bahnhof 1", "Bahnhof 2", "Bahnhof 3","Bahnhof 4", "location", "eastoutside")
          xlabel('Tage')
          ylabel('Personen')
          title('susceptible')
          figure(2)
          plot(e,Ineu_Tag(:,1),e,Ineu_Tag(:,2),e,Ineu_Tag(:,3),e,Ineu_Tag(:,4))
          legend("Bahnhof 1", "Bahnhof 2", "Bahnhof 3","Bahnhof 4", "location", "eastoutside")
          xlabel('Tage')
          ylabel('Personen')
          title('infected')
 
 




















Vor- und Nachteile Bearbeiten

Die for-Schleife ermöglicht uns, im Gegenteil zu den beiden vorherigen Modellen, mit weniger Aufwand mehr Tage zu betrachten. Zudem erhält die Matrix durch Multiplikation der Austauschmatrix einen Austausch unter den Bahnhöfen. Wie man in den Plotts sieht, sinkt die Anzahl der susceptibled bis keine mehr da sind und die Anzahl der infected steigt bis alle Personen infiziert sind. Im realen Leben jedoch werden die Infizierten nach 14 Tagen gesund (oder sterben). Deshalb ist es sinnvoll eine weitere Gruppe R (recovered), wie im Excel-Modell, zu betrachten.

SIR-Modell Bearbeiten

Das SI-Modell wurde auf das SIR-Modell erweitert. Es wurde wie zuvor die Austauschmatrix, für die Bewegung zwischen den Gebieten, berücksichtigt. Bei dem SIR - Modell wird die Gesamtbevölkerung in 3 Gruppen eingeteilt:

       S: susceptibled (Infektionsanfällige)
       I: infected (kummulierte Infizierte)
       R: recovered (Genesenen)

Es wurden immer noch die 4 verschiedenen Bahnhöfe (Berlin Hbf, Hamburg Hbf, München Hbf und Köln Hbf) mit jeweils 400.000 Menschen betrachtet.

Definieren der Parameter Bearbeiten

       an=[0.25;0.25;0.25;0.25]; %Ansteckungsrate
       w=1/14; %Genesungsrate, Annahme nach 14 Tagen wieder gesund
       per=400000; 
       r=1; 
       Ba=4;% 4 Bahnhoefe (Muenchen, Koeln, Berin, Hamburg)
       t=150; %Tage      

Die Ansteckungsrate ist in alle 4 Bahnhöfen gleich. Die Genesungsrate setzt sich aus der Annahme, dass eine Person nach 14 Tage genesen ist, zusammen. r beschreibt den tatsächlichen prozentualen Anteil der Bevölkerung, der durch einen Corona-Test erfasst wurde.

Ausgangssituation Bearbeiten

Zunächst werden drei   ×   Matrizen für die Infektionsanfälligen (S), die Infizierten (I) und die Genesenen (R) erstellt:

       S=ones(t,Ba); %Matrix für Infektionsanfällige besteht aus Einser
       I=zeros(t,Ba); %Matrix für Infizierte besteht aus Nuller
       R=zeros(t,Ba); %Matrix für Genesenen, besteht aus Nullen

Jede Zeile der Matrix beschreibt ein Zeitschritt in Tage und jede Spalte einen Bahnhof. Das Ziel ist es nun die Matrizen so anzupassen, dass in jedem Zeitschritt eine Zeile ausgetauscht wird. Zunächst werden 16 Infizierte in Bahnhof 2 (zweite Spalte) notiert.

       infi=16; % von 400000 gesunden Personen sind 16 infiziert
       Sanfang=[per per-infi per per]; % An Bahnhof 2 sind 16 weniger gesund
       Ianfang= [0 infi 0 0];% Nur an Bahnhof 2 befinden sich 16 Infizierte
       Ranfang= [0 0 0 0]; % es gibt noch keine Genesenen

Diese so entstandenen Vektoren werden nun in die erste Zeile der jeweiligen Matrix eingetragen.

       S(1,:)=Sanfang;
       I(1,:)=Ianfang;
       R(1,:)=Ranfang;

Tag 0 Bearbeiten

Nachdem die Ausgangslage definiert wurde, kann nun die eigentliche Modellierung beginnen. Das SIR-Modell wird nach den folgenden Formeln berechnet:

       S'=S-(an/(r*per))*I*S
       I'=I+(an/per)*I*S-w*I
       R'=w*I         

Zunächst wird die erste Zeile transponiert, damit man Vektoren komponentenweise miteinander multiplizieren kann. Zur Kontrolle dient nach jeder SIR-Berechnung der "sum-Befehl" um zu schauen, wie sich die Reisenden auf die jeweilige Gruppe verteilt haben. Da wir, wie oben erwähnt, zeilenweise die Matrix ergänzen wollen, muss man darauf achten, dass man die berechneten Vektoren wieder transponiert. Zunächst befinden sich noch keine Genesenen unter den Reisenden. Deshalb wird am Tag 0 erst das normale SI-Modell durchgeführt.

       Sneu_Tag=S;
       Ineu_Tag=I;
       Rneu_Tag=R;
       S0=Sneu_Tag(1,:).'-(1/(r*per))*an.*Ineu_Tag(1,:).'.*Sneu_Tag(1,:).';
       I0=Ineu_Tag(1,:).'+(1/per)*an.*Ineu_Tag(1,:).'.*Sneu_Tag(1,:).'; 
       sum1_1=sum(S0);
       sum1_2=sum(I0);

       Sneu_Tag(1,:)=S0.';
       Ineu_Tag(1,:)=I0.';

for-Schleife Bearbeiten

Die Austauschmatrix ist dieselbe wie in dem SI-Modell.

Im folgenden ist die for-Schleife, die wir in Octave implementiert haben, zu finden. Nach Tag 0 und der Infizierung der an den Bahnhöfen befindlichen Personen, haben wir die Austauschmatrix angewendet, um eine Verteilung der Menschen an die verschiedenen Bahnhöfen zu simulieren. B1 beschreibt die Bewegung der Personen die noch anfällig für eine Infektion sind (S), B2 beschreibt die Bewegung der infizierten Personen (I) und B3 die Bewegung der Genesenen Personen (R).

       for T=1:1:t; %Anzahl der Tage
    
         %Bewegung
         B1=A*Sneu_Tag(T,:).'; 
         Sneu_Tag(T,:)=B1.'; 
         B2=A*Ineu_Tag(T,:).';
         Ineu_Tag(T,:)=B2.' ;
         B3=A*Rneu_Tag(T,:).';
         Rneu_Tag(T,:)=B3.' ;

Nach der Bewegung und der Verteilung wurde das SIR-Modell angewendet, um neue infizierte und genesene Personen zu simulieren.

         %SIR
         ST=Sneu_Tag(T,:).'-((1/(r*per))*an.*Ineu_Tag(T,:).').*Sneu_Tag(T,:).';
         IT=Ineu_Tag(T,:).'+(((1/per)*an.*Ineu_Tag(T,:).').*Sneu_Tag(T,:).')-Ineu_Tag(T,:).'.*w;
         RT=Rneu_Tag(T,:).'+Ineu_Tag(T,:).'.*w;
         sum_1=sum(ST)
         sum_2=sum(IT)
         sum_3=sum(RT)
         Sneu_Tag(T+1,:)=ST.';
         Ineu_Tag(T+1,:)=IT.';
         Rneu_Tag(T+1,:)=RT.';
       endfor

Plotten Bearbeiten

Im folgenden sind drei Plots des SIR-Modells zu finden. Figure (1) stellt die Veränderung der susceptible da, Figure (2) die Änderung der infected und Figure (3) stellt die recovered da.

       e=1:1:t+1;
       figure(1)
       plot(e,Sneu_Tag(:,1),e,Sneu_Tag(:,2),e,Sneu_Tag(:,3),e,Sneu_Tag(:,4))
       legend("Bahnhof 1", "Bahnhof 2", "Bahnhof 3","Bahnhof 4", "location", "eastoutside")
       xlabel('Tage')
       ylabel('Personen')
       title('susceptible')
       figure(2)
       plot(e,Ineu_Tag(:,1),e,Ineu_Tag(:,2),e,Ineu_Tag(:,3),e,Ineu_Tag(:,4))
       legend("Bahnhof 1", "Bahnhof 2", "Bahnhof 3","Bahnhof 4", "location", "eastoutside")
       xlabel('Tage')
       ylabel('Personen')
       title('infected')
       figure(3)
       plot(e,Rneu_Tag(:,1),e,Rneu_Tag(:,2),e,Rneu_Tag(:,3),e,Rneu_Tag(:,4))
       legend("Bahnhof 1", "Bahnhof 2", "Bahnhof 3","Bahnhof 4", "location", "eastoutside")
       xlabel('Tage')
       ylabel('Personen')
       title('recovered')
 
 
 

Vor- und Nachteile Bearbeiten

Im SIR-Modell entsteht eine neue Gruppe, die Genesenen. Dadurch ist dieses Modell näher an der Realität als das SI-Modell. Zudem wird durch Einfügen der Bevölkerungszahl gewährleiset, dass die Bevölkerung nicht ins Negative fällt, sondern irgendwann gesättigt ist. Man sieht an den drei Graphiken gut, wann welche Kurve steigt oder sinkt.


Ergänzungen Octave-Tutorial Bearbeiten

Diese Ergänzungen wurden bei dem Octave-Tutorial vorgenommen, um die Implementation der Gruppe bzgl. der verwendeten Octave-Befehle nachvollziehbar zu machen.

Skripte in Octave Bearbeiten

Referenzieren Sie hier die von Ihnen verwendeten Skripte und Bibliotheken in Octave[1] oder R/Studio

Quellenangaben Bearbeiten

Notieren Sie hier die von Ihnen verwendete Literatur

  • Boto von Querenburg (2013) Mengentheoretische Topologie - Springer-Lehrbuch
  • Wikipedia-Artikel zu Epidemiologie (2020)[2]

Literatur Bearbeiten

  1. Silva, I., & Moody, G. B. (2014). An open-source toolbox for analysing and processing physionet databases in matlab and octave. Journal of open research software, 2(1).
  2. „Epidemiologie“. In: Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: 25. Juni 2020, 09:27 UTC. URL: https://de.wikipedia.org/w/index.php?title=Epidemiologie&oldid=201288758 (Abgerufen: 25. Juni 2020, 10:24 UTC)