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: