zoukankan      html  css  js  c++  java
  • 个股与指数的回归分析(自带python ols 参数解读)

     

    python信用评分卡建模(附代码,博主录制)

     

     

     

    http://blog.csdn.net/csqazwsxedc/article/details/51336322(转)

    # 一 个股与指数的回归分析 ## 1.1 数据加载 加载分析所需的Python库

    import statsmodels.api as sm
    import statsmodels.formula.api as smf
    import statsmodels.graphics.api as smg
    import patsy
    %matplotlib inline
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    from pandas import Series,DataFrame
    from scipy import stats
    import seaborn as sns

    确定起止时间为2015年1月1日至2015年12月31日

    import datetime
    start = datetime.datetime(2015,1,1)
    end = datetime.datetime(2015,12,31)
    • 1
    • 2
    • 3

    获取”上证综指”2015年股价数据,记为datasz; 获取”机器人”公司2015年股价数据,记为datajqr。

    from pandas.io.data import DataReader
    datass = DataReader("000001.SS","yahoo",start,end)
    datajqr = DataReader("300024.SZ","yahoo",start,end)
    • 1
    • 2
    • 3

    D:software新建文件夹 (4)libsite-packagespandasiodata.py:33: FutureWarning: The pandas.io.data module is moved to a separate package (pandas-datareader) and will be removed from pandas in a future version. After installing the pandas-datareader package (https://github.com/pydata/pandas-datareader), you can change the import “from pandas.io import data, wb“ to “from pandas_datareader import data, wb“. FutureWarning)

    datass.head()
     OpenHighLowCloseVolumeAdj Close
    Date      
    2015-01-05 3350.52 3350.52 3350.52 3350.52 0 3350.52
    2015-01-06 3351.45 3351.45 3351.45 3351.45 0 3351.45
    2015-01-07 3373.95 3373.95 3373.95 3373.95 0 3373.95
    2015-01-08 3293.46 3293.46 3293.46 3293.46 0 3293.46
    2015-01-09 3285.41 3285.41 3285.41 3285.41 0 3285.41
    datajqr.head()
     OpenHighLowCloseVolumeAdj Close
    Date      
    2015-01-01 39.39 39.39 39.39 39.39 0 39.37083
    2015-01-02 39.39 39.39 39.39 39.39 0 39.37083
    2015-01-05 38.83 39.33 37.30 39.01 20750100 38.99101
    2015-01-06 38.76 41.29 38.50 41.22 24357600 41.19994
    2015-01-07 41.21 41.60 40.05 40.18 16364700 40.16044

    ## 1.2 个股与上证指数数据探索性分析

    close_ss = datass["Close"]
    close_jqr = datajqr["Close"]

    得到上证综指2015年各交易日收盘价的简单统计结果,如下所示。共有233个上证综指的股价数据,指数的平均值为3739.79,最小值为2927.29,最大值为5166.35。

    close_ss.describe()

    count 233.000000 mean 3739.794893 std 538.105387 min 2927.290000 25% 3320.680000 50% 3617.060000 75% 4034.310000 max 5166.350000 Name: Close, dtype: float64 得到机器人公司2015年各交易日收盘价的简单统计结果,如下所示。共有261个上证综指的股价数据,股价的平均值67.31,最小值为39.01,最大值为128.00。

    close_jqr.describe()

    count 261.000000 mean 67.317433 std 20.643055 min 39.010000 25% 51.800000 50% 68.500000 75% 82.550000 max 128.000000 Name: Close, dtype: float64 观察上证综指和机器人公司的股价波动图,如下所示,可以看到,上证综指与机器人公司的股价波动有着相对一致的趋势,机器人公司股价波动较上证综指更大。

    fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(15,6))
    close_ss.plot(ax=ax[0])
    ax[0].set_title("SZZZ")
    close_jqr.plot(ax=ax[1])
    ax[1].set_title("JQR")
    stock = pd.merge(datass,datajqr,left_index = True, right_index = True)
    stock = stock[["Close_x","Close_y"]]
    stock.columns = ["SZZZ","JQR"]
    stock.head()
     SZZZJQR
    Date  
    2015-01-05 3350.52 39.01
    2015-01-06 3351.45 41.22
    2015-01-07 3373.95 40.18
    2015-01-08 3293.46 40.15
    2015-01-09 3285.41 39.36

    根据股价得到上证综指和机器人公司的日收益率序列,如下所示。

    daily_return = (stock.diff()/stock.shift(periods = 1)).dropna()
    daily_return.head()
     SZZZJQR
    Date  
    2015-01-06 0.000278 0.056652
    2015-01-07 0.006714 -0.025230
    2015-01-08 -0.023856 -0.000747
    2015-01-09 -0.002444 -0.019676
    2015-01-12 -0.017072 0.004827

    观察日收益率序列的简单统计值,如下所示。上证综指日收益率平均值为0.000556,最小值为-0.0849,最大值为0.0769.机器人公司股价的平均值为0.003665,最小值为-10.00,最大值数据为异常值。

    daily_return.describe()
     SZZZJQR
    count 232.000000 232.000000
    mean 0.000556 0.003665
    std 0.025194 0.050061
    min -0.084907 -0.100017
    25% -0.011398 -0.021297
    50% 0.002583 -0.000724
    75% 0.016720 0.026968
    max 0.076940 0.209524

    观察异常值数据

    daily_return[daily_return["JQR"] > 0.105]
     SZZZJQR
    Date  
    2015-10-12 0.07694 0.209524

    经分析,该日股价数据异常的原因主要是10月8日和10月9日两个交易日的股价数据缺失,导致该日收益率的计算基数为2015年9月30日。

    画出上证综指和机器人公司日收益率波动图

    fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(15,6))
    daily_return["SZZZ"].plot(ax=ax[0])
    ax[0].set_title("SZZZ")
    daily_return["JQR"].plot(ax=ax[1])
    ax[1].set_title("JQR")
    <matplotlib.text.Text at 0x7671a40dd8>
    

    png

    画出上证综指和机器人公司日收益率直方图和密度图,如下所示,可以发现,总体上,上证综指和机器人公司日收益率服从正态分布。相对而言,机器人公司的日收益率较上证综指偏低。

    fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(15,6))
    sns.distplot(daily_return["SZZZ"],ax=ax[0])
    ax[0].set_title("SZZZ")
    sns.distplot(daily_return["JQR"],ax=ax[1])
    ax[1].set_title("JQR")
    <matplotlib.text.Text at 0x76725906a0>
    

    png

    画出上证综指和机器人公司股价日收益率散点图,如下所示。

    fig,ax = plt.subplots(nrows=1,ncols=1,figsize=(12,6))
    plt.scatter(daily_return["JQR"],daily_return["SZZZ"])
    plt.title("Scatter Plot of daily return between JQR and SZZZ")
    <matplotlib.text.Text at 0x76726657b8>
    

    png

    散点图表明,上证综指和机器人公司的股价可能存在线性的正相关关系。

    1.3 个股与上证综指回归分析

    import statsmodels.api as sm

    加入截距项。

    daily_return["intercept"]=1.0

    以个股为自变量,上证综指为因变量,对个股和上证综指进行回归分析。得到回归结果,如下所示。

    model = sm.OLS(daily_return["JQR"],daily_return[["SZZZ","intercept"]])
    results = model.fit()
    results.summary()
    OLS Regression Results
    Dep. Variable: JQR R-squared: 0.382
    Model: OLS Adj. R-squared: 0.379
    Method: Least Squares F-statistic: 142.0
    Date: Fri, 18 Mar 2016 Prob (F-statistic): 8.29e-26
    Time: 22:16:56 Log-Likelihood: 421.79
    No. Observations: 232 AIC: -839.6
    Df Residuals: 230 BIC: -832.7
    Df Model: 1    
    Covariance Type: nonrobust    
      coefstd errtP>|t|[95.0% Conf. Int.]
    SZZZ 1.2275 0.103 11.915 0.000 1.025 1.431
    intercept 0.0030 0.003 1.151 0.251 -0.002 0.008
    Omnibus: 8.703 Durbin-Watson: 1.824
    Prob(Omnibus): 0.013 Jarque-Bera (JB): 9.653
    Skew: 0.350 Prob(JB): 0.00801
    Kurtosis: 3.714 Cond. No. 39.8

    一元最小二乘法回归结果表明,机器人公司的股票日收益率与上证综指日收益率之间存在显著的正相关关系。其中,可决系数为0.382,表明上证综指日收益率变量对机器人日收益率变量有较强的解释力,模型拟合结果较好,F统计量和Omnibus统计量的P值都接近于0,自变量的作用显著。t统计量的P值接近于0,表明上证综指变量显著。自变量系数为1.2275,表明机器人公司股票的日收益率波动比上证综指大,该个股的风险更大,可能获得的收益和损失也更大。平均上证综指日收益率波动1%,个股日收益率波动1.2275%。Durbin-Waston检验的值为1.824,表明收益率数据不存在序列相关性。Jarque-Bera的P值接近于0,表明日收益率数据服从正态分布。

     

     https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149( 欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章)

     


     

  • 相关阅读:
    C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 04)
    C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 03)
    C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 02)
    C#/Java 程序员转GO/golang程序员笔记大全(day 01)
    selenium grid配置
    JUnit和TestNG的区别
    【转载】 HttpClient、HttpURLConnection、OKHttp和Volley优缺点和性能对比
    selenide总结
    docker操作
    python连接oracle数据库
  • 原文地址:https://www.cnblogs.com/webRobot/p/8471652.html
Copyright © 2011-2022 走看看