为您推荐:
精华内容
最热下载
问答
  • 总体回归模型 yi=β1+β2x2i+β3x3i+⋯+βkxki+εi y_i= \beta_1+\beta_2x_{2i}+\beta_3x_{3i}+\cdots+\beta_kx_{ki}+\varepsilon_i yi​=β1​+β2​x2i​+β3​x3i​+⋯+βk​xki​+εi​ 样本回归模型 yi=β^1+β...

    一、基准方程推导

    总体回归模型
    y i = β 1 + β 2 x 2 i + β 3 x 3 i + ⋯ + β k x k i + ε i y_i= \beta_1+\beta_2x_{2i}+\beta_3x_{3i}+\cdots+\beta_kx_{ki}+\varepsilon_i yi=β1+β2x2i+β3x3i++βkxki+εi
    样本回归模型
    y i = β ^ 1 + β ^ 2 x 2 i + β ^ 3 x 3 i + ⋯ + β ^ k x k i + e i y_i= \hat\beta_1+\hat\beta_2x_{2i}+\hat\beta_3x_{3i}+\cdots+\hat\beta_kx_{ki}+e_i yi=β^1+β^2x2i+β^3x3i++β^kxki+ei

    ( y 1 y 2 ⋮ y i ) n × 1 ( 1 x 21 x 31 ⋯ x k 1 1 x 22 x 32 ⋯ x k 2 ⋮ ⋮ ⋮ ⋮ ⋮ 1 x 2 k x 3 k ⋯ x k k ) n × k ( β 1 β 2 ⋮ β k ) n × 1 + ( e 1 e 2 ⋮ e k ) n × 1 \begin{pmatrix} y_1 \\ y_2 \\ \vdots \\ y_i \end{pmatrix}_{n\times 1} \begin{pmatrix} 1 & x_{21} & x_{31} & \cdots & x_{k1} \\ 1 & x_{22} & x_{32} & \cdots & x_{k2} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ 1 & x_{2k} & x_{3k} & \cdots & x_{kk} \end{pmatrix}_{n\times k} \begin{pmatrix} \beta_1 \\ \beta_2 \\ \vdots \\ \beta_k \end{pmatrix}_{n \times 1} + \begin{pmatrix} e_1 \\ e_2 \\ \vdots \\ e_k \end{pmatrix}_{n \times 1} y1y2yin×1111x21x22x2kx31x32x3kxk1xk2xkkn×kβ1β2βkn×1+e1e2ekn×1

    Y = X β ^ + e Y=X \pmb{\hat\beta} + \pmb{e} Y=Xβ^β^β^+eee

    残差平方和
    ∑ e i 2 = ∑ ( y i − y ^ i ) 2 = ∑ [ y i − ( β ^ 1 + β ^ 2 x 2 i + ⋯ + β ^ k x k i ) ] 2 \sum{e_i^2}= \sum(y_i-\hat y_i)^2= \sum{[y_i-(\hat\beta_1+\hat\beta_2x_{2i}+\cdots +\hat\beta_kx_{ki} )]^2} ei2=(yiy^i)2=[yi(β^1+β^2x2i++β^kxki)]2
    对残差平方和各参数( β 1 , β 2 ⋯   , β k \beta_1,\beta_2\cdots,\beta_k β1,β2,βk)求导,并令其等于0
    { ∑ 2 e i ( − 1 ) = − 2 ∑ [ y i − ( β ^ 1 + β ^ 2 x 2 i + ⋯ + β ^ k x k i ) ] = 0 ∑ 2 e i ( − x 2 i ) = − 2 ∑ x 2 i [ y i − ( β ^ 1 + β ^ 2 x 2 i + ⋯ + β ^ k x k i ) ] = 0 ⋮ ∑ 2 e i ( − x k i ) = − 2 ∑ x k i [ y i − ( β ^ 1 + β ^ 2 x 2 i + ⋯ + β ^ k x k i ) ] = 0 \begin{aligned} \begin{cases} \sum{2e_i}(-1) & =-2\sum{[y_i-(\hat\beta_1+\hat\beta_2x_{2i}+\cdots +\hat\beta_kx_{ki} )]} &=0 \\ \sum{2e_i}(-x_{2i}) &=-2\sum{x_{2i}[y_i-(\hat\beta_1+\hat\beta_2x_{2i}+\cdots +\hat\beta_kx_{ki} )]} &=0 \\ \vdots \\ \sum{2e_i}(-x_{ki}) &=-2\sum{x_{ki}[y_i-(\hat\beta_1+\hat\beta_2x_{2i}+\cdots +\hat\beta_kx_{ki} )]} &=0 \end{cases} \end{aligned} 2ei(1)2ei(x2i)2ei(xki)=2[yi(β^1+β^2x2i++β^kxki)]=2x2i[yi(β^1+β^2x2i++β^kxki)]=2xki[yi(β^1+β^2x2i++β^kxki)]=0=0=0
    得到正规方程组
    { ∑ e i = ∑ [ y i − ( β ^ 1 + β ^ 2 x 2 i + ⋯ + β ^ k x k i ) ] = 0 ∑ e i x 2 i = ∑ x 2 i [ y i − ( β ^ 1 + β ^ 2 x 2 i + ⋯ + β ^ k x k i ) ] = 0 ⋮ ∑ e i x k i = ∑ x k i [ y i − ( β ^ 1 + β ^ 2 x 2 i + ⋯ + β ^ k x k i ) ] = 0 \begin{aligned} \begin{cases} \sum{e_i} & =\sum{[y_i-(\hat\beta_1+\hat\beta_2x_{2i}+\cdots +\hat\beta_kx_{ki} )]} &=0 \\ \sum{e_i}x_{2i} &=\sum{x_{2i}[y_i-(\hat\beta_1+\hat\beta_2x_{2i}+\cdots +\hat\beta_kx_{ki} )]} &=0 \\ \vdots \\ \sum{e_i}x_{ki} &=\sum{x_{ki}[y_i-(\hat\beta_1+\hat\beta_2x_{2i}+\cdots +\hat\beta_kx_{ki} )]} &=0 \end{cases} \end{aligned} eieix2ieixki=[yi(β^1+β^2x2i++β^kxki)]=x2i[yi(β^1+β^2x2i++β^kxki)]=xki[yi(β^1+β^2x2i++β^kxki)]=0=0=0
    写成矩阵形式
    ( 1 1 ⋯ 1 x 21 x 22 ⋯ x 2 i ⋮ ⋮ ⋮ ⋮ x k 1 x k 2 ⋯ x k i ) ( e 1 e 2 ⋮ e 3 ) = X τ e = 0 \begin{pmatrix} 1 & 1 & \cdots & 1 \\ x_{21} & x_{22} & \cdots & x_{2i} \\ \vdots & \vdots & \vdots & \vdots \\ x_{k1} & x_{k2} & \cdots & x_{ki} \end{pmatrix} \begin{pmatrix} e_1 \\ e_2 \\ \vdots \\ e_3 \end{pmatrix} = X^{\tau}\pmb{e}=\pmb{0} 1x21xk11x22xk21x2ixkie1e2e3=Xτeee=000
    对样本回归模型 Y = X β ^ + e Y=X \pmb{\hat\beta} + \pmb{e} Y=Xβ^β^β^+eee两边同左乘 X τ X^{\tau} Xτ
    X τ Y = X τ X β ^ + X τ e X^{\tau}Y = X^{\tau}X \pmb{\hat\beta} + X^{\tau}\pmb{e} \\ XτY=XτXβ^β^β^+Xτeee
    由于 X τ e = 0 X^{\tau}\pmb{e}=\pmb{0} Xτeee=000,所以 X τ Y = X τ X β ^ X^{\tau} Y = X^{\tau} X \pmb{\hat\beta} XτY=XτXβ^β^β^

    得到参数估计量
    β ^ = ( X τ X ) − 1 X τ Y \pmb{\hat\beta} = (X^{\tau}X)^{-1}X^{\tau}Y β^β^β^=(XτX)1XτY
    二、矩阵形式推导
    Q ( β ^ ) = e τ e = ( Y − X β ^ ) τ ( Y − X β ^ ) = ( Y τ − β ^ τ X τ ) ( Y − X β ^ ) = Y τ Y − Y τ X β ^ − β ^ τ X τ Y + β ^ τ X τ X β ^ = Y τ Y − 2 β ^ τ X τ Y + β ^ τ X τ X β ^ \begin{aligned} Q(\pmb{\hat\beta}) = \pmb{e^{\tau}}\pmb{e} &= (Y-X\pmb{\hat\beta})^{\tau}(Y-X\pmb{\hat\beta}) \\ & = (Y^{\tau}-\pmb{\hat\beta}^{\tau}X^{\tau})(Y-X\pmb{\hat\beta}) \\ & = Y^{\tau}Y-Y^{\tau}X\pmb{\hat\beta}-\pmb{\hat\beta}^{\tau}X^{\tau}Y+\pmb{\hat\beta}^{\tau}X^{\tau}X\pmb{\hat\beta} \\ & = Y^{\tau}Y-2\pmb{\hat\beta}^{\tau}X^{\tau}Y+\pmb{\hat\beta}^{\tau}X^{\tau}X\pmb{\hat\beta} \end{aligned} Q(β^β^β^)=eτeτeτeee=(YXβ^β^β^)τ(YXβ^β^β^)=(Yτβ^β^β^τXτ)(YXβ^β^β^)=YτYYτXβ^β^β^β^β^β^τXτY+β^β^β^τXτXβ^β^β^=YτY2β^β^β^τXτY+β^β^β^τXτXβ^β^β^
    对残差平方和各参数( β 1 , β 2 ⋯   , β k \beta_1,\beta_2\cdots,\beta_k β1,β2,βk)求导,并令其等于0
    ∂ Q ( β ^ ) ∂ β ^ = − 2 X τ Y + 2 X τ X β ^ = 0 \frac{\partial Q(\pmb{\hat\beta})}{\partial \pmb{\hat\beta}} =-2X^{\tau}Y+2X^{\tau}X\pmb{\hat\beta}=\pmb{0} β^β^β^Q(β^β^β^)=2XτY+2XτXβ^β^β^=000
    得到参数估计量
    β ^ = ( X τ X ) − 1 X τ Y \pmb{\hat\beta} = (X^{\tau}X)^{-1}X^{\tau}Y β^β^β^=(XτX)1XτY

    知乎与公号:财会程序猿的笔记(ID:wylcfy2014)
    不定期推送:Python+Stata | 文本分析+机器学习 | 财务+会计

    在这里插入图片描述

    展开全文
    weixin_47172744 2021-03-19 21:37:08
  • 先学习这个资料: OLS自编算法,不调用函数

    先学习这个资料:

    OLS自编算法,不调用函数

    重要的英文参考资料:

    Using Python for Introductory Econometrics

    kevinsheppard讲授Python做计量

    相关分析

    1.相关系数的计算公式:
    r = ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 ∑ ( y i − y ˉ ) 2 r=\frac{\sum (x_{i}-\bar{x})(y_{i}-\bar{y})}{\sum (x_{i}-\bar{x})^{2}\sum(y_{i}-\bar{y})^{2}} r=(xixˉ)2(yiyˉ)2(xixˉ)(yiyˉ)
    2. 统计量:
    t = r ∗ n − 2 1 − r 2 , 自 由 度 : ( n − 2 ) t=\frac{r*\sqrt{n-2}}{\sqrt{1-r^{2}}} , 自由度:(n-2) t=1r2 rn2 n2
    3.根据 t 统计量来计算显著性水平,从而确认 ( x , y ) (x,y) (x,y)之间的相关性是否显著( H 0 H0 H0:相关系数等于0,即相关性不显著)。

    import pandas as pd
    import numpy as np
    import scipy.stats as stats
    import matplotlib.pyplot as plt
    %matplotlib inline
    from sklearn.linear_model import LinearRegression
    
    
    data=pd.DataFrame()
    data=pd.DataFrame(pd.read_excel(r"D:\myfolder\al5-1.xls"))
    x=np.array(data[['adv']])
    y=np.array(data[['sale']])
    
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    #matplotlib画图中中文显示会有问题,需要这两行设置默认字体
     
    plt.xlabel('X')
    plt.ylabel('Y')
    colors1 = '#00CED1' #点的颜色
    area = np.pi * 16**2  # 点面积 
    plt.scatter(x, y, s=area, c=colors1, alpha=0.4, label='散点图:adv-sale')
    plt.plot(linewidth = '0.5',color='#000000')
    plt.legend()
    print(type(x)) #<class 'numpy.ndarray'>
    x=np.squeeze(x)
    y=np.squeeze(y)
    corr,pval=stats.pearsonr(x,y)
    print( '相关系数(pearson 间隔量表) = %6.5f  显著性水平 = %6.5f' % (corr, pval))
    
    corr,pval=stats.spearmanr(x,y)
    print( '相关系数(spearman 顺序量表) = %6.5f  显著性水平 = %6.5f' % (corr, pval))
    
    

    <class ‘numpy.ndarray’>
    相关系数(pearson ) = 0.96368 显著性水平 = 0.00000
    相关系数(spearman) = 0.99301 显著性水平 = 0.00000

    在这里插入图片描述

    计算相关系数表

    df=data[['time','adv','sale']]
    df.corr()
    

    在这里插入图片描述

    利用现有数据回归一下:

    import statsmodels.api as sm #最小二乘
    from statsmodels.formula.api import ols #加载ols模型
    
    lm=ols('sale~ adv',data=data).fit()
    print(lm.summary())
    
    

    在这里插入图片描述
    请看看上面的结果,相关系数(pearson ) = 0.96368,它的平方等于 0.9286791423999999,然后再看看上面的回归结果, R 2 R^{2} R2=0.929。这也验证了在二元回归方程中: R 2 = r 2 R^{2}=r^{2} R2=r2

    例子:

    import statsmodels.formula.api as smf
    model = smf.ols('distress ~ num_at_risk + launch_temp + leak_check_pressure + order', data = data)
    result = model.fit()
    # result.summary()
    import matplotlib.pyplot as plt
    plt.figure(figsize = (10, 8), dpi = 80)
    plt.scatter(result.fittedvalues, result.resid)
    plt.plot([-0.3, 1.3], [0, 0], color = "black")
    plt.show()
    
    #############
    import numpy as np
    import pandas as pd
    from sklearn.linear_model import BayesianRidge, LinearRegression, ElasticNet
    from sklearn.svm import SVR
    from sklearn.ensemble.gradient_boosting import GradientBoostingRegressor   # 集成算法
    from sklearn.model_selection import cross_val_score    # 交叉验证
    from sklearn.metrics import explained_variance_score, mean_absolute_error, mean_squared_error, r2_score  
    import matplotlib.pyplot as plt
    import seaborn as sns
    %matplotlib inline
    
    # 数据导入
    df = pd.read_csv('https://raw.githubusercontent.com/ffzs/dataset/master/boston/train.csv', 
                     usecols=['lstat', 'indus', 'nox', 'rm', 'medv'])
    
    # 可视化数据关系
    sns.set(style='whitegrid', context='notebook')   #style控制默认样式,context控制着默认的画幅大小
    sns.pairplot(df, size=2)
    plt.savefig('x.png')
    #######
    # 相关度
    corr = df.corr()
    # 相关度热力图
    sns.heatmap(corr, cmap='GnBu_r', square=True, annot=True)
    plt.savefig('xx.png')
    
    
    # 自变量
    X = df[['lstat', 'rm']].values
    # 因变量
    y = df[df.columns[-1]].values
    
    # 设置交叉验证次数
    n_folds = 5
    
    # 建立贝叶斯岭回归模型
    br_model = BayesianRidge()
    
    # 普通线性回归
    lr_model = LinearRegression()
    
    # 弹性网络回归模型
    etc_model = ElasticNet()
    
    # 支持向量机回归
    svr_model = SVR()
    
    # 梯度增强回归模型对象
    gbr_model = GradientBoostingRegressor()
    
    # 不同模型的名称列表
    model_names = ['BayesianRidge', 'LinearRegression', 'ElasticNet', 'SVR', 'GBR']
    # 不同回归模型
    model_dic = [br_model, lr_model, etc_model, svr_model, gbr_model]
    # 交叉验证结果
    cv_score_list = []
    # 各个回归模型预测的y值列表
    pre_y_list = []
    
    # 读出每个回归模型对象
    for model in model_dic:
        # 将每个回归模型导入交叉检验
        scores = cross_val_score(model, X, y, cv=n_folds)
        # 将交叉检验结果存入结果列表
        cv_score_list.append(scores)
        # 将回归训练中得到的预测y存入列表
        pre_y_list.append(model.fit(X, y).predict(X))
    ### 模型效果指标评估 ###
    # 获取样本量,特征数
    n_sample, n_feature = X.shape
    # 回归评估指标对象列表
    model_metrics_name = [explained_variance_score, mean_absolute_error, mean_squared_error, r2_score]
    # 回归评估指标列表
    model_metrics_list = []
    # 循环每个模型的预测结果
    for pre_y in pre_y_list:
        # 临时结果列表
        tmp_list = []
        # 循环每个指标对象
        for mdl in model_metrics_name:
            # 计算每个回归指标结果
            tmp_score = mdl(y, pre_y)
            # 将结果存入临时列表
            tmp_list.append(tmp_score)
        # 将结果存入回归评估列表
        model_metrics_list.append(tmp_list)
    df_score = pd.DataFrame(cv_score_list, index=model_names)
    df_met = pd.DataFrame(model_metrics_list, index=model_names, columns=['ev', 'mae', 'mse', 'r2'])
    
    # 各个交叉验证的结果
    df_score
    # 各种评估结果
    df_met
    ### 可视化 ###
    # 创建画布
    plt.figure(figsize=(9, 6))
    # 颜色列表
    color_list = ['r', 'g', 'b', 'y', 'c']
    # 循环结果画图
    for i, pre_y in enumerate(pre_y_list):
        # 子网络
        plt.subplot(2, 3, i+1)
        # 画出原始值的曲线
        plt.plot(np.arange(X.shape[0]), y, color='k', label='y')
        # 画出各个模型的预测线
        plt.plot(np.arange(X.shape[0]), pre_y, color_list[i], label=model_names[i])
        plt.title(model_names[i])
        plt.legend(loc='lower left')
    plt.savefig('xxx.png')
    plt.show()
    
    
    import pandas as pd 
    import statsmodels.formula.api as smf 
    import statsmodels.api as sm 
    
    TV = [230.1, 44.5, 17.2, 151.5, 180.8] 
    Radio = [37.8,39.3,45.9,41.3,10.8] 
    Newspaper = [69.2,45.1,69.3,58.5,58.4] 
    Sales = [22.1, 10.4, 9.3, 18.5,12.9] 
    df = pd.DataFrame({'TV': TV, 
            'Radio': Radio, 
            'Newspaper': Newspaper, 
            'Sales': Sales}) 
    
    Y = df.Sales 
    X = df[['TV','Radio','Newspaper']] 
    X = sm.add_constant(X) 
    model = sm.OLS(Y, X).fit() 
    print(model.summary())
    

    在这里插入图片描述

    我们做回归的时候,可以调用以下模块来进行:

    1. 使用patsy创建模型,使用其下面的 dmatrices来生成 设计矩阵,不需要再生成常数项的1111…数列了,后面再调用statsmodels.api 来执行回归任务。
    2. statsmodels的线性模型有两种不同的接口:1基于数组:import statsmodels.api as sm,需要配合 add_constant()来生成自变量矩阵。
    3. statsmodels的线性模型有两种不同的接口:2基于公式:import statsmodels.formula.api as smf,写公式直接拟合方程,公式中自变量可以变为平方项、自变量相互相乘等等,很方便的。
    4. 机器学习sklearn 的 linear_model模块来执行回归任务。

    参考资料:python建模库介绍

    同学们做最后的项目,可以参考以上博主的文章,提供了有关数据整理的系统性介绍。

    伍德里奇书上的例子:

    import wooldridge as woo
    import numpy as np
    import pandas as pd
    import statsmodels.formula.api as smf
    
    attend = woo.dataWoo('attend')
    n = attend.shape[0]
    # # shape[0]输出矩阵的行数, 同理shape[1]输出列数
    reg = smf.ols(formula='stndfnl ~ atndrte*priGPA + ACT + I(priGPA**2) + I(ACT**2)',
                  data=attend)
    results = reg.fit()
    
    # print regression table:
    table = pd.DataFrame({'b': round(results.params, 4),
                          'se': round(results.bse, 4),
                          't': round(results.tvalues, 4),
                          'pval': round(results.pvalues, 4)})
    print(f'table: \n{table}\n')
    
    # estimate for partial effect at priGPA=2.59:
    b = results.params
    partial_effect = b['atndrte'] + 2.59 * b['atndrte:priGPA']
    print(f'partial_effect: {partial_effect}\n')
    
    # F test for partial effect at priGPA=2.59:
    hypotheses = 'atndrte + 2.59 * atndrte:priGPA = 0'
    ftest = results.f_test(hypotheses)
    fstat = ftest.statistic[0][0]
    fpval = ftest.pvalue
    
    print(f'fstat: {fstat}\n')
    print(f'fpval: {fpval}\n')
    
    

    回归中的一些检验:

    1. 回归系数假设检验方法(可以检验 β \beta β 为任意值的情形)
      t = β ^ − E ( β ^ ) S e ( β ^ ) ∼ t ( n − k − 1 ) t=\frac{\hat{\beta}-E(\hat{\beta})}{S_{e}(\hat{\beta})}\sim t(n-k-1) t=Se(β^)β^E(β^)t(nk1)
      其中:

    注意: x = X i − X ˉ x =X_{i} -\bar{X} x=XiXˉ

    S e ( β ^ ) = σ ^ ∑ x i 2 , σ ^ 扰 动 项 方 差 , 算 法 是 : S_{e}(\hat{\beta })=\frac{\hat{\sigma }}{\sqrt{\sum x_{i}^{2}}} , \hat{\sigma}扰动项方差,算法是: Se(β^)=xi2 σ^,σ^

    σ ^ 2 = ∑ e i 2 n − k − 1 \hat{\sigma }^{2}=\frac{\sum e_{i}^{2}}{n-k-1} σ^2=nk1ei2

    比如: H 0 H0 H0 β \beta β=8 等等,其实就是把8带入到 E ( β ^ ) E(\hat{\beta}) E(β^) 的位置,然后去计算 T 值。

    1. 系数的显著性检验:即 β \beta β=0 的检验
      t = β ^ − 0 S e ( β ^ ) ∼ t ( n − k − 1 ) t=\frac{\hat{\beta}-0}{S_{e}(\hat{\beta})}\sim t(n-k-1) t=Se(β^)β^0t(nk1)

    2. 全部斜率系数 β \beta β 为 0 的 F F F 检验。
      F = ∑ i = 1 N ( Y i ^ − Y i ˉ ) 2 / k ∑ i = 1 N ( Y i − Y i ^ ) 2 / ( n − k − 1 ) F=\frac{\sum_{i=1}^{N}(\hat{Y_{i}}-\bar{Y_{i}})^2/k} {\sum_{i=1}^{N}({Y_{i}}-\hat{Y_{i}})^2/(n-k-1)} F=i=1N(YiYi^)2/(nk1)i=1N(Yi^Yiˉ)2/k

    教材的公式有误。

    公 式 变 形 后 有 : F = n − k − 1 k ∗ R 2 1 − R 2 公式变形后有:F=\frac{n-k-1}{k}*\frac{R^2}{1-R^2} F=knk11R2R2
    所以,F 检验和 拟合优度 是有联系的。

    1. 方程拟合优度 R 2 R^2 R2
      R 2 = 解 释 的 变 差 总 变 差 = E S S T S S R^2=\frac{解释的变差}{总变差} =\frac{ESS}{TSS} R2==TSSESS

    E S S T S S = ∑ i = 1 N ( Y i ^ − Y ˉ ) 2 ∑ i = 1 N ( Y i − Y ˉ ) 2 = 1 − ∑ i = 1 N e i 2 ∑ i = 1 N ( Y i − Y ˉ ) 2 \frac{ESS}{TSS} =\frac{\sum_{i=1}^{N}(\hat{Y_{i}}-\bar{Y})^2} {\sum_{i=1}^{N}({Y_{i}}-\bar{Y})^2} =1- \frac{\sum_{i=1}^{N}e_{i} ^2} {\sum_{i=1}^{N}({Y_{i}}-\bar{Y})^2} TSSESS=i=1N(YiYˉ)2i=1N(Yi^Yˉ)2=1i=1N(YiYˉ)2i=1Nei2

    判断拟合效果的统计量还有:平均绝对误差MAE 和 均方根误差 RMSE。

    M A E = ∑ i = 1 N ∣ Y i ^ − Y i ∣ N MAE=\frac{ {\textstyle \sum_{i=1}^{N}}\left |\hat{Y_{i} } -Y_{i} \right | }{N} MAE=Ni=1NYi^Yi

    R M S E = ∑ i = 1 N ( Y i ^ − Y i ) 2 N RMSE=\sqrt{\frac{ {\textstyle \sum_{i=1}^{N}}(\hat{Y_{i} } -Y_{i} )^2 }{N} } RMSE=Ni=1N(Yi^Yi)2

    1. 双变量回归中 Y Y Y的置信区间(其中: x = X i − X ˉ x =X_{i} -\bar{X} x=XiXˉ

    Y 0 − Y 0 ^ σ ^ ∗ 1 + 1 n + ( X 0 − X ˉ ) 2 ∑ x 2 ∼ t ( n − 2 ) \frac{Y_{0} -\hat{Y_{0}} }{\hat{\sigma }*\sqrt{1+\frac{1}{n} +\frac{(X_{0} -\bar{X} )^2}{\sum x^{2} } } } \sim t(n-2) σ^1+n1+x2(X0Xˉ)2 Y0Y0^t(n2)

    Y 0 ^ \hat{Y_{0}} Y0^ 的 95% 置信区间为:
    ( α ^ + β ^ X 0 ) ± t 0.025 ( n − 2 ) ∗ σ ^ ∗ 1 + 1 n + ( X 0 − X ˉ ) 2 ∑ x 2 (\hat{\alpha }+\hat{\beta} X_{0} )\pm t_{0.025}(n-2)* {\hat{\sigma }*\sqrt{1+\frac{1}{n} +\frac{(X_{0} -\bar{X} )^2}{\sum x^{2} } } } (α^+β^X0)±t0.025(n2)σ^1+n1+x2(X0Xˉ)2

    import pandas as pd 
    import statsmodels.formula.api as smf 
    import statsmodels.api as sm 
    
    TV = [230.1, 44.5, 17.2, 151.5, 180.8] 
    Radio = [37.8,39.3,45.9,41.3,10.8] 
    Newspaper = [69.2,45.1,69.3,58.5,58.4] 
    Sales = [22.1, 10.4, 9.3, 18.5,12.9] 
    df = pd.DataFrame({'TV': TV, 
            'Radio': Radio, 
            'Newspaper': Newspaper, 
            'Sales': Sales}) 
    
    Y = df.Sales 
    X = df[['TV','Radio','Newspaper']] 
    X = sm.add_constant(X) 
    model = sm.OLS(Y, X).fit() 
    print(model.summary())
    
    

    1.提取元素-回归系数类

    # 提取回归系数
    model.params
    
    # 提取回归系数标准差
    model.bse
    
    # 提取回归系数p值
    model.pvalues
    
    # 提取回归系数t值
    model.tvalues
    
    # 提取回归系数置信区间 默认5%,括号中可填具体数字 比如0.05, 0.1
    model.conf_int()  
    
    # 提取模型预测值
    model.fittedvalues
    
    # 提取残差
    model.resid
    
    # 模型自由度(系数自由度)
    model.df_model
    
    # 残差自由度(样本自由度)
    model.df_resid
    
    # 模型样本数量
    model.nobs
    

    2.模型评价类:

    # 提取R方
    model.rsquared
    
    # 提取调整R方
    model.rsquared_adj
    
    # 提取AIC
    model.aic
    
    # 提取BIC
    model.bic
    
    # 提取F-statistic
    model.fvalue
    
    # 提取F-statistic 的pvalue
    model.f_pvalue
    
    # 模型mse
    model.mse_model
    
    # 残差mse
    model.mse_resid
    
    # 总体mse
    model.mse_total
    
    

    3.下面是不太常用的计量经济学方面的系数:

    # 协方差矩阵比例因子
    model.scale
    
    #  White异方差稳健标准误
    model.HC0_se
    
    # MacKinnon和White(1985)的异方差稳健标准误
    model.HC1_se
    
    #  White异方差矩阵
    model.cov_HC0
    
    # MacKinnon和White(1985)的异方差矩阵
    model.cov_HC1
    
    

    以上可查阅这篇文章

    参考文章:

    Python实现多元线性回归

    Python实现多元线性回归

    Python 实战多元线性回归模型

    Python 实现多元线性回归预测

    利用scipy, seaborn 做假设检验,回归分析

    展开全文
    weixin_40496687 2021-04-27 11:52:51
  • 在线性模型的经典假设的前提下,OLS估计量有优良的性质,即高斯-马尔可夫定理 经典假设 1、零均值假定 假定随机干扰项ε\pmb{\varepsilon}εεε期望向量或均值向量为零 E(ε)=E[ε1ε2⋮εn]=[E(ε1)E(ε2)⋮E(εn)...

    上文中《计量笔记(一) | OLS估计量推导》我们通过基本公式和矩阵形式两种方式推导出了OLS估计量的表达式,那么OLS估计量有什么优良性质呢?

    在线性模型的经典假设的前提下,OLS估计量有优良的性质,即高斯-马尔可夫定理

    经典假设

    1、零均值假定

    假定随机干扰项 ε \pmb{\varepsilon} εεε期望向量或均值向量为零
    E ( ε ) = E [ ε 1 ε 2 ⋮ ε n ] = [ E ( ε 1 ) E ( ε 2 ) ⋮ E ( ε n ) ] = [ 0 0 ⋮ 0 ] = 0 E(\pmb{\varepsilon})= E \begin{bmatrix} \varepsilon_1 \\ \varepsilon_2 \\ \vdots \\ \varepsilon_n \end{bmatrix} =\begin{bmatrix} E(\varepsilon_1) \\ E(\varepsilon_2) \\ \vdots \\ E(\varepsilon_n) \end{bmatrix} =\begin{bmatrix} 0 \\ 0 \\ \vdots\\ 0 \end{bmatrix} =\pmb{0} E(εεε)=Eε1ε2εn=E(ε1)E(ε2)E(εn)=000=000
    2、同方差和无序列相关假定

    假定随机干扰项 ε \pmb{\varepsilon} εεε不存在序列相关且方差相同

    这里推导过程中使用了零均值假定
    V a r ( ε ) = E [ ( ε − E ( ε ) ( ε − E ( ε ) τ ] = E ( ε ε τ ) = E [ ( ε 1 ε 2 ⋮ ε n ) ( ε 1 ε 2 ⋯ ε n ) ] = [ E ( ε 1 , ε 1 ) E ( ε 1 , ε 2 ) ⋯ E ( ε 1 , ε n ) E ( ε 2 , ε 1 ) E ( ε 2 , ε 2 ) ⋯ E ( ε 2 , ε n ) ⋮ ⋮ ⋮ ⋮ E ( ε n , ε 1 ) E ( ε n , ε 2 ) ⋯ E ( ε n , ε n ) ] = [ σ 2 0 ⋯ 0 0 σ 2 ⋯ 0 ⋮ ⋮ ⋮ ⋮ 0 0 ⋯ σ 2 ] = σ 2 I n \begin{aligned} Var(\pmb{\varepsilon}) & = E[(\pmb{\varepsilon}-E(\pmb{\varepsilon})(\pmb{\varepsilon}-E(\pmb{\varepsilon})^{\tau}] \\ & = E(\pmb{\varepsilon}\pmb{\varepsilon}^{\tau}) \\ & = E\begin{bmatrix} \begin{pmatrix} \varepsilon_1 \\ \varepsilon_2 \\ \vdots \\ \varepsilon_n \end{pmatrix} \begin{pmatrix} \varepsilon_1 & \varepsilon_2 & \cdots & \varepsilon_n \end{pmatrix} \end{bmatrix} \\ & = \begin{bmatrix} E(\varepsilon_1,\varepsilon_1) & E(\varepsilon_1,\varepsilon_2) & \cdots & E(\varepsilon_1,\varepsilon_n) \\ E(\varepsilon_2,\varepsilon_1) & E(\varepsilon_2,\varepsilon_2) & \cdots & E(\varepsilon_2,\varepsilon_n) \\ \vdots & \vdots & \vdots & \vdots \\ E(\varepsilon_n,\varepsilon_1) & E(\varepsilon_n,\varepsilon_2) & \cdots & E(\varepsilon_n,\varepsilon_n) \end{bmatrix} \\ & = \begin{bmatrix} \sigma^2 & 0 & \cdots & 0 \\ 0 & \sigma^2 & \cdots & 0 \\ \vdots & \vdots & \vdots & \vdots \\ 0 & 0 & \cdots & \sigma^2 \end{bmatrix} \\ & = \sigma^2\pmb{I}_n \end{aligned} Var(εεε)=E[(εεεE(εεε)(εεεE(εεε)τ]=E(εεεεεετ)=Eε1ε2εn(ε1ε2εn)=E(ε1,ε1)E(ε2,ε1)E(εn,ε1)E(ε1,ε2)E(ε2,ε2)E(εn,ε2)E(ε1,εn)E(ε2,εn)E(εn,εn)=σ2000σ2000σ2=σ2IIIn

    3、随机干扰项与解释变量相互独立假定

    直观理解是干扰项中不包含解释变量的信息

    通常假定 X X X中的元素 X 2 , i , X 3 , i , ⋯   , X k , i X_{2,i},X_{3,i},\cdots,X_{k,i} X2,i,X3,i,,Xk,i为非随机变量,这个假设自动成立
    E ( X τ ε ) = 0 E(X^{\tau}\pmb{\varepsilon})=\pmb{0} E(Xτεεε)=000
    4、无多重共线性假定

    各解释变量之间不存在线性关系

    即数据矩阵 X X X列满秩
    R a n k ( X ) = k Rank(X)=k Rank(X)=k
    5、正态性假定

    假定随机干扰项服从正态分布

    以下方式表示包括了假定1、假定2、假定5
    ε − N ( 0 , σ 2 I n ) \pmb{\varepsilon} - N(\pmb{0},\sigma^2\pmb{I}_n) εεεN(000,σ2IIIn)
    OLS估计量性质

    高斯-马尔可夫定理:在线性模型的经典假设下,参数的最小二乘估计量是线性无偏估计量中方差最小的估计量(BLUE估计量)

    1、线性特性

    参数估计量 β ^ \pmb{\hat{\beta}} β^β^β^既是因变量观测值 Y Y Y的线性组合,也是随机误差项 ε \pmb{\varepsilon} εεε的线性组合
    β ^ = ( X τ X ) − 1 X τ Y = ( X τ X ) − 1 X τ ( X β + ε ) = ( X τ X ) − 1 X τ X β + ( X τ X ) − 1 X τ ε = β + ( X τ X ) − 1 X τ ε \begin{aligned} \pmb{\hat\beta} & = (X^{\tau}X)^{-1}X^{\tau}Y \\ & = (X^{\tau}X)^{-1}X^{\tau}(X \pmb{\beta} + \pmb{\varepsilon}) \\ & = (X^{\tau}X)^{-1}X^{\tau}X \pmb{\beta} + (X^{\tau}X)^{-1}X^{\tau}\pmb{\varepsilon} \\ & = \pmb{\beta} + (X^{\tau}X)^{-1}X^{\tau}\pmb{\varepsilon} \end{aligned} β^β^β^=(XτX)1XτY=(XτX)1Xτ(Xβββ+εεε)=(XτX)1XτXβββ+(XτX)1Xτεεε=βββ+(XτX)1Xτεεε
    这里推导未使用任何假定,令 A = ( X τ X ) − 1 X τ A=(X^{\tau}X)^{-1}X^{\tau} A=(XτX)1Xτ,则 β ^ = A Y = β + A ε \pmb{\hat\beta} =AY=\pmb{\beta} + A\pmb{\varepsilon} β^β^β^=AY=βββ+Aεεε

    其中,矩阵 A A A k k k n n n列元素构成, k k k指解释变量个数包括截距项, n n n是指观测值个数

    对于某个参数 β ^ k \hat\beta_k β^k是矩阵 A A A k k k行元素构成的行向量与因变量观测值 Y Y Y的向量积

    线性特性是确定参数估计量的分布性质和进行统计推断的重要基础

    2、无偏性

    参数估计量 β ^ \pmb{\hat{\beta}} β^β^β^的期望等于总体参数
    E ( β ^ ) = E ( β + A ε ) = E ( β ) + A E ( ε ) = β \begin{aligned} E(\pmb{\hat\beta}) & = E(\pmb{\beta} + A\pmb{\varepsilon}) \\ & = E(\pmb{\beta}) + AE(\pmb{\varepsilon}) \\ & = \pmb{\beta} \end{aligned} E(β^β^β^)=E(βββ+Aεεε)=E(βββ)+AE(εεε)=βββ
    这里用到了线性特性、假定1、假定3

    3、方差最小性

    OLS估计量的有效性,也称为“最小方差性”,即在模型参数的所有线性无偏估计量中OLS估计的方差最小

    先求OLS估计量的协方差矩阵
    V a r ( β ^ ) = E [ ( β ^ − E ( β ^ ) ) ( β ^ − E ( β ^ ) ) τ ] = E [ ( β ^ − β ) ( β ^ − β ) τ ] = E [ ( A ε ) ( A ε ) τ ] = E [ A ε ε τ A τ ] = A E ( ε ε τ ) A τ = A σ 2 I n A τ = σ 2 A A τ = σ 2 ( X τ X ) − 1 X τ X ( X τ X ) − 1 = σ 2 ( X τ X ) − 1 \begin{aligned} Var(\pmb{\hat\beta}) & = E[(\pmb{\hat\beta}-E(\pmb{\hat\beta}))(\pmb{\hat\beta}-E(\pmb{\hat\beta}))^{\tau}] \\ & = E[(\pmb{\hat\beta}-\pmb{\beta})(\pmb{\hat\beta}-\pmb{\beta})^{\tau}] \\ & = E[(A\pmb{\varepsilon})(A\pmb{\varepsilon})^{\tau}] \\ & = E[A\pmb{\varepsilon}\pmb{\varepsilon}^{\tau}A^{\tau}] \\ & = AE(\pmb{\varepsilon}\pmb{\varepsilon}^{\tau})A^{\tau} \\ & = A\sigma^2\pmb{I}_nA^{\tau} \\ & = \sigma^2AA^{\tau} \\ & = \sigma^2(X^{\tau}X)^{-1}X^{\tau}X(X^{\tau}X)^{-1} \\ & = \sigma^2(X^{\tau}X)^{-1} \end{aligned} Var(β^β^β^)=E[(β^β^β^E(β^β^β^))(β^β^β^E(β^β^β^))τ]=E[(β^β^β^βββ)(β^β^β^βββ)τ]=E[(Aεεε)(Aεεε)τ]=E[AεεεεεετAτ]=AE(εεεεεετ)Aτ=Aσ2IIInAτ=σ2AAτ=σ2(XτX)1XτX(XτX)1=σ2(XτX)1
    这里因为 ( X τ X ) − 1 (X^{\tau}X)^{-1} (XτX)1是对称矩阵,所以它的转置还是它本身,所以 A τ = X ( X τ X ) − 1 A^{\tau}=X(X^{\tau}X)^{-1} Aτ=X(XτX)1

    这里用到无偏性、线性特性、假定3、假定2

    接下来就要证明上述OLS估计量的协方差矩阵是所有线性无偏估计量的协方差矩阵中是最小的(省略)

    参数的OLS估计量 β ^ \pmb{\hat{\beta}} β^β^β^的分布形式

    我们在证明OLS估计量具有最佳线性无偏估计量性质的过程中仅使用了假定1、假定2、假定3,未使用到假定4和假定5,并且在证明过程中,我们也知道了OLS估计量的均值和方差,如果我们进一步知道OLS估计量分布形式,就可以进行统计推断了

    根据假定5,可以推导出参数的OLS估计量 β ^ \pmb{\hat{\beta}} β^β^β^也是服从正态分布的

    根据线性特性 β ^ = A Y = β + A ε \pmb{\hat\beta} =AY=\pmb{\beta} + A\pmb{\varepsilon} β^β^β^=AY=βββ+Aεεε,说明参数的OLS估计量 β ^ \pmb{\hat{\beta}} β^β^β^是随机误差项 ε \pmb{\varepsilon} εεε的线性组合,而根据假定5随机误差项 ε \pmb{\varepsilon} εεε服从正态分布,所以参数的OLS估计量 β ^ \pmb{\hat{\beta}} β^β^β^也服从正态分布

    因为 E ( β ^ ) = β E(\pmb{\hat\beta})=\pmb{\beta} E(β^β^β^)=βββ V a r ( β ^ ) = σ 2 ( X τ X ) − 1 Var(\pmb{\hat\beta}) =\sigma^2(X^{\tau}X)^{-1} Var(β^β^β^)=σ2(XτX)1,所以参数的OLS估计量 β ^ \pmb{\hat{\beta}} β^β^β^正态分布形式为
    β ^ − N ( β , σ 2 ( X τ X ) − 1 ) \pmb{\hat\beta}-N(\pmb{\beta},\sigma^2(X^{\tau}X)^{-1}) β^β^β^N(βββ,σ2(XτX)1)
    对于具体的某个估计量 b j ^ \hat{b_j} bj^的分布形式为 b j ^ − N ( b j , σ 2 ( ( X τ X ) − 1 ) j j ) \hat{b_j}-N(b_j,\sigma^2((X^{\tau}X)^{-1})_{jj}) bj^N(bj,σ2((XτX)1)jj)

    随机误差项方差的估计

    前文推导过程中,我们求出了参数的OLS估计量 β ^ \pmb{\hat{\beta}} β^β^β^的具体数值, β ^ = ( X τ X ) − 1 X τ Y \pmb{\hat\beta} = (X^{\tau}X)^{-1}X^{\tau}Y β^β^β^=(XτX)1XτY,我们求出了参数的OLS估计量 β ^ \pmb{\hat{\beta}} β^β^β^的期望和方差, E ( β ^ ) = β E(\pmb{\hat\beta})=\pmb{\beta} E(β^β^β^)=βββ V a r ( β ^ ) = σ 2 ( X τ X ) − 1 Var(\pmb{\hat\beta}) =\sigma^2(X^{\tau}X)^{-1} Var(β^β^β^)=σ2(XτX)1,我们甚至求出了参数的OLS估计量 β ^ \pmb{\hat{\beta}} β^β^β^的分布形式, β ^ − N ( β , σ 2 ( X τ X ) − 1 ) \pmb{\hat\beta}-N(\pmb{\beta},\sigma^2(X^{\tau}X)^{-1}) β^β^β^N(βββ,σ2(XτX)1)

    但是,不难发现,上述表达式中,始终有个随机误差项的方差 σ 2 \sigma^2 σ2的取值我们不得而知,事实上我们也无法计算,因为我们不知道总体回归模型和总体样本是如何

    但是,我们可以对 σ 2 \sigma^2 σ2进行估计,若计
    σ ^ 2 = ∑ e i 2 n − k \hat{\sigma}^2= \frac{\sum{e_i^2}}{n-k} σ^2=nkei2
    可以证明, E ( σ ^ 2 ) = σ 2 E(\hat{\sigma}^2)=\sigma^2 E(σ^2)=σ2,证明省略

    那么,对于具体的某个估计量 b j ^ \hat{b_j} bj^的分布形式为 b j ^ − N ( b j , σ ^ 2 ( ( X τ X ) − 1 ) j j ) \hat{b_j}-N(b_j,\hat\sigma^2((X^{\tau}X)^{-1})_{jj}) bj^N(bj,σ^2((XτX)1)jj)

    知乎与公号:财会程序猿的笔记(ID:wylcfy2014)
    不定期推送:Python+Stata | 文本分析+机器学习 | 财务+会计

    在这里插入图片描述

    参考资料
    [1]朱建平等,高级计量经济学导论
    [2]孙敬水,中级计量经济学

    展开全文
    weixin_47172744 2021-03-28 16:49:46
  • 前言 变量之间的关系可以分为函数关系(有精确的数学表达式)和相关...今天就来总结一下ols模型 一.ols模型需要满足四个假设: 1.正态性,可以通过qqplot进行检验,看看是否分布在45度倾斜角的直线上 2.独立性,可

    前言

    变量之间的关系可以分为函数关系(有精确的数学表达式)和相关关系可以分为:平行关系(一元回归分析),依存关系(多元回归分析)。

    以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是我不断更新的动力哟!

    MATLAB-30天带你从入门到精通

    MATLAB深入理解高级教程(附源码)

    tableau可视化数据分析高级教程

    今天就来总结一下ols模型

    一.ols模型需要满足四个假设:

    1.正态性,可以通过qqplot进行检验,看看是否分布在45度倾斜角的直线上

    2.独立性,可以根据自己的经验进行判断,比如年龄和头发的颜色两个变量之间基本使相互独立的,也可以用car包的Durbin~Watson检验函数

    3.线性相关,可以通过成分残差图来进行判断,可以加载car包,crplots()函数进行检验

    4.同方差性,可以通过car包中的ncvTest()函数进行检验

    二.案例代码

    t<-c(1978,1979,

    展开全文
    wenyusuran 2021-08-24 10:27:19
  • weixin_33895274 2021-01-17 13:58:35
  • qq_18668137 2020-03-26 13:20:37
  • qq_31827399 2019-07-31 15:17:22
  • weixin_29487179 2021-01-12 20:25:27
  • with_still_water 2019-10-16 15:39:19
  • llj20d 2018-06-11 16:27:09
  • weixin_54653147 2021-03-30 11:00:25
  • Wowlittlemoon 2021-11-16 17:45:10
  • weixin_54653147 2021-03-07 12:57:39
  • weixin_39959236 2020-12-20 13:22:48
  • dataxc 2020-09-24 11:30:11
  • ZY_Jack 2019-11-30 16:57:17
  • weixin_46116695 2020-11-06 13:46:07
  • None_Pan 2020-05-19 06:12:36
  • weixin_35903340 2021-01-17 18:45:46