|
| 1 | +package artificialIntelligence |
| 2 | + |
| 3 | +import ( |
| 4 | + "fmt" |
| 5 | + "math" |
| 6 | +) |
| 7 | + |
| 8 | +// DataStatistik adalah stuct yang digunakan untuk menyimpan |
| 9 | +// hasil perhitungan statistik dari dua dataset (independent dan dependent) |
| 10 | +// anggota meliputi antara lain |
| 11 | +// SumX -> jumlah dari seluruh nilai variabel independent |
| 12 | +// SumY -> jumlah dari seluruh nilai variabel dependent |
| 13 | +// XSquared -> jumlah dari kuadrat variabel independen |
| 14 | +// YSquared -> umlah dari kuadrat variabel dependent |
| 15 | +// Multiply -> jumlah dari hgasil perkalian antara pasangan nilai dari variabel |
| 16 | +type DataStatistik struct { |
| 17 | + SumX float64 |
| 18 | + SumY float64 |
| 19 | + XSquared float64 |
| 20 | + YSquared float64 |
| 21 | + Multiply float64 |
| 22 | +} |
| 23 | + |
| 24 | +// menghitung jumlah total dari semua element di dalam slice independenta |
| 25 | +// dan dependent |
| 26 | +// |
| 27 | +// Parameter: |
| 28 | +// |
| 29 | +// independent: slice yang berisi data variabel independent |
| 30 | +// dependent: slice yang berisi data variabel dependent |
| 31 | +// stats: pointer ke struct DataStatistik tempat hasil akan disimpan |
| 32 | +func Sum(independent, dependent []float64, stats *DataStatistik) { |
| 33 | + var sumX, sumY float64 // inisialisasi penampung jumlah X dan Y |
| 34 | + |
| 35 | + // looping melalui setiap indeks dari slice independent |
| 36 | + // diasumsikan panjang slice independent dan dependent sama |
| 37 | + for i := range independent { |
| 38 | + sumX += independent[i] // tambahkan nilai X ke sumX |
| 39 | + sumY += dependent[i] // tambahkan nilai Y ke sumY |
| 40 | + } |
| 41 | + |
| 42 | + // simpan hasil perhitungan ke struct DataStatistik |
| 43 | + stats.SumX = sumX |
| 44 | + stats.SumY = sumY |
| 45 | + |
| 46 | + // cetak hasil untuk debug |
| 47 | + fmt.Printf("SumX: %.4f\n", stats.SumX) |
| 48 | + fmt.Printf("SumY: %.4f\n", stats.SumY) |
| 49 | +} |
| 50 | + |
| 51 | +// menghitung jumlah dari kuadrat elemen-elemen dalam slice independent dan dependent |
| 52 | +// |
| 53 | +// Parameter: |
| 54 | +// |
| 55 | +// independent -> slice yang berisi variabel independent |
| 56 | +// dependent -> slice yang berisi data variabel dependent |
| 57 | +// stats -> pointer ke struct DataStatistik dimana tempat hasil disimpan |
| 58 | +func Squared(independent, dependent []float64, stats *DataStatistik) { |
| 59 | + var xSquared, ySquared float64 // tampung jumlah kuadrat X dan Y |
| 60 | + |
| 61 | + // looping melalui setiap indeks dari slice independent |
| 62 | + for i := range independent { |
| 63 | + // hitung kuadrat dari nilai X menggunakan math.Pow |
| 64 | + xSquared += math.Pow(independent[i], 2) |
| 65 | + // hitung kuadrat dari nilai Y dengan cara langsung |
| 66 | + ySquared += dependent[i] * dependent[i] |
| 67 | + } |
| 68 | + |
| 69 | + // simpan hasil perhitungan struct |
| 70 | + stats.XSquared = xSquared |
| 71 | + stats.YSquared = ySquared |
| 72 | + |
| 73 | + fmt.Printf("hasil X squared: %.4f\n", stats.XSquared) |
| 74 | + fmt.Printf("hasil Y squared: %.4f\n", stats.YSquared) |
| 75 | +} |
| 76 | + |
| 77 | +// menghitung jumlah hasil dari perkalian antara setiap parameter pasangan |
| 78 | +// lemen dari slice independent dan dependent |
| 79 | +// |
| 80 | +// Parameter: |
| 81 | +// |
| 82 | +// independent -> slice yang berisi data variable independent |
| 83 | +// dependent -> slice yang berisi data variabel dependent |
| 84 | +// stats -> pointe ke struct DataStatistik hasil yang akan disimpan |
| 85 | +func Multiply(independent, dependent []float64, stats *DataStatistik) { |
| 86 | + var total float64 // tampung hasil jumlah dari hasil perkalian |
| 87 | + |
| 88 | + // looping melalui setiap indeks dari slice independent |
| 89 | + for i := range independent { |
| 90 | + // kalikan nilai X[i] dan Y[i], lalu tambahkan nilai total |
| 91 | + total += independent[i] * dependent[i] |
| 92 | + } |
| 93 | + |
| 94 | + // simpan hasil ke struct |
| 95 | + stats.Multiply = total |
| 96 | + |
| 97 | + fmt.Printf("hasil kali: %.4f\n", stats.Multiply) |
| 98 | +} |
| 99 | + |
| 100 | +// fungsi menghitung model regressi linear sederhana berdasarkan data yang |
| 101 | +// telah dihitung sebelumnya, model regressi berbentuk: y = a + bx |
| 102 | +// di mana: |
| 103 | +// b adalah slope (kemiringan garis) |
| 104 | +// a adalah intercept (titik potong garis dengan sumbu Y) |
| 105 | +// |
| 106 | +// Parameter: |
| 107 | +// - independent -> slice yang berisi data variabel independent |
| 108 | +// - dependent -> slice yang bersisi data variabel dependent |
| 109 | +// - stats -> instance DataStatistik |
| 110 | +func RegressiLinear(independent, dependent []float64, stats DataStatistik) { |
| 111 | + // jumlah pasangan data, n |
| 112 | + n := float64(len(independent)) |
| 113 | + |
| 114 | + // hitung jumlah kuadrat dari deviasi XY (sumSquareXY) |
| 115 | + // rumus = sum(xy) - (sum(x) * sum(y)) / n |
| 116 | + sumSquareXY := stats.Multiply - (stats.SumX*stats.SumY)/n |
| 117 | + |
| 118 | + // hitung jumlah kuadrat dari deviasi XX (sumSquareXX) |
| 119 | + // rumus = sum(x^2) - (sum(x)) ^ 2 / n |
| 120 | + sumSquareXX := stats.XSquared - (math.Pow(stats.SumX, 2))/n |
| 121 | + |
| 122 | + fmt.Printf("hasil sumSquareXY: %.4f\n", sumSquareXY) |
| 123 | + fmt.Printf("hasil sumSquareXX: %.4f\n", sumSquareXX) |
| 124 | + |
| 125 | + // hitung slope (b) menggunakan rumus = sumSquareXY / sumSquareXX |
| 126 | + slope := sumSquareXY / sumSquareXX |
| 127 | + // hitung intercept (a) menggunakan rumus: (sum(y) - b * sum(x)) / n |
| 128 | + intercept := (stats.SumY - (slope * stats.SumX)) / n |
| 129 | + |
| 130 | + fmt.Printf("model regresi linear: y = %.4f + %.4fx\n", intercept, slope) |
| 131 | +} |
0 commit comments