# Vorbereitungsaufwand in Minuten
x = [10,20,45,30,60]
# erzielte Punkte
y = [25,60,88,50,92]
# Punkte anzeigen
import matplotlib.pyplot as plt
#Koordinatensystem
xmin=0
xmax=80
ymin=0
ymax=120
plt.axis([xmin, xmax, ymin, ymax])
plt.xlabel("X-Werte (Aufwand)")
plt.ylabel("Y-Werte (erzielte Punkte)")
# Punkte xList, yList
plt.scatter(x, y, color="red")
plt.grid(True)
plt.show()
$m = \frac{\sum_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})}{\sum_{i=1}^n(x_i-\bar{x})^2}$
$b = \bar{y} - m \cdot \bar{x}$
$R^2 = 1 - \frac{\sum_{i=1}^n(y_i-\hat{y}_i)^2}{\sum_{i=1}^n(y_i-\bar{y})^2}$
$y = m \cdot x + b$
# Mittelwert (mean)
def mittelwert(x):
sum = 0
for xe in x:
sum+=xe
return sum / len(x)
# Steigung m (slope)
def compute_m(xList, yList):
xMittel=mittelwert(xList)
yMittel=mittelwert(yList)
frac1 = sum([(xList[i] - xMittel)*(yList[i] - yMittel) for i in range(len(xList))])
frac2 = sum([(xList[i] - xMittel)**2 for i in range(len(xList))])
m = frac1 / frac2
return m
# b (intercept)
def compute_b(xList,yList,m):
xMittel=mittelwert(xList)
yMittel=mittelwert(yList)
b = yMittel - m * xMittel
return b
# y = f(x)
def regVal(xVal, m, b):
return m*xVal+b
# y-Werte der Regressionsgerade
def regVals(xList, m, b):
yVals = [regVal(xList[i],m,b) for i in range(len(xList))]
return yVals
# Methode der kleinsten Quadrate kurz MKQ bzw. englisch method of least squares
def mkq(yList, regVals):
mkq = sum([(yList[i] - regVals[i])**2 for i in range(len(yList))])
return mkq
# R2
def r2(yList, regVals):
yMittel=mittelwert(y)
frac1 = sum([(yList[i] - regVals[i])**2 for i in range(len(yList))])
frac2 = sum([(yList[i] - yMittel)**2 for i in range(len(yList))])
r2Val = 1 - frac1 / frac2
return r2Val
# xMittel, yMittel
xMittel = mittelwert(x)
yMittel = mittelwert(y)
print("Mittelwert x-Werte:",xMittel)
print("Mittelwert y-Werte:",yMittel)
Mittelwert x-Werte: 33.0 Mittelwert y-Werte: 63.0
# Funktionsgleichung der Regressionsgerade
m = compute_m(x,y)
b = compute_b(x,y,m)
print("y = ",m,"*x + ",b)
y = 1.2879746835443038 *x + 20.496835443037973
# compute regression values for all x_values
regression = regVals(x,m,b)
print("Regression Y-Werte:",list(zip(x,regression)))
# compute mkq
mkqVal = mkq(y,regression)
print("Methode der kleinsten Quadrate:",mkqVal)
# compute r2
r2Val = r2(y,regression)
print("R2:",r2Val)
Regression Y-Werte: [(10, 33.37658227848101), (20, 46.25632911392405), (45, 78.45569620253164), (30, 59.13607594936709), (60, 97.77531645569621)] Methode der kleinsten Quadrate: 466.9715189873419 R2: 0.8487786531776742
# plot regression line
# scatter y-values an regression-values
import matplotlib.pyplot as plt
#Koordinatensystem
xmin=0
xmax=80
ymin=0
ymax=120
plt.axis([xmin, xmax, ymin, ymax])
plt.xlabel("X-Werte (Aufwand)")
plt.ylabel("Y-Werte (erzielte Punkte)")
# Punkte xList, yList
plt.scatter(x, y, color="red")
# Punkte Regressionsgerade
plt.scatter(x,regression,color="green")
# Linie Regressionsgerade
y1=regVal(xmin,m,b)
y2=regVal(xmax,m,b)
plt.plot([xmin,xmax],[y1,y2],color="blue")
plt.grid(True)
plt.show()
# predict y_value for x_value=50
xVal = 37
yValPred = regVal(37,m,b)
print("Bei einem Vorbereitungsaufwand von",xVal,"Minuten wird eine Punktzahl von",round(yValPred,2),"erwartet.")
# predict y_values for x_values=50,70,90
xVals = [25,50,75]
yValsPred = regVals(xVals,m,b)
for i in range(len(xVals)):
print("Bei einem Vorbereitungsaufwand von",xVals[i],"Minuten wird eine Punktzahl von",round(yValsPred[i],2),"erwartet.")
Bei einem Vorbereitungsaufwand von 37 Minuten wird eine Punktzahl von 68.15 erwartet. Bei einem Vorbereitungsaufwand von 25 Minuten wird eine Punktzahl von 52.7 erwartet. Bei einem Vorbereitungsaufwand von 50 Minuten wird eine Punktzahl von 84.9 erwartet. Bei einem Vorbereitungsaufwand von 75 Minuten wird eine Punktzahl von 117.09 erwartet.