从二次回归模型y=sin(x)+ε(服从均匀分布u(0,2π),ε服从标准正态分布)产生500个样本(x1,y1),(x2,y2),...,(x500,y500),做出y关于x的n-w回归函数曲线,python代码实现
时间: 2023-11-30 22:04:16 浏览: 76
好的,以下是代码实现:
```python
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.regression.quantile_regression import QuantReg
# 生成数据
np.random.seed(123)
x = np.random.uniform(low=0, high=2*np.pi, size=500)
y = np.sin(x) + np.random.randn(500)
# 定义n和w
n = 10
w = 0.5
# 计算分位数回归函数
def get_qr(x, y, tau):
qr = QuantReg(y, sm.add_constant(x)).fit(q=tau)
return qr.params
# 计算n-w回归函数
def nw_reg(x, y, n, w):
m = len(x)
beta_hat = np.zeros(m)
for i in range(m):
qr_tau = np.zeros(n)
for j in range(n):
qr_tau[j] = get_qr(x, y - x*beta_hat, j/n)[1]
beta_hat[i] = (1-w)*np.mean(qr_tau) + w*np.median(qr_tau)
return beta_hat
# 计算n-w回归函数曲线上的点
x_range = np.linspace(0, 2*np.pi, 100)
y_nw = nw_reg(x, y, n, w)
y_hat = np.zeros(100)
for i in range(100):
qr_tau = np.zeros(n)
for j in range(n):
qr_tau[j] = get_qr(x, y - x*y_nw, j/n)[1]
y_hat[i] = np.mean(qr_tau)
# 绘制图像
plt.scatter(x, y, alpha=0.3)
plt.plot(x_range, np.sin(x_range), color='red', linestyle='dashed', label='True Regression Function')
plt.plot(x_range, y_hat, color='green', label='NW Regression Function')
plt.legend()
plt.show()
```
其中,我们使用了StatsModels库中的QuantReg函数来进行分位数回归,然后根据n-w回归函数的公式进行计算,最后绘制出n-w回归函数曲线。
阅读全文