写一个对19个自变量进行最小二乘线性回归的python代码,并给出检验。
时间: 2024-03-14 11:47:52 浏览: 64
基于Python的线性回归最小二乘算法的设计与实现.docx
假设有19个自变量 $x_1, x_2, \cdots, x_{19}$,以及因变量 $y$,我们可以使用 `numpy` 库的 `polyfit` 函数进行最小二乘线性回归,代码如下:
```python
import numpy as np
# 假设有19个自变量和一个因变量
x1 = np.array([1, 2, 3, 4, 5])
x2 = np.array([2, 3, 4, 5, 6])
x3 = np.array([3, 4, 5, 6, 7])
x4 = np.array([4, 5, 6, 7, 8])
x5 = np.array([5, 6, 7, 8, 9])
x6 = np.array([6, 7, 8, 9, 10])
x7 = np.array([7, 8, 9, 10, 11])
x8 = np.array([8, 9, 10, 11, 12])
x9 = np.array([9, 10, 11, 12, 13])
x10 = np.array([10, 11, 12, 13, 14])
x11 = np.array([11, 12, 13, 14, 15])
x12 = np.array([12, 13, 14, 15, 16])
x13 = np.array([13, 14, 15, 16, 17])
x14 = np.array([14, 15, 16, 17, 18])
x15 = np.array([15, 16, 17, 18, 19])
x16 = np.array([16, 17, 18, 19, 20])
x17 = np.array([17, 18, 19, 20, 21])
x18 = np.array([18, 19, 20, 21, 22])
x19 = np.array([19, 20, 21, 22, 23])
y = np.array([10, 20, 30, 40, 50])
# 将所有自变量和常数项组合成一个矩阵
X = np.vstack([x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, np.ones(len(x1))]).T
# 对自变量矩阵和因变量进行最小二乘线性回归
coefficients, residuals, rank, singular_values, rcond = np.polyfit(X, y, deg=1, full=True)
# 输出拟合系数
print(coefficients)
# 输出拟合残差
print(residuals)
# 输出拟合系数的标准差
print(np.sqrt(np.diag(np.linalg.inv(X.T.dot(X)) * residuals[0] / (len(y) - X.shape[1]))))
# 进行检验
from scipy.stats import t
alpha = 0.05 # 显著性水平
df = X.shape[0] - X.shape[1] # 自由度
# 计算 t 统计量
t_stat = coefficients[0] / np.sqrt(np.diag(np.linalg.inv(X.T.dot(X)) * residuals[0] / (len(y) - X.shape[1])))[0]
# 计算临界值
t_critical = t.ppf(1 - alpha / 2, df)
# 判断是否拒绝原假设
if abs(t_stat) > t_critical:
print("拒绝原假设,认为自变量与因变量存在显著线性关系。")
else:
print("接受原假设,认为自变量与因变量不存在显著线性关系。")
```
在这个例子中,我们将 $x_1$ 至 $x_{19}$ 按列合并成一个矩阵 $X$,并将常数项组成一个与自变量等长的向量,再将其加入到 $X$ 中。然后,我们使用 `polyfit` 函数对 $X$ 和 $y$ 进行最小二乘线性回归。最后,我们使用 `t` 分布计算 $t$ 统计量,并与 $t$ 分布的临界值进行比较,以判断自变量与因变量是否存在显著线性关系。
阅读全文