Assignment 06#
Due date: 10.05.2023
This week’s assignment has to be returned in the form a jupyter notebook.
Don’t forget the instructions!
01 - Linear regression function#
Write a function that computes the parameters \(a\) und \(b\) from the simple linear regression \(\hat{y} = a + bx\), where \(x\) is the explanatory variable and \(y\) the variable to approximate:
In the equation above, \(x_i\) is the i-th element of the vector \(x\), \(n\) is the length (size) of the vectors \(x\) and \(y\), and \(\overline{x}\) is the average of \(x\).
The signature of the function you have to write is given below:
def linear_regression(x, y):
"""Calculate a linear least-squares regression for two sets of measurements.
Parameters
----------
x, y: ndarray-like
Two sets of measurements. Both arrays should be 1-dimensional
and have the same length. They should not contain any missing data!
Returns
-------
(a, b): floats
Parameters a and b of the linear approximation y^ = a + b x
Examples
--------
>>> x = np.array([1, 2, 3, 4, 5])
>>> y = np.array([-5.3, -2.6, 0.1, 2.8, 5.5])
>>> a, b = linear_regression(x, y)
>>> np.isclose(a, -8)
True
>>> np.isclose(b, 2.7)
True
"""
# Make sure we manipulate ndarrays
x = np.asarray(x)
y = np.asarray(y)
# Least squares equations
< your code here >
return a, b
# Your answer here
If you have written the function correctly, the tests should pass with TestResults(failed=0, attempted=5)
:
# Testing
import doctest
doctest.testmod()
TestResults(failed=0, attempted=0)
02 - Instrument calibration#
A temperature sensor was calibrated in a precise temperature chamber. The instrument provides an analog output signal of varying voltage in Volts (V) on a single pin that can be measured. The temperature in the chamber T is increased from -20°C to 40°C in 2°C increments, and the sensor voltage is measured after the temperature in the chamber is stabilized.
The data is stored in a comma-separated file calibration.csv. Download the data file (right click + “Save as…”) and put the file in the same folder as this notebook. Explore the csv file by opening it in JupyterLab.
A few weeks ago, you wrote your own text file reader. This time, let me read the data for you using numpy:
import numpy as np
t, v = np.genfromtxt('calibration.csv', delimiter=',', skip_header=1, unpack=True)
Something happened during the experiment, and unfortunately some of the values are invalid with the missing value indicator -999. Filter the data series so that both t
and v
are of the same length and still represent the correct value pairs, without missing data.
# Your answer here
Plot the voltage values v
as a function of the temparature chamber t
on a scatter plot. Label the x and y axis accordingly.
# Your answer here
Using your linear regression function, find the sensor calibration parameters a and b, so that the temperature t can be reconstructed from the voltage measurements with \(\hat{t} = a + b v\).
# Your answer here
The sensor and associated voltmeter are designed to output a voltage going from 0V to 12V. Based on your calibration values, what is the sensor’s valid temperature range?
# Your answer here
Compute the reconstructed temperature tr
(volts converted to temperature).
# Your answer here
Plot the chamber temperature, the reconstructed temperature (volts converted to temperature) and the valid range in one plot. The plot should look somewhat similar to this example.
# Your answer here
Compute the accuracy of the sensor assuming that the chamber temperature is truly exact. To evaluate the accuracy, compute the root mean square deviation as:
Where \(\hat{t}\) is the reconstructed temperature, and the overline represents the average (mean) of the squared deviation \((\hat{t} - t)^2\).
# Your answer here