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:

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 *