python中cov函数 python csv函数

请求帮助:Matlab中cov函数是如何计算的

cov对角线是相应列的方差,非对角线列是相应列的协方差,你是4*4的原始方阵,所以就是4*4的矩阵 !

成都创新互联公司2013年至今,先为花都等服务建站,花都等地企业,进行企业商务咨询服务。为花都企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

matlab 中的cov等的统计函数的用法;假设X={xij}是一个p*n的矩阵,即有p个变元,n次观察,如何求协方差矩

a=[1 2 3;2 5 6]

a =

1     2     3

2     5     6

b=mean(a)%%mean是按列求平均值,从b中的值可以看出

b =

1.5000    3.5000    4.5000

c=mean(a')%%所以要按行求平均值,直接转置求取,最后对c再求转置即可得到p维列向量

c =

2.0000    4.3333

%%%%%%%%%%%%%%%%%%%%%%%%%%

M=rand(4,3)

M =

0.9501    0.8913    0.8214

0.2311    0.7621    0.4447

0.6068    0.4565    0.6154

0.4860    0.0185    0.7919

m=cov(M)

m =

0.0892    0.0330    0.0405

0.0330    0.1505   -0.0186

0.0405   -0.0186    0.0305%%%%%%%%可以看出最后得到的协方差是3*3,由此知cov也是按列计算的,m对角线的元素是每列的方差,其余元素是列与列之间的协方差

n=cov(M')

n =

0.0042   -0.0061   -0.0006   -0.0110

-0.0061    0.0714   -0.0214   -0.0714

-0.0006   -0.0214    0.0080    0.0326

-0.0110   -0.0714    0.0326    0.1517%%转置后计算协方差,n为4*4,那么对角线元素就是行的方差,其余元素就是行与行之间的协方差。

%%%%%%%%%%%%%%%%%

关于cov计算的结果和手算的结果不同,这里的原因是:

matlab在计算相关矩阵时,把每一列的数作为一个随机变量的样本,每一行作为一个这几个随机变量的联合样本,即第i个随机变量取第k行的样本值时,第j个随机变量也取第k行的样本值。利用这个性质,我们就可以用协方差的公式代入来计算协方差矩阵了。

然而,由于矩阵中给出只是这些随机变量的样本,根据概率论的知识我们知道,由于我们不知道这些随机变量的概率分布(或联合概率分布),我们是不可能计算出这些随机变量的期望、方差或是协方差的,而只能计算出它们的一个无偏估计,即样本均值、样本方差与样本协方差。其计算公式如下所示:

Python - 测试覆盖率统计

Python 的测试覆盖率使用 Coverage 模块, 需要先安装:

假设你原来执行单元测试的命令为:

那么需要分析测试覆盖率时,只要将命令改为如下即可:

参数解释:

输出到控制台的简单统计结果:

也可以转化成HTML,会在当前目录生成 covhtml 文件夹,打开html文件即可查看详细的覆盖率情况:

yaml脚本添加如下两行:

在gitlab的 CI/CD - General pipelines settings 配置中,添加 Test coverage parsing 的正则:

运行后,单元测试的 Job 页面即可看到coverage

---EOF---

matlab cov函数是求什么的?怎么用?

是算协方差的,covariance

是以列向量为单位,算出协方差是多少,Cov(X),X为观察结果,数据的矩阵,列向量表示一次得到的观察结果,样本

协方差参考

如何用python实现Markowitz投资组合优化

多股票策略回测时常常遇到问题。

仓位如何分配?

你以为基金经理都是一拍脑袋就等分仓位了吗?

或者玩点玄乎的斐波拉契数列?

OMG,谁说的黄金比例,让我看到你的脑袋(不削才怪)!!

其实,这个问题,好多好多年前马科维茨(Markowitz)我喜爱的小马哥就给出答案——投资组合理论。

根据这个理论,我们可以对多资产的组合配置进行三方面的优化。

1.找到有效前沿。在既定的收益率下使组合的方差最小。

2.找到sharpe最优的组合(收益-风险均衡点)

3.找到风险最小的组合

跟着我,一步两步,轻松实现。

该理论基于用均值和方差来表述组合的优劣的前提。将选取几只股票,用蒙特卡洛模拟初步探究组合的有效前沿。

通过最大Sharpe和最小方差两种优化来找到最优的资产组合配置权重参数。

最后,刻画出可能的分布,两种最优以及组合的有效前沿。

注:

文中的数据API来自量化平台聚宽,在此表示感谢。

原文见【组合管理】——投资组合理论(有效前沿)(包含正态检验部分)

0.导入需要的包

import pandas as pd

import numpy as np

import statsmodels.api as sm #统计运算

import scipy.stats as scs #科学计算

import matplotlib.pyplot as plt #绘图

1.选取几只感兴趣的股票

000413 东旭光电,000063 中兴通讯,002007 华兰生物,000001 平安银行,000002 万科A

并比较一下数据(2015-01-01至2015-12-31)

In[1]:

stock_set = ['000413.XSHE','000063.XSHE','002007.XSHE','000001.XSHE','000002.XSHE']

noa = len(stock_set)

df = get_price(stock_set, start_date = '2015-01-01', end_date ='2015-12-31', 'daily', ['close'])

data = df['close']

#规范化后时序数据

(data/data.ix[0]*100).plot(figsize = (8,5))

Out[1]:

2.计算不同证券的均值、协方差

每年252个交易日,用每日收益得到年化收益。计算投资资产的协方差是构建资产组合过程的核心部分。运用pandas内置方法生产协方差矩阵。

In [2]:

returns = np.log(data / data.shift(1))

returns.mean()*252

Out[2]:

000413.XSHE 0.184516

000063.XSHE 0.176790

002007.XSHE 0.309077

000001.XSHE -0.102059

000002.XSHE 0.547441

In [3]:

returns.cov()*252

Out[3]:

3.给不同资产随机分配初始权重

由于A股不允许建立空头头寸,所有的权重系数均在0-1之间

In [4]:

weights = np.random.random(noa)

weights /= np.sum(weights)

weights

Out[4]:

array([ 0.37505798, 0.21652754, 0.31590981, 0.06087709, 0.03162758])

4.计算预期组合年化收益、组合方差和组合标准差

In [5]:

np.sum(returns.mean()*weights)*252

Out[5]:

0.21622558669017816

In [6]:

np.dot(weights.T, np.dot(returns.cov()*252,weights))

Out[6]:

0.23595133640121463

In [7]:

np.sqrt(np.dot(weights.T, np.dot(returns.cov()* 252,weights)))

Out[7]:

0.4857482232609962

5.用蒙特卡洛模拟产生大量随机组合

进行到此,我们最想知道的是给定的一个股票池(证券组合)如何找到风险和收益平衡的位置。

下面通过一次蒙特卡洛模拟,产生大量随机的权重向量,并记录随机组合的预期收益和方差。

In [8]:

port_returns = []

port_variance = []

for p in range(4000):

weights = np.random.random(noa)

weights /=np.sum(weights)

port_returns.append(np.sum(returns.mean()*252*weights))

port_variance.append(np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252, weights))))

