SciPy - ODR

ODR adalah singkatan dari Orthogonal Distance Regression, yang digunakan dalam studi regresi. Regresi linier dasar sering digunakan untuk mengestimasi hubungan antara kedua variabely dan x dengan menggambar garis yang paling sesuai pada grafik.

Metode matematika yang digunakan untuk ini dikenal sebagai Least Squares, dan bertujuan untuk meminimalkan jumlah kesalahan kuadrat untuk setiap poin. Pertanyaan kuncinya di sini adalah bagaimana Anda menghitung kesalahan (juga dikenal sebagai residual) untuk setiap poin?

Dalam regresi linier standar, tujuannya adalah untuk memprediksi nilai Y dari nilai X - jadi hal yang perlu dilakukan adalah menghitung kesalahan pada nilai Y (ditunjukkan sebagai garis abu-abu pada gambar berikut). Namun, terkadang lebih bijaksana untuk memperhitungkan kesalahan pada X dan Y (seperti yang ditunjukkan oleh garis merah putus-putus pada gambar berikut).

Misalnya - Ketika Anda tahu pengukuran X Anda tidak pasti, atau ketika Anda tidak ingin fokus pada kesalahan satu variabel di atas yang lain.

Orthogonal Distance Regression (ODR) adalah metode yang dapat melakukan ini (ortogonal dalam konteks ini berarti tegak lurus - sehingga menghitung kesalahan tegak lurus terhadap garis, bukan hanya 'vertikal').

scipy.odr Implementasi untuk Regresi Univariat

Contoh berikut menunjukkan implementasi scipy.odr untuk regresi univariat.

import numpy as np
import matplotlib.pyplot as plt
from scipy.odr import *
import random

# Initiate some data, giving some randomness using random.random().
x = np.array([0, 1, 2, 3, 4, 5])
y = np.array([i**2 + random.random() for i in x])

# Define a function (quadratic in our case) to fit the data with.
def linear_func(p, x):
   m, c = p
   return m*x + c

# Create a model for fitting.
linear_model = Model(linear_func)

# Create a RealData object using our initiated data from above.
data = RealData(x, y)

# Set up ODR with the model and data.
odr = ODR(data, linear_model, beta0=[0., 1.])

# Run the regression.
out = odr.run()

# Use the in-built pprint method to give us results.
out.pprint()

Program di atas akan menghasilkan keluaran sebagai berikut.

Beta: [ 5.51846098 -4.25744878]
Beta Std Error: [ 0.7786442 2.33126407]

Beta Covariance: [
   [ 1.93150969 -4.82877433]
   [ -4.82877433 17.31417201
]]

Residual Variance: 0.313892697582
Inverse Condition #: 0.146618499389
Reason(s) for Halting:
   Sum of squares convergence