Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss25:vermoegenssimulation:technische_details

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ss25:vermoegenssimulation:technische_details [2025/07/02 15:27]
matteo06
ss25:vermoegenssimulation:technische_details [2025/07/02 17:18] (aktuell)
matteo06
Zeile 38: Zeile 38:
 $$ l(\beta_0, \beta_1) = \sum_{i=1}^{n} \left(d[i] - \left[ \beta_1 \cdot \left( \frac{ \left(\frac{i}{n}\right)^{g+1} - \left(\frac{i-1}{n}\right)^{g+1}}{g+1} \right) + \beta_0 \cdot \frac{1}{n} \right] \right)^2 $$ $$ l(\beta_0, \beta_1) = \sum_{i=1}^{n} \left(d[i] - \left[ \beta_1 \cdot \left( \frac{ \left(\frac{i}{n}\right)^{g+1} - \left(\frac{i-1}{n}\right)^{g+1}}{g+1} \right) + \beta_0 \cdot \frac{1}{n} \right] \right)^2 $$
  
-Nun kann mit der Funktion ''​minimize''​ aus ''​scipy.optimize''​ das Problem, die besten Werte für $\beta_0$ und $\beta_1$ zu finden, gelöst werden. Wie genau weiß ich auch nicht.+Nun kann mit der Funktion ''​minimize''​ aus ''​scipy.optimize''​ das Problem, die besten Werte für $\beta_0$ und $\beta_1$ zu finden, gelöst werden. Wie genau die Lösungsalgorithmen funktionieren ​weiß ich auch nicht.
  
 <code python> <code python>
Zeile 84: Zeile 84:
 </​code>​ </​code>​
  
 +Aus der Dichtefunktion lassen sich aber noch keine relativen Werte für die Agenten berechnen. Erstmal kann mit der Dichtefunktion $f$ nur ein absoluter Wert für jeden Agenten berechnet werden. Dazu braucht man einen konstanten Wert, der mit dem Funktoinswert von $f$ multipliziert wird.
 +
 +Also für das absolute Einkommen des Agenten ergibt sich:
 +$$ Einkommen = f(x) + C $$
 +Dabei ist $x$ die realtive Position des Agenten. Wenn der Agent die Position $i$ hat ist $x = \frac{i}{n}$,​ wobei $n$ die Anzahl von Agenten ist. $C$ ist eine Konstante, die z.B. das durchschnittliche Einkommen pro Person sein könnte.
 +
 +Um nun das relative Einkommen zu erhalten, muss nur das absolute Einkommen durch das Gesamteinkommen gerechnet werden. Dadruch ergibt sich das Einkommen der Agenten aus:
 +
 +$$ Einkommen_i = \frac{Absolutes Einkommen}{Gesamteinkommen} =  \frac{f(x_i) + C}{\sum_{i=0}^{n} f(x_j) +C } = \frac{f(x_i)}{\sum_{i=0}^{n} f(x_j)} $$
 +
 +Das lässt sich sehr einfach mit ''​numpy.arrays''​ umsetzen. Die gesamte Funktion sieht nun so aus
 +
 +<code python>
 +def g(n, Q) -> np.ndarray:
 +    """​Die Funktion berechnet für eine Anzalh an Agenten n und Quantilen Q die passende Verteilung
 +    und gibt als Rückgabewert einen Array mit den relativen Werten für jeden Agenten
 +    ​
 +    :param n: Anzahl an Agenten bzw. Werten, die Zurückgegeben werden sollen
 +    :type n: int
 +    :param Q: Liste mit realtiven nicht-kumulierten Quantilwerten
 +    :type Q: list
 +    :return: Liste mit relativen Werten für jeden Agenten bzw. mit Länge n
 +    :rtype: array
 +    """​
 +    ​
 +    array = np.linspace(0.5/​n,​ 1 - 0.5/n, n)  # relative Positionen von jedem Agenten
 +    # Variablen zuschreiben
 +    g = 2
 +    quantile = np.array(Q)/​100
 +    n = len(quantile)
 +    b_0 = 0
 +    b_1 = 0
 +
 +    # ALTER CODE - VON OBEN KOPIERT
 +    def l(xy):
 +        b_0, b_1 = xy
 +        error = 0
 +
 +        for i, element in enumerate(quantile):​
 +            integral = (b_1 * (((((i+1) / n)**(g+1)) - (((i)/​n)**(g+1)))/​(g+1)) + b_0 * (1/n))
 +            error += (element - integral)**2
 +        return error 
 +    def f(x):
 +        return b_1 * (x**g) + b_0
 +
 +    # Dichtefunktion f erstellen
 +    res = minimize(l, (1,1), method='​L-BFGS-B'​) ​    # (1,1) ist der Startwert
 +    b_0, b_1 = res.x
 +
 +    print(f'​Die Funktion lautet: f(x) = {b_1} * x^{g} + {b_0}'​)
 +    print(f'​Der Fehlerwert ist : {l(res.x)}'​)
 +
 +    # NEUER CODE
 +    # relative Werte für jeden Agenten Ermitteln
 +    array = f(array) ​           # Für jedes ELement im Array wird die Funktion angewendet
 +    array = array/​np.sum(array) ​   # relative Werte erghalten
 +
 +    return array
 +
 +</​code>​
ss25/vermoegenssimulation/technische_details.1751462854.txt.gz · Zuletzt geändert: 2025/07/02 15:27 von matteo06