port_returns = np.array(port_returns)

port_variance = np.array(port_variance)

#无风险利率设定为4%

risk_free = 0.04

plt.figure(figsize = (8,4))

plt.scatter(port_variance, port_returns, c=(port_returns-risk_free)/port_variance, marker = 'o')

plt.grid(True)

plt.xlabel('excepted volatility')

plt.ylabel('expected return')

plt.colorbar(label = 'Sharpe ratio')

Out[8]:

6.投资组合优化1——sharpe最大

建立statistics函数来记录重要的投资组合统计数据(收益,方差和夏普比)

通过对约束最优问题的求解,得到最优解。其中约束是权重总和为1。

In [9]:

def statistics(weights):

weights = np.array(weights)

port_returns = np.sum(returns.mean()*weights)*252

port_variance = np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252,weights)))

return np.array([port_returns, port_variance, port_returns/port_variance])

#最优化投资组合的推导是一个约束最优化问题

import scipy.optimize as sco

#最小化夏普指数的负值

def min_sharpe(weights):

return -statistics(weights)[2]

#约束是所有参数(权重)的总和为1。这可以用minimize函数的约定表达如下

cons = ({'type':'eq', 'fun':lambda x: np.sum(x)-1})

#我们还将参数值(权重)限制在0和1之间。这些值以多个元组组成的一个元组形式提供给最小化函数

bnds = tuple((0,1) for x in range(noa))

#优化函数调用中忽略的唯一输入是起始参数列表(对权重的初始猜测)。我们简单的使用平均分布。

opts = sco.minimize(min_sharpe, noa*[1./noa,], method = 'SLSQP', bounds = bnds, constraints = cons)

opts

Out[9]:

status: 0

success: True

njev: 4

nfev: 28

fun: -1.1623048291871221

x: array([ -3.60840218e-16, 2.24626781e-16, 1.63619563e-01, -2.27085639e-16, 8.36380437e-01])

message: 'Optimization terminated successfully.'

jac: array([ 1.81575805e-01, 5.40387481e-01, 8.18073750e-05, 1.03137662e+00, -1.60038471e-05, 0.00000000e+00])

nit: 4

得到的最优组合权重向量为:

In [10]:

opts['x'].round(3)

Out[10]:

array([-0. , 0. , 0.164, -0. , 0.836])

sharpe最大的组合3个统计数据分别为:

In [11]:

#预期收益率、预期波动率、最优夏普指数

statistics(opts['x']).round(3)

