# PRAKTIKUM 8
`Curve Fitting / Data Fitting / Regresi`

<hr style="border:2px solid black"> </hr>

# 1 Regresi Linear
 Koefisien garis regresi linear
\begin{equation} 
y=Ax+B
\end{equation}
merupakan solusi dari sistem persamaan linear berikut, yang disebut _normal equations_.
\begin{align} 
\begin{split}
\left( \sum_{k=1}^{N}{x_k^2} \right) A + \left( \sum_{k=1}^{N}{x_k} \right) B &= \sum_{k=1}^{N}{x_ky_k}\\
\left( \sum_{k=1}^{N}{x_k} \right) A + NB &= \sum_{k=1}^{N}{y_k} 
\end{split}
\end{align}
solusi sistem tersebut adalah
\begin{align}
A &= \frac{\sum_{k=1}^{N}{(x_k-\bar{x})(y_k-\bar{y})}}{\sum_{k=1}^{N}{(x_k-\bar{x})^2}} \\
B &= \bar{y}-A\bar{x}
\end{align}


```julia
using Statistics
```


```julia
function reglin(X,Y)
    # Hitung nilai rataan data x dan y
    xmean = mean(X);
    ymean = mean(Y);
    # Hitung nilai jumlah dari xy dan x^2
    sumxy = (X.-xmean)'*(Y.-ymean)
    sumx2 = (X.-xmean)'*(X.-xmean)
    # Hitung nilau koefisien garis regresi linear Y=Ax+B
    A = sumxy/sumx2;
    B = ymean .- A*xmean;
    return A,B
end
```

### Contoh 1:
Diberikan data seperti berikut.

|x||-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 
|-||  -|  -|  -|  -|  -|  -|  -|  -| 
|y||10 | 9 | 7 | 5 | 4 | 3 | 0 | -1 | 

Cari dan gambarkan garis regresi tersebut


```julia
x = [-1, 0, 1, 2, 3, 4, 5, 6]
y = [10, 9, 7, 5, 4, 3, 0, -1];
```


```julia
A,B = reglin(x,y)
```

Persamaan Regresi $ y = -1.6071 x + 8.6429 $


```julia
using Plots
```


```julia
f(x) = A*x+B;
xk = -1:0.1:6
plt1 = plot(xk,f.(xk),label = "Garis Regresi")
scatter!(x,y,label = "Data")
```


```julia
rmse(yk,yduga) = sqrt(mean((yk.-yduga).^2));
yduga = f.(x);
galat = rmse(y,yduga)
```

#### Cara Lain:


```julia
P = [x ones(length(x),1)]
```


```julia
P'*P   # Matriks Koefisien dari SPL
P'*y  # Ruas Kanan SPL
```


```julia
C = inv(P'*P)*(P'*y) # Solusi SPL
```


```julia
f(x) = C[1]*x+C[2];
xk = -1:0.1:6
plot(xk,f.(xk),label = "Garis Regresi")
scatter!(x,y,label = "Data")
```

# 2 Regresi Pangkat
Koefisien $ A $ dari fungsi pangkat $$ y=Ax^M $$ adalah
\begin{equation}\label{eq:8 pangkat}
A=\frac{ \sum_{k=1}^{N}{x_k^My_k}}{ \sum_{k=1}^N{x_k^{2M}}}
\end{equation}


```julia
function regpower(X,Y,m)
  # Hitung nilai jumlah dari x^m*y dan x^2m
  sumxy = (X.^m)'*Y
  sumx2 = (X.^m)'*(X.^m)
  # Hitung nilau koefisien garis regresi pangkat y = Ax^m
  A = sumxy/sumx2
end
```

### Contoh 2:
Pada suatu praktikum fisika, seorang mahasiswa mendapatkan kumpulan data percobaan seperti berikut.

|	Waktu, t_k | Jarak,  d_k |
|-|-|
|	0.2 | 0.1960|
|	0.4 | 0.7850|
|	0.6 | 1.7665|
|	0.8 | 3.1405|
|	1.0 | 4.9075|  

   Hubungan dari data tersebut adalah $ d=\frac{1}{2}gt^2 $ dengan $ d $ merupakan jarak dalam meter dan $ t $ merupakan waktu dalam detik. Carilah koefisien gravitasi $ g $. 


```julia
tk = [0.2,0.4,0.6,0.8,1.0];
dk = [0.1960,0.7850,1.7665,3.1405,4.9075];
```

Didefinisikan $A = 1/2 g$


```julia
A = regpower(tk,dk,2)
```


```julia
g = 2*A
```

#### Cara Lain


