Box-Cox 变换可以应用于这种形式的数据吗?

计算科学 统计数据 回归 数据分析
2021-12-14 19:21:03

我有以下形式的数据:

X       Y
3.53    0
4.93    50
5.53    60
6.21    70
7.37    80
9.98    90
16.56   100

我想知道n以便这可以适合以下形式的功能:

y=axn+b

我试图确定n通过 Box-Cox 变换。可以用 Box-Cox 变换确定 n 吗?

1个回答

正如他们提到的(并责骂你),你为什么要尝试使用这种方法?

如果非线性回归就足够了,您可以看到下面的代码,该选项curve_fit不起作用。所以我minimize在这种情况下使用,初始猜测是从线性回归中获得的y(1/x).

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize

def func(coef, x, y):
    a = coef[0]
    b = coef[1]
    n = coef[2]
    return np.linalg.norm(y - a/x**n - b)

x = np.array([3.53, 4.93, 5.53, 6.21, 7.37, 9.98, 16.56])
y = np.array([0, 50, 60, 70, 80, 90, 100])


# The initial values are obtained from a linear regression between
# y and (1/x)
res = minimize(func, [-446, 136, 1], args=(x, y))
a, b, n = res.x
print a, b, n
x_vec = np.linspace(3.5, 17)
y_vec = a/x_vec**n + b

plt.plot(x, y, 'ko')
plt.plot(x_vec, y_vec)
plt.xlabel("x")
plt.xlabel("y")
plt.savefig("regression.png", dpi=300)

输出是

-1181.72495119 105.101516419 1.91866624841

和图像

在此处输入图像描述