Out[11]:

array([ 0.508, 0.437, 1.162])

7.投资组合优化2——方差最小

接下来,我们通过方差最小来选出最优投资组合。

In [12]:

#但是我们定义一个函数对 方差进行最小化

def min_variance(weights):

return statistics(weights)[1]

optv = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)

optv

Out[12]:

status: 0

success: True

njev: 7

nfev: 50

fun: 0.38542969450547221

x: array([ 1.14787640e-01, 3.28089742e-17, 2.09584008e-01, 3.53487044e-01, 3.22141307e-01])

message: 'Optimization terminated successfully.'

jac: array([ 0.3851725 , 0.43591119, 0.3861807 , 0.3849672 , 0.38553924, 0. ])

nit: 7

方差最小的最优组合权重向量及组合的统计数据分别为:

In [13]:

optv['x'].round(3)

Out[13]:

array([ 0.115, 0. , 0.21 , 0.353, 0.322])

In [14]:

#得到的预期收益率、波动率和夏普指数

statistics(optv['x']).round(3)

Out[14]:

array([ 0.226, 0.385, 0.587])

8.组合的有效前沿

有效前沿有既定的目标收益率下方差最小的投资组合构成。

在最优化时采用两个约束,1.给定目标收益率,2.投资组合权重和为1。

In [15]:

def min_variance(weights):

return statistics(weights)[1]

#在不同目标收益率水平(target_returns)循环时,最小化的一个约束条件会变化。

target_returns = np.linspace(0.0,0.5,50)

target_variance = []

for tar in target_returns:

cons = ({'type':'eq','fun':lambda x:statistics(x)[0]-tar},{'type':'eq','fun':lambda x:np.sum(x)-1})

res = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)

target_variance.append(res['fun'])

target_variance = np.array(target_variance)

下面是最优化结果的展示。

叉号:构成的曲线是有效前沿(目标收益率下最优的投资组合)

红星:sharpe最大的投资组合

黄星:方差最小的投资组合

In [16]:

plt.figure(figsize = (8,4))

#圆圈:蒙特卡洛随机产生的组合分布

plt.scatter(port_variance, port_returns, c = port_returns/port_variance,marker = 'o')

#叉号:有效前沿

plt.scatter(target_variance,target_returns, c = target_returns/target_variance, marker = 'x')

#红星:标记最高sharpe组合

plt.plot(statistics(opts['x'])[1], statistics(opts['x'])[0], 'r*', markersize = 15.0)

#黄星:标记最小方差组合

plt.plot(statistics(optv['x'])[1], statistics(optv['x'])[0], 'y*', markersize = 15.0)

plt.grid(True)

plt.xlabel('expected volatility')

plt.ylabel('expected return')

plt.colorbar(label = 'Sharpe ratio')

Out[16]:

相关函数的协方差的性质

协方差的性质:

1、Cov(X,Y)=Cov(Y,X);

2、Cov(aX,bY)=abCov(X,Y),(a,b是常数);

3、Cov(X1+X2,Y)=Cov(X1,Y)+Cov(X2,Y)。

由协方差定义,可以看出Cov(X,X)=D(X),Cov(Y,Y)=D(Y)。

协方差函数定义为:

若X(t)=Y(t)+i*Z(t),Y,Z为实过程,则称X(t)为复随机过程,相关函数定义为:

扩展资料

协方差反映了两个变量之间的相关程度:

协方差是两个变量与自身期望做差再相乘,然后对乘积取期望。也就是说,当其中一个变量的取值大于自身期望,另一个变量的取值也大于自身期望时,即两个变量的变化趋势相同,此时,两个变量之间的协方差取正值。

反之,即其中一个变量大于自身期望时,另外一个变量小于自身期望,那么这两个变量之间的协方差取负值。

当x与y变化趋势一致时,两个变量与自身期望之差同为正或同为负,其乘积必然为正,所以其协方差为正;反之,其协方差为负。所以协方差的正负性反映了两个变量的变化趋势是否一致。

再者,当x和y在某些时刻变化一致,某些时刻变化不一致时,在第一个点,x与y虽然变化,但是y的变化幅度远不及x变化幅度大,所以其乘积必然较小。

在第二个点,x与y变化一致且变化幅度都很大,因此其乘积必然较大,在第三个点,x与y变化相反,其乘积为负值,这类点将使其协方差变小,因此,我们可以认为协方差绝对值大小反映了两个变量变化的一致程度。因此,两个变量相关系数的定义为协方差与变量标准差乘积之比。

参考资料来源:百度百科-协方差

本文名称:python中cov函数 python csv函数
转载来于:https://www.cdcxhl.com/article22/docdgjc.html

成都网站建设公司_创新互联,为您提供营销型网站建设服务器托管网站营销移动网站建设动态网站全网营销推广

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

h5响应式网站建设