```julia
P = tk.^2
```


```julia
A = inv(P'*P)*(P'*dk) # Solusi SPL
```

# 3 Regresi Non-Linear 
## Regresi Eksponensial
Misalkan bahwa diberikan titik $ (x_1,y_1) $, $ (x_2,y_2) $, $\dots$, $ (x_N,y_N) $ dan ingin dicocokan dengan grafik eksponensial dengan bentuk
\begin{equation}\label{eq:8 eks}
y = Ce^{Ax}
\end{equation}
Langkah pertama adalah me-logaritma-kan kedua sisi, sehingga diperoleh
\begin{align}
\begin{split}
&\ln(y)=\ln(Ce^{Ax})\\
\Leftrightarrow\ &\ln(y)=\ln(e^{Ax})+\ln(C)\\
\Leftrightarrow\ &\ln(y)=Ax+\ln(C)
\end{split}
\end{align}
Selanjutnya, perubahan peubah didefinisikan sebagai berikut.
\begin{align}\label{eq:8 eks 1}
Y=\ln(y),\ \ \ \ X=x,\ \ \ \ \text{dan}\ \ \ \ B=\ln(C)
\end{align}

### Contoh 3:
Gunakan metode linearisasi data untuk mencari kurva regresi eksponensial $$ y=Ce^{Ax} $$ untuk 5 titik data, yaitu $ (0,1.5) $, $ (1,2.5) $, $ (2,3.5) $, $ (3,5.0) $, dan $ (4,7.5) $.


```julia
x = [  0,   1,   2,   3,   4]
y = [1.5, 2.5, 3.5, 5.0, 7.5]
Y = log.(y);
```


```julia
A,B = reglin(x,Y)
C = exp(B)
(A,C)
```


```julia
f(x) = C*exp(A*x);
xk = -1:0.1:5
plot(xk,f.(xk),label = "Garis Regresi",legend = :topleft)
scatter!(x,y,label = "Data") 
```

# 4 Regresi Polinomial 
## Regresi Parabola
Koefisien dari garis regresi parabola
\begin{equation}\label{eq:8 para}
y=Ax^2+Bx+C
\end{equation}
merupakan nilai solusi $ A $, $ B $, dan $ C $ dari sistem linear
\begin{align}\label{eq:8 para1}
\begin{split}
\left( \sum_{k=1}^{N}x_k^4 \right) A +
\left( \sum_{k=1}^{N}x_k^3 \right) B +
\left( \sum_{k=1}^{N}x_k^2 \right) C &=
\sum_{k=1}^{N}y_kx_k^2\\
\left( \sum_{k=1}^{N}x_k^3 \right) A +
\left( \sum_{k=1}^{N}x_k^2 \right) B +
\left( \sum_{k=1}^{N}x_k \right) C &=
\sum_{k=1}^{N}y_kx_k\\
\left( \sum_{k=1}^{N}x_k^2 \right) A +
\left( \sum_{k=1}^{N}x_k \right) B +
N C &=
\sum_{k=1}^{N}y_k
\end{split}
\end{align}

Dalam notasi matriks, ruas kanan dari sistem linear akan setara dengan nilai dari $ F^TY $, yaitu
\begin{align} 
F^TY
=\begin{bmatrix}
&&&&\\[-0.5em]
(x_1)^0 & (x_2)^0 & (x_3)^0 & \dots & (x_N)^0 \\[0.5em]
(x_1)^1 & (x_2)^1 & (x_3)^1 & \dots & (x_N)^1 \\[0.5em]
(x_1)^2 & (x_2)^2 & (x_3)^2 & \dots & (x_N)^2 \\[0.5em]
\end{bmatrix}
\begin{bmatrix}
y_1\\y_2\\y_3\\\vdots \\y_N
\end{bmatrix}
\end{align}
Sementara itu, ruas kiri dari sistem linear akan setara dengan nilai dari $ F^TF $, yaitu
\begin{align} 
F^TF
=\begin{bmatrix}
&&&&\\[-0.5em]
(x_1)^0 & (x_2)^0 & (x_3)^0 & \dots & (x_N)^0 \\[0.5em]
(x_1)^1 & (x_2)^1 & (x_3)^1 & \dots & (x_N)^1 \\[0.5em]
(x_1)^2 & (x_2)^2 & (x_3)^2 & \dots & (x_N)^2 \\[0.5em]
\end{bmatrix}
\begin{bmatrix}
(x_1)^0 & (x_1)^1 & (x_1)^2 \\
(x_2)^0 & (x_2)^1 & (x_2)^2 \\
(x_3)^0 & (x_3)^1 & (x_3)^2 \\
\vdots  &  \vdots  &  \vdots  \\
(x_N)^0 & (x_N)^1 & (x_N)^2 \\
\end{bmatrix} 
\end{align}
Dengan demikian, nilai koefisien regresi $ C $ dapat dicari dengan menyelesaikan sistem linear
\begin{equation}
(F^TF)\ C=F^TY
\end{equation}

