Scipy-odr

提供:Dev Guides
移動先:案内検索

SciPy-ODR

ODRは、回帰研究で使用される Orthogonal Distance Regression の略です。 基本的な線形回帰は、グラフに最適な線を描くことにより、2つの変数 yx の関係を推定するためによく使用されます。

これに使用される数学的な方法は*最小二乗*と呼ばれ、各ポイントの二乗誤差の合計を最小化することを目的としています。 ここで重要な質問は、各ポイントの誤差(残差とも呼ばれます)をどのように計算するのですか?

標準の線形回帰では、目的はX値からY値を予測することです。したがって、賢明なことは、Y値の誤差を計算することです(次の画像の灰色の線として表示)。 ただし、XとYの両方のエラーを考慮する方が賢明な場合があります(次の画像の赤い点線で示すように)。

例-Xの測定値が不確実であることがわかっている場合、または1つの変数のエラーに焦点を合わせたくない場合。

直交距離線形回帰

直交距離回帰(ODR)は、これを行うことができる方法です(このコンテキストでは直交とは、垂直を意味します。したがって、「垂直」ではなく、ラインに垂直な誤差を計算します)。

一変量回帰のscipy.odr実装

次の例は、単変量回帰のscipy.odr実装を示しています。

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()

上記のプログラムは、次の出力を生成します。

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