Perhitungan regresi linear menggunakan arduino

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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:

Leave a Reply

Your email address will not be published. Required fields are marked *