Statistik regresi linear berfungsi mencari nilai trend suatu variabel terhadap pengaruh variabel lainnya. Fungsi regresi linear berupa persamaan grafis yang menyatakan perbedaan nilai dalam rentang/interval tertentu sehingga bisa dianalisis sebagai akibat dari perbedaan variabel input (variabel masukan/ variabel bebas/independen).
Jika diketahui variabel X1..Xn yang mempengaruhi variabel Y1..Yn maka persamaan regresi linear umum/sederhana adalah:

dimana m adalah gradien (kemiringan) dan b adalah konstanta.
source code regresi linear arduino:
struct sample
{
byte waktu;
float data;
};
void setup() {
Serial.begin(9600);
Serial.println("Statistik regresi linear dengan Arduino");
Serial.println("https://www.project.semesin.com/");
Serial.println();
}
void loop() {
sample Pengukuran[] = {
{1, 21.2},
{2, 28.5},
{3, 42.3},
{4, 53.9},
{5, 57.1},
{6, 70.2},
{7, 79.9},
{8, 89.2},
{9, 101.6},
{10, 112.4},
};
float m;
float b;
regresiLinear(Pengukuran, 10, &m, &b);
Serial.print("m = ");
Serial.println(m);
Serial.print("b = ");
Serial.println(b);
Serial.print("Prediksi waktu ke-11 = ");
Serial.println(m * 11 + b);
while (1);
}
void regresiLinear(sample *sampling, byte jumlahSampling, float *m, float *b)
{
byte jumlahWaktu = 0;
float jumlahData = 0.0;
uint32_t jumlahDataWaktu = 0;
uint32_t jumlahWaktu2 = 0;
float jumlahData2 = 0.0;
for (byte i = 0; i < jumlahSampling; i++)
{
jumlahWaktu += sampling[i].waktu;
jumlahData += sampling[i].data;
jumlahDataWaktu += (sampling[i].waktu * sampling[i].data);
jumlahWaktu2 += (sampling[i].waktu * sampling[i].waktu);
jumlahData2 += (sampling[i].data * sampling[i].data);
}
*m = (jumlahSampling * jumlahDataWaktu) - (jumlahWaktu * jumlahData);
*m /= (jumlahSampling * jumlahWaktu2) - (jumlahWaktu * jumlahWaktu);
*b = (jumlahWaktu2 * jumlahData) - (jumlahWaktu * jumlahDataWaktu);
*b /= (jumlahSampling * jumlahWaktu2) - (jumlahWaktu * jumlahWaktu);
}
contoh keluaran serial monitor:
