企业网站建完后没人,重庆网站关键词优化推广,2017年网站推广怎么做,分类网站 php文章目录 前言一、一元线性回归回归分析的一般步骤一元线性回归的基本形式回归方程参数的最小二乘法估计对回归方程的各种检验估计标准误差的计算回归直线的拟合优度判定系数显著性检验 二、示例三、代码实现----Matlab四、代码实现----python回归系数的置信区间公式残差的置信… 文章目录 前言一、一元线性回归回归分析的一般步骤一元线性回归的基本形式回归方程参数的最小二乘法估计对回归方程的各种检验估计标准误差的计算回归直线的拟合优度判定系数显著性检验 二、示例三、代码实现----Matlab四、代码实现----python回归系数的置信区间公式残差的置信区间公式python代码 总结 前言
通过模型算法熟练对Matlab和python的应用。 学习视频链接 https://www.bilibili.com/video/BV1EK41187QF?p42vd_source67471d3a1b4f517b7a7964093e62f7e6
一、一元线性回归
一元线性回归是一种统计方法用于理解和建模两个变量之间的关系。具体来说它是用来估计一个因变量 y y y 和一个自变量 x x x 之间线性关系的工具。其目标是找到一条直线能够最好地预测 y y y 的值基于给定的 x x x 值。这条直线通常被称为 “回归线” 。
回归分析的一般步骤 一元线性回归的基本形式 y β 0 β 1 x ϵ y\beta_0\beta_1x\epsilon yβ0β1xϵ y y y 是因变量被解释变量。 x x x 是自变量解释变量。 β 0 \beta_0 β0 是截距当 x 0 x 0 x0 时 y y y 的预测值。 β 1 \beta_1 β1 是斜率表示 x x x 每增加一个单位 y y y 变化的量。 ϵ \epsilon ϵ 是误差项表示因变量的实际值和预测值之间的差异。
回归方程
描述因变量y的期望值如何依赖于自变量x的方程称为回归方程。根据对一元线性回归模型的假设可以得到它的回归方程为: E ( y ) β 0 β 1 x E(y)\beta_0\beta_1x E(y)β0β1x如果回归方程中的参数已知对于一个给定的x值利用回归方程就能计算出y的期望值用样本统计量代替回归方程中的未知参数就得到估计的回归方程简称回归直线
参数的最小二乘法估计
对于回归直线关键在于求解参数常用高斯提出的最小二乘法它是使因变量的观察值 y y y 与估计值之间的离差平方和达到最小来求解的。 Q ∑ ( y − y ^ ) 2 ∑ ( y − β ^ 0 − β ^ 1 x ) 2 Q\sum(y-\hat{y} )^2\sum(y-\hat{\beta}_0-\hat{\beta}_1x)^2 Q∑(y−y^)2∑(y−β^0−β^1x)2 展开可得 Q ∑ ( y − y ^ ) 2 ∑ y 2 n β ^ 0 2 β ^ 1 2 ∑ x 2 2 β ^ 0 β ^ 1 ∑ x − 2 β ^ 0 ∑ y − 2 β ^ 1 ∑ x y Q\sum(y-\hat{y})^{2}\sum y^{2}n\hat{\beta}_{0}^{2}\hat{\beta}_{1}^{2}\sum x^{2}2\hat{\beta}_{0}\:\hat{\beta}_{1}\sum x-2\hat{\beta}_{0}\:\sum y-2\hat{\beta}_{1}\sum xy Q∑(y−y^)2∑y2nβ^02β^12∑x22β^0β^1∑x−2β^0∑y−2β^1∑xy 求偏导可得 { ∑ y n β ^ 0 β ^ 1 Σ x ∑ x y 2 β ^ 0 Σ x β ^ 1 Σ x 2 \begin{cases}\sum yn\hat{\beta}_0\hat{\beta}_1\Sigma x\\\sum xy2\hat{\beta}_0\Sigma x\hat{\beta}_1\Sigma x^2\end{cases} {∑ynβ^0β^1Σx∑xy2β^0Σxβ^1Σx2 { β ^ 1 n ∑ x y − ∑ x ∑ y n ∑ x 2 − ( ∑ x ) 2 β ^ 0 y ˉ − β ^ 1 x ˉ \begin{cases}\hat{\beta}_1\dfrac{n\sum xy-\sum x\sum y}{n\sum x^2-(\sum x)^2}\\\hat{\beta}_0\bar{y}-\hat{\beta}_1\bar{x}\end{cases} ⎩ ⎨ ⎧β^1n∑x2−(∑x)2n∑xy−∑x∑yβ^0yˉ−β^1xˉ
即可得到 β ^ 0 \hat{\beta}_0 β^0及 β ^ 1 \hat{\beta}_1 β^1
对回归方程的各种检验
估计标准误差的计算
为了度量回归方程的可靠性通常计算估计标准误差它度量观察值回绕着回归直线的变化程度或分散程度估计平均误差 S e Σ ( y − y ^ ) 2 n − 2 S_e\sqrt{\frac{\Sigma(y-\hat{y})^2}{n-2}} Sen−2Σ(y−y^)2 估计标准误差越大则数据点围绕回归直线的分散程度就越大回归方程代表性就越小估计标准误差越小则数据点围绕回归直线的分散程度越小回归方程的代表性越大可靠性越高
回归直线的拟合优度
回归直线与各观测点的接近程度称为回归直线对数据的拟合优度 总平方和 (TSS)反映因变量的 n n n个观察值与其均值的总离差 T S S ∑ y i 2 ∑ ( y i − y ˉ i ) 2 TSS\sum y_i^2\sum(y_i-\bar{y}_i)^2 TSS∑yi2∑(yi−yˉi)2回归平方和 (ESS)反映了 y y y 的总变差中由于 x x x 与 y y y 之间的线性关系引起的 y y y 的变化部分 E S S ∑ y ^ i 2 ∑ ( y ^ i − y ˉ i ) 2 ESS\sum\hat{y}_i^2\sum(\hat{y}_i-\bar{y}_i)^2 ESS∑y^i2∑(y^i−yˉi)2残差平方和(RSS)反映了除了 x x x对 y y y的线性影响之外的其他因素对 y y y变差的作用是不能由回归直线来解释的y的变差部分 R S S ∑ e i 2 ∑ ( y i − y ^ i ) 2 RSS\sum e_i^2\sum(y_i-\hat{y}_i)^2 RSS∑ei2∑(yi−y^i)2总平方和可以分解为回归平方和、残差平方和两部分 T S S E S S R S S TSSESSRSS TSSESSRSS
判定系数
回归平方和占总平方和的比例用 R 2 R^2 R2 表示其值在0到1之间 R 2 0 R^{2}0 R20说明 y y y 的变化与 x x x 无关 x x x 完全无助于解释 y y y 的变差 R 2 1 R^{2}1 R21说明残差平方和为0拟合是完全的 y y y 的变化只与 x x x 有关
显著性检验
显著性检验的主要目的是根据所建立的估计方程用自变量 x x x 来估计或预测因变量 y y y 的取值当建立了估计方程后还不能马上进行估计或预测因为该估计方程是根据样本数据得到的它是否真实的反映了变量 x x x 和 y y y 之间的关系则需要通过检验后才能证实。根据样本数据拟合回归方程时实际上就已经假定变量 x x x 和 ν \nu ν 之间存在着线性关系并假定误差项是一个服从正态分布的随机变量且具有相同的方差但这些假设是否成立需要检验显著性检验包括两方面 线性关系检验回归系数检验
线性关系检验
提出假设 H 0 : β 1 0 {H}_0:\mathcal{\beta}_10 H0:β10 两个变量之间的线性关系不显著计算检验统计量F F E S S / 1 R S S / ( n − 2 ) M S R M S E ∼ F ( 1 , n − 2 ) \mathrm{F}\:\:\frac{\mathrm{ESS}/1}{\mathrm{RSS}/(\mathrm{n}-2)}\:\:\frac{\mathrm{MSR}}{\mathrm{MSE}}\:\sim\:\mathrm{F}\:(1,\mathrm{n}-2) FRSS/(n−2)ESS/1MSEMSR∼F(1,n−2)确定显著性水平 α \alpha α作出决策 用 F F F 分布查找临界值 F α ( 1 , n − 2 ) {F} _\alpha ( 1,n-2) Fα(1,n−2) 在F 分布表中的值 F F α {F}{F}_\alpha FFα拒绝 H 0 {H}_0 H0 表明两个变量之间的线性关系是显著。 F F a {F}\mathcal{F}_a FFa不拒绝 H 0 {H}_0 H0 没有证据表明两个变量之间的线性关系显著。 用 P P P 值查表 若 P α {P}\alpha Pα拒绝 H 0 {H}_0 H0 表明两个变量之间的线性关系显著若 P α {P}\alpha Pα 不拒绝 H 0 {H}_0 H0没有证据表明两个变量之间的线性关系显著。
回归系数检验 S β ^ 1 S e ∑ x i 2 − 1 n ( ∑ x i ) 2 S e ∑ ( y i − y ^ i ) 2 n − k − 1 M S E S_{\widehat{\beta}_{1}}\frac{S_{e}}{\sqrt{\sum x_{i}^{2}-\frac{1}{n}(\sum x_{i})^{2}}}\quad S_{e}\sqrt{\frac{\sum(y_{i}-\hat{y}_{i})^{2}}{n-k-1}}\sqrt{MSE} Sβ 1∑xi2−n1(∑xi)2 SeSen−k−1∑(yi−y^i)2 MSE 提出假设 两个变量之间的线性关系不显著 H 0 β 1 0 {H}_0\beta_10 H0β10两个变量之间的线性关系显著 H 1 β 1 ≠ 0 {H}_1\beta_1\neq0 H1β10 计算检验统计量 t t t t β ^ 1 s β ^ 1 ∼ t ( n − 2 ) t\frac{\widehat{\beta}_{1}}{s_{\widehat{\beta}_{1}}}\sim t(n-2) tsβ 1β 1∼t(n−2) 确定显著性水平 a a a 作出决策 用 F F F 分布查找临界值 t α / 2 ( n − 2 ) t_{\alpha / 2}( n- 2) tα/2(n−2) 在 F {F} F 分布表中的 t t α / 2 \mathrm{~tt}_{\alpha/2} ttα/2拒绝 H 0 {H}_0 H0 回归系数等于 0 的可能性小于 α表明两个变量之间的线性关系是显著的。 t t α / 2 t \mathrm{t}_{\alpha/2} ttα/2不拒绝 H 0 {H}_0 H0 没有证据表明两个变量之间的线性关系显著。 用 P P P 值 若 P α {P}\alpha Pα 拒绝 H 0 {H}_0 H0表明两个变量之间的线性关系是显著的若 P α {P}\alpha Pα不拒绝 H 0 {H}_0 H0二者不存在显著的线性关系。
二、示例
某团队测了16名成年女子的身高与腿长所得数据如下 分析身高和腿长的关系
三、代码实现----Matlab
% 1、输入数据
% 输入X的样本值
x[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164];
% 插入\beta0对应列
X[ones(16,1) x];
% 输入Y的样本值
Y[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102];% 2、回归分析及检验
[b,bint,r,rint,stats]regress(Y,X);
% 输出我们需要的数据
b,bint,stats,rint,r
% 结果
% b
% -16.0730
% 0.7194
% bint
% -33.7071 1.5612
% 0.6047 0.8340
% stats
% 0.9282 180.9531 0.0000 1.7437
% 即β_0-16.073 ,β_10.7194;
% β_0 的置信区间为[-33.7017 ,1.5612]β_1 的置信区间为[0.6047 ,0.834];
% r_20.9282,F180.9531,p0.0000
% 由p0.05,可知回归模型 y-16.0730.7194x 成立% 3、残差分析做残差图
rcoplot(r,rint)
% 从残差图可以看出除第二个数据外其余数据的残差离零点均较近且残差的置信区间均包含零点这说明回归模型
% y-16.0730.7194x能较好的符合原始数据而第二个数据可视为异常点% 4、预测及作图
zb(1)b(2)*x
plot(x,Y,k,x,z,r)运行结果
残差图
数据拟合图 从运行结果可以发现第二个数据异常。数据拟合程度较好。
四、代码实现----python
回归系数的置信区间公式
假设我们有一个简单的线性回归模型 Y β X ϵ Y\beta X \epsilon YβXϵ 其中 Y Y Y 是响应变量因变量向量。 X X X 是设计矩阵自变量矩阵。 β \beta β 是回归系数向量。 ϵ \epsilon ϵ 是误差项假设其独立同分布且符合正态分布 ϵ ∼ N ( 0 , σ 2 ) \epsilon\sim N(0,\sigma^{2}) ϵ∼N(0,σ2)。
回归系数的置信区间可以通过以下步骤计算
估计回归系数 β ^ : \hat{\beta}: β^: β ^ ( X T X ) − 1 X T Y \hat{\beta}(X^TX)^{-1}X^TY β^(XTX)−1XTY计算残差向量 r Y − X β ^ rY-X\hat{\beta} rY−Xβ^计算均方误差(Mean Squared Error, MSE): M S E r T r n − p \mathrm{MSE}\frac{r^Tr}{n-p} MSEn−prTr 其中 n n n是观测值的数量 p p p是回归系数的数量(包括截距项).计算回归系数估计的标准误差 S E ( β ^ ) M S E ⋅ d i a g ( ( X T X ) − 1 ) \mathrm{SE}(\hat{\beta})\sqrt{\mathrm{MSE}\cdot\mathrm{diag}((X^TX)^{-1})} SE(β^)MSE⋅diag((XTX)−1) 这里 diag ( ( X T X ) − 1 ) \operatorname{diag}((X^TX)^{-1}) diag((XTX)−1) 表示矩阵 ( X T X ) − 1 (X^TX)^{-1} (XTX)−1 的对角元素。确定 t t t 分布的临界值 t α / 2 , n − p t_{\alpha/2,n-p} tα/2,n−p : 根据所需的置信水平(例如 95%)从t分布表或使用统计函数(如 stats.t.ppf) 找到对应的临界值。
残差的置信区间公式
回归模型的残差向量 r r r 表示为 r Y − Y ^ Y − X β ^ rY-\hat{Y}Y-X\hat{\beta} rY−Y^Y−Xβ^ 残差的标准误差
残差的标准误差(Residual Standard Error, RSE) 可以通过以下公式计算 R S E ∑ r i 2 n − p \mathrm{RSE}\sqrt{\frac{\sum r_i^2}{n-p}} RSEn−p∑ri2
其中 n n n 是观测值的数量。 p p p 是回归系数的数量(包括截距项)。
残差的置信区间
残差的置信区间基于 t t t 分布这意味看我们需要找到一个 t t t 统计量该统计量依赖于给定的置信水平(例如 95% 置信区间) 和自由度(通常为 n − p n-p n−p) 。
残差 r i r_i ri 的置信区间可以表示为 r i ± t α / 2 , n − p ⋅ R S E r_i\pm t_{\alpha/2,n-p}\cdot\mathrm{RSE} ri±tα/2,n−p⋅RSE 其中 t α / 2 , n − p t_{\alpha/2,n-p} tα/2,n−p 是t分布在自由度 n − p n-p n−p 和显著水平 α \alpha α 下的临界值。
python代码
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from scipy import statsfrom matplotlib.pylab import mpl
mpl.rcParams[font.sans-serif] [SimHei] #设置字体
mpl.rcParams[axes.unicode_minus] False # - 号设置# 1、输入数据
# 输入X的样本值
x np.array([143, 145, 146, 147, 149, 150, 153, 154, 155, 156, 157, 158, 159, 160, 162, 164])
# 插入\beta0对应列
X sm.add_constant(x)
# 输入Y的样本值
Y np.array([88, 85, 88, 91, 92, 93, 93, 95, 96, 98, 97, 96, 98, 99, 100, 102])# 2、回归分析及检验
model sm.OLS(Y, X)
results model.fit()# 输出我们需要的数据
print(回归系数 (b):)
print(results.params)
print(\n回归系数的区间估计 (bint):)
print(results.conf_int())
print(\n模型统计信息 (stats):)
print(R-squared:, results.rsquared)
print(F-statistic:, results.fvalue)
print(p-value:, results.f_pvalue)
print(残差方差 (RMSE):, results.mse_resid)# 5. 预测
y_pred results.predict(X)# 6. 计算残差
residuals Y - y_pred# 获取回归系数
b results.params
bint results.conf_int()# 计算残差的置信区间
alpha 0.05 # 95% 置信区间
n len(residuals)
df n - len(b) # 自由度
t_value stats.t.ppf(1 - alpha / 2, df) # 找到 t 分布的分位点# 计算标准误差
s_err np.sqrt(np.sum(residuals**2) / df)# 置信区间
rint np.zeros((n, 2))
for i in range(n):rint[i, 0] residuals[i] - t_value * s_err rint[i, 1] residuals[i] t_value * s_err# 7. 绘制残差图
plt.figure(figsize(10, 6))
plt.scatter(range(n), residuals, colorblue, markero, labelResiduals)
plt.hlines(0, xmin0, xmaxn, colorred, linewidth2)
plt.plot(range(n), rint[:, 0], r_, labelLower bound)
plt.plot(range(n), rint[:, 1], r_, labelUpper bound)
plt.xlabel(Observation)
plt.ylabel(Residuals)
plt.title(Residuals with Confidence Interval)
plt.legend()
plt.show()# 4、预测及作图
z results.predict(X)
plt.scatter(x, Y, colorblack, marker, label实际数据)
plt.plot(x, z, colorred, label拟合线)
plt.xlabel(x)
plt.ylabel(y)
plt.legend()
plt.show()运行结果 总结
本文介绍了一元线性回归详细介绍了 回归分析的一般步骤。分别使用matlab和python进行了算法的实现。