Pearson R und Regressionsgerade.

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
IchPutzeHierNur
User
Beiträge: 1
Registriert: Donnerstag 9. März 2023, 15:13

Hallo Freunde,

ich bereite mich gerade auf eine Statistik-Klausur vor und möchte mir zur täglichen Übung ein paar Zufallszahlen für Rechnungen erstellen und die direkt als PDF speichern, einmal für Aufgaben und einmal die dazugehörigen Lösungen.

Habs jetzt nen paar mal ausprobiert, funktioniert auch alles sowie ich es wollte, allerdings ist mir eine große Diskrepanz zwischen dem Pearson R und der Regressionsgerade aufgefallen.

Vielleicht kann mal jemand schauen ob er spontan was findet?
Ansonsten bin ich für Kritik, Anmerkungen, Tipps how ever jederzeit dankbar!

LG

Code: Alles auswählen

 import random
import statistics
import numpy as np
from scipy.stats import zscore, linregress, pearsonr
import matplotlib.pyplot as plt
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

# Zufallsgenerator für Datensatz mit Wiederholung
dataA = [random.randint(1, 100) for _ in range(15)]

# a) Sortiere die Zahlen nach Größe
sorted_dataA = sorted(dataA)

# b) Zeichne einen Boxplot
plt.boxplot(sorted_dataA)
plt.title("Boxplot für dataA")
plt.savefig("boxplot.png")
plt.close()

# c) Berechne Varianz und Standardabweichung
variance_dataA = statistics.variance(sorted_dataA)
stddev_dataA = statistics.stdev(sorted_dataA)

# d) Führe Z-Transformation durch
z_transform_dataA = zscore(sorted_dataA)

# Generiere bivariates Datenset
x = np.array([random.randint(1, 100) for _ in range(15)])
y = np.array([random.randint(1, 100) for _ in range(15)])

# Führe lineare Regression durch
slope, intercept, r_value, p_value, std_err = linregress(x, y)
regression_equation = f"y = {slope:.2f}x + {intercept:.2f}"

# Berechne Pearson R und Bestimmtheitsmaß
pearson_r, _ = pearsonr(x, y)
coefficient_of_determination = pearson_r ** 2

# Berechne Residuen
residuals = y - (slope * x + intercept)

# Erstelle PDF-Datei für Aufgaben
pdf_filename_tasks = "arbeitsblatt_aufgaben.pdf"
c_tasks = canvas.Canvas(pdf_filename_tasks, pagesize=letter)

# Füge Text zum PDF für Aufgaben hinzu
c_tasks.drawString(100, 750, "Arbeitsblatt zur Statistik - Aufgaben")
c_tasks.drawString(100, 700, "Aufgabe 1:")
c_tasks.drawString(150, 680, "a) Sortiere die Zahlen nach Größe.")
c_tasks.drawString(150, 660, "b) Zeichne einen Boxplot.")
c_tasks.drawString(150, 640, "c) Berechne Varianz und Standardabweichung.")
c_tasks.drawString(150, 620, "d) Führe Z-Transformation durch.")
c_tasks.drawString(100, 570, "Generierter Datensatz A:")
c_tasks.drawString(150, 550, ", ".join(map(str, sorted_dataA)))

c_tasks.drawString(100, 500, "Aufgabe 2: Lineare Regression")
c_tasks.drawString(150, 480, "a) Bestimmen Sie die Regressionsgleichung")
c_tasks.drawString(150, 460, "b) Berechnen Sie die Residuen")
c_tasks.drawString(150, 440, "c) Berechne Sie Pearson R und das Bestimmtheitsmaß")
c_tasks.drawString(150, 420, "d) Zeichnen Sie die Regressionsgleichung.")
c_tasks.drawString(100, 370, "Generierter Datensatz X:")
c_tasks.drawString(150, 350, ", ".join(map(str, x)))
c_tasks.drawString(100, 330, "Generierter Datensatz Y:")
c_tasks.drawString(150, 310, ", ".join(map(str, y)))

c_tasks.save()

print("Arbeitsblatt für Aufgaben wurde als", pdf_filename_tasks, "gespeichert.")

# Erstelle PDF-Datei für Lösungen
pdf_filename_solutions = "arbeitsblatt_loesungen.pdf"
c_solutions = canvas.Canvas(pdf_filename_solutions, pagesize=letter)

# Aufgabe 1 Lösung
c_solutions.drawString(100, 750, "Arbeitsblatt zur Statistik - Lösungen - Aufgabe 1")

c_solutions.drawString(100, 700, "Lösung zu Aufgabe 1:")
# a) Sortierte Zahlen
c_solutions.drawString(150, 680, "a) Sortierte Zahlen: " + str(sorted_dataA))
# b) Boxplot siehe Anhang
c_solutions.drawString(150, 660, "b) Boxplot siehe Anhang.")
# c) Varianz und Standardabweichung
c_solutions.drawString(150, 640, "c) Varianz: " + str(variance_dataA))
c_solutions.drawString(150, 620, "   Standardabweichung: " + str(stddev_dataA))
# d) Z-Transformation
c_solutions.drawString(150, 600, "d) Z-Transformation:")
for z_value in z_transform_dataA:
    c_solutions.drawString(150, 580, str(z_value))
    c_solutions.translate(0, -20)

c_solutions.showPage()

# Aufgabe 2 Lösung
c_solutions.drawString(100, 750, "Arbeitsblatt zur Statistik - Lösungen - Aufgabe 2")

c_solutions.drawString(100, 700, "Lösung zu Aufgabe 2:")
# a) Regressionsgleichung
c_solutions.drawString(150, 680, "a) Regressionsgleichung:")
c_solutions.drawString(150, 660, regression_equation)
# d) Regressionsgleichung als Bild
c_solutions.drawString(150, 640, "d) Regressionsgleichung:")
c_solutions.drawImage("regressionsgerade.png", 100, 520, width=300, height=200)

# b) Residuen
c_solutions.drawString(150, 500, "b) Residuen: ")
for residual in residuals:
    c_solutions.drawString(150, 490, str(residual))
    c_solutions.translate(0, -20)

# c) Pearson R und Bestimmtheitsmaß
c_solutions.drawString(450, 600, f"c) Pearson R: {pearson_r:.2f}")
c_solutions.drawString(450, 580, f"Bestimmtheitsmaß: {coefficient_of_determination:.2f}")




c_solutions.showPage()

# Aufgabe 3 Lösung
c_solutions.drawString(100, 750, "Arbeitsblatt zur Statistik - Lösungen - Aufgabe 3")

# Füge Text für Aufgabe 3 Lösungen hinzu (noch nicht implementiert)

c_solutions.save()

print("Arbeitsblatt für Lösungen wurde als", pdf_filename_solutions, "gespeichert.")
Antworten