## Regresi Polinomial berderajat m


```julia
function regpoly(X,Y,m)
  #% Hitung matriks F
  F = zeros(length(X),m+1)
  for k = 1: m+1
    F[:,k]=X.^(k-1);
  end
  #% Hitung matriks A dan matriks B serta koefisien regresi pangkat
  A = F'*F;
  B = F'*Y;
  C = A\B; # sama saja dengan inv(A)*B
  C = reverse(C,dims=1)
end
```

### Contoh 4:
Carilah persamaan regresi parabola dari empat titik data $ (-3,3) $, $ (0,1) $, $ (2,1) $, dan $ (4,3) $.


```julia
x = [-3, 0, 2, 4]
y = [ 3, 1, 1, 3]
C = regpoly(x,y,2)
```


```julia
f(x) = C[1]*x^2 + C[2]*x + C[3]
xk = -3:0.1:4
plt = plot(xk,f.(xk),label = "Garis Regresi",legend=:top)
scatter!(x,y,label = "Data")
```


```julia
rmse(yk,yduga) = sqrt(mean((yk.-yduga).^2));
yduga = f.(x);
galat = rmse(y,yduga)
```

#### Cara Lain:


```julia
P = [x.^2 x ones(length(x),1)]
```


```julia
C = inv(P'*P)*(P'*y)
```

<hr style="border:2px solid black"> </hr>

# Soal Latihan
Kerjakan soal berikut pada saat kegiatan praktikum berlangsung.

`Nama: ________`

`NIM: ________`

### Soal 1
Ulangi langkah-langkah pada **Contoh 1** untuk membentuk garis regresi linear dari data berikut.


| $x_k$ | 0.0 |  1.0 |  2.0 |   4.0 |   5.0|
|-|-|-|-|-|-|
| $y_k$ | 3.0 |  5.1 |  6.9 |  10.0 |  13.0|

Gambarkan garis regresi beserta titik-titik data, kemudian hitung nilai RMSE dari garis regresi tersebut.


```julia

```

### Soal 2
Diberikan data hasil pengamatan seperti berikut.

| $d_k$ | 1.0 |  2.0 |  3.0 |   4.0 |   5.0|
|-|-|-|-|-|-|
| $t_k$ | 0.45 |  0.63 |  0.79 |  0.90 |  1.01 |

Hitunglah nilai koefisien grafitasi tempat pengamatan berdasarkan data tersebut dengan mengikuti cara pada **Contoh 2**.


```julia

```

### Soal 3

Ulangi langkah-langkah pada **Contoh 3** untuk membentuk garis regresi eksponensial dari data berikut.

| $x_k$ | 0.0 | 1.0 |  2.0 |  4.0 |  5.0|
|-|-|-|-|-|-|
| $y_k$ | 2.00 |  0.75 |  0.38 |  0.15 |  0.10 |

Gambarkan garis regresi beserta titik-titik data, kemudian hitung nilai RMSE dari garis regresi tersebut.


```julia

```

### Soal 4
Ulangi langkah-langkah pada **Contoh 4** untuk membentuk garis regresi kuadratik dari data berikut.

| $x_k$ | 0.0 | 1.0 |  2.0 |  4.0 |  5.0|
|-|-|-|-|-|-|
| $y_k$ | 7.10 |  3.00 |  3.60 |  11.00 |  24.00 |

Gambarkan garis regresi beserta titik-titik data, kemudian hitung nilai RMSE dari garis regresi tersebut.


```julia

```

4af95164e2abf4a25b39945494ec859b361ea18f
ipynb
Jupyter Notebook
notebookpraktikum/Praktikum 08.ipynb
mkhoirun-najiboi/metnum.jl
a6e35d04dc277318e32256f9b432264157e9b8f4
MIT
notebookpraktikum/Praktikum 08.ipynb
mkhoirun-najiboi/metnum.jl
a6e35d04dc277318e32256f9b432264157e9b8f4
MIT
notebookpraktikum/Praktikum 08.ipynb
mkhoirun-najiboi/metnum.jl
a6e35d04dc277318e32256f9b432264157e9b8f4
MIT
Qwen/Qwen-72B
1. YES
2. YES