Веса в ели python ODR - PullRequest
       6

Веса в ели python ODR

0 голосов
/ 26 марта 2020

До сих пор я использовал обычную линейную регрессию Python и был очень доволен этим. Теперь я хочу выполнить регрессию ортогонального расстояния моих данных y и x, где неопределенности (sy и sx) связаны как с y, так и с x. Я хотел знать, как бы я учел эту неопределенность в подгонке ODR.

y = [ 11.38975008, 8.65077791, 7.77607973, 8.64934514,
14.26251329,  16.47196063,  14.3688751 ,  13.26017401,
13.3575447 , 8.50112237, 7.02993815,  15.80428844]
x = [  7.70321836, 7.60018977, 8.25355229, 9.62420742,
16.26590899,  20.83155962,  15.47557423,  13.62347412,
 9.21958949,  14.19664065,  15.28608423,  17.00924302]
sx = [  5.37028582, 4.49559806, 3.23378063, 2.44048106,
 5.08281997, 8.83268311, 8.38467868, 9.17664713,
10.43856284, 4.39514114, 2.39806641, 7.32163997]
sy = [  9.06645644, 8.87559475, 9.62272656,  10.60651685,
 5.21499451, 8.38174793,  11.09705022,  11.90399806,
 6.56569204, 7.4265549 , 3.44556016, 4.74675236]

Далее, есть ли мера качества подгонки (r ^ 2) в подгонке ODR, аналогичная обычной линейной регрессии?

1 Ответ

0 голосов
/ 14 апреля 2020

Я нашел способ после некоторого обсуждения

from scipy.odr import Model, Data, ODR
from scipy.stats import linregress
import numpy as np


def orthoregress(x, y, sx, sy):
    """Perform an Orthogonal Distance Regression on the given data,
    using the same interface as the standard scipy.stats.linregress function.
    Arguments:
    x: x data
    y: y data
    sx: standard deviation array of x
    sy: stanard deviation array of y
    Returns:
    [m, c, chi_square, nan, nan]
    Uses standard ordinary least squares to estimate the starting parameters
    """
    linreg = linregress(x, y)
    mod = Model(f)
    dat = Data(x, y, wd=1./np.power(sx, 2), we=1./np.power(sy, 2))
    od = ODR(dat, mod, beta0=linreg[0:2])
    out = od.run()

    return list(out.beta) + [out.res_var, np.nan, np.nan]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...