精华内容
下载资源
问答
  • 事件研究法的计算步骤 事件研究法的计算步骤 事件研究法的计算步骤
  • 事件研究法笔记 - Stata连享会

    万次阅读 2018-05-31 14:46:49
    事件研究法 (Event Study) 由 Ball& Brown (1968) 以及 Fama et al. (1969) 开创。 其原理是根据研究目的选择某一特定事件,研究事件发生前后样本股票收益率的变化,进而解释特定事件对样本股票价格...

    作者:连玉君 (知乎 | 简书 | 码云)

    点击查看完整推文列表

    Stata连享会   计量专题 || 精品课程 || 推文

    事件研究法 (Event Study) 由 Ball& Brown (1968) 以及 Fama et al. (1969) 开创。
    其原理是根据研究目的选择某一特定事件,研究事件发生前后样本股票收益率的变化,进而解释特定事件对样本股票价格变化与收益率的影响,主要被用于检验事件发生前后价格变化或价格对披露信息的反应程度。

    事件研究法以有效市场假说为基础,即股票价格反映所有已知的公共信息,由于投资者是理性的,投资者对新信息的反应也是理性的。

    因此,在样本股票实际收益中剔除假定某个事件没有发生而估计出来的正常收益 (normal return) 就可以得到异常收益 (abnormal return),异常收益可以衡量股价对事件发生或信息披露异常反应的程度。

    事件研究法原理

    事件研究法资源

    Stata 范例

    Stata 外部命令

    使用这些命令,可以一次性完成基本的 Event Study 估计和检验工作,非常便捷。
    需要事先用 ssc install cmdname, replace 下载最新版。

    • help eventstudy //基本命令
    • help eventstudy2 //更为丰富的选项和检验统计量, PDF说明文档

    专题:回归分析


    🍎 完整阅读:

    Stata:短期事件研究法(Event_Study)教程


    关于我们

    • 「Stata 连享会」 由中山大学连玉君老师团队创办,定期分享实证分析经验, 公众号:StataChina
    • 公众号推文同步发布于 CSDN简书知乎Stata专栏。可在百度中搜索关键词 「Stata连享会」查看往期推文。
    • 点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
    • 欢迎赐稿: 欢迎赐稿。录用稿件达 三篇 以上,即可 免费 获得一期 Stata 现场培训资格。
    • E-mail: StataChina@163.com
    • 往期推文:计量专题 || 精品课程 || 简书推文 || 公众号合集

    点击此处-查看完整推文列表


    连享会计量方法专题……

    展开全文
  • 本代码是自己编写的用于实现事件研究法的stata代码,按照使用最为广泛的一般市场模型编制而成,充分考虑了交易日与日历日的区别及影响,并涵盖个股AR的t检验。
  • 基于事件研究法的我国资本市场SRI认可度测度,徐天艳,刘传哲,作为西方资本市场一种成熟的投资模式,社会责任投资在中国发展发展尚处于起步阶段。为了考察我国资本市场对这一投资模式的认可程
  • 35行代码搞定事件研究法(上)

    万次阅读 2018-07-19 11:34:25
    作者简介:祝小宇,个人公众号:大猫的R语言课堂这期大猫课堂将会教大家如何用35行R代码写出最有效率的事件研究法。 注意,本代码主要使用data.table完成,关于dat...
        
    640?wx_fmt=gif

    作者简介:

    祝小宇个人公众号:大猫的R语言课堂


    这期大猫课堂将会教大家如何用35行R代码写出最有效率的事件研究法

    640?wx_fmt=png

    注意,本代码主要使用data.table完成,关于data.table包的相应知识会在涉及的时候进行讲解。在以后的课堂中,我们会重点介绍data.table这个包。

    640?wx_fmt=png


    1 事件研究法的基本过程

    首先,我们先来回顾一下事件研究法的基本过程:

    640?wx_fmt=jpeg

    根据上图,T日是事件日,事件研究法的目的是计算事件日前后若干日超额收益(CAR)之和,而超额收益的定义为该股当日收益减去模型收益之差。如果我们用C1与C2标记CAR窗口期,用M1与M2标记模型的估计期(C1、C2、M1、M2都为正数,定义见上图),则上图的含义为:

    在 [T - M1, T - M2] 的区间内估计市场模型,并在 [T - C1, T + C2] 的区间内计算超额收益率。

    在这里,我们姑且用最简单的市场模型来估计收益,即:

    r = alpha + beta * (r - rm)

    其中,r 表示个股每日的收益率,rm 表示对应日期市场指数的收益率。


    2 样例数据集

    一切没有栗子的讲解都是耍流氓,现在我们就假设需要对如下数据集运用事件研究法:

    640?wx_fmt=jpeg

    其中,stk.id表示股票代码,date是日期,r表示个股收益率,rm表示市场收益率,event.flg是事件日标识。如果当天不是事件日,event.flg为0,否则为1。(似乎莫名其妙立了flag……)由上图可知,只有在第30行发生了事件(用红框框出)。


    不妨进一步假设C1 = C2 = 1, M1 = 10, M2 = 5。也即我们的CAR窗口期为 [T - 1, T + 1],模型的估计期为[T - 10, T - 5]。当然那么短的模型估计期(5天)是非常不现实的,这里仅为了举例方便这样设定。


    3 举一个详细的栗子

    OK,既然栗子也有了,我们就要正式开工啦。本着从特殊到一般的原则,在这一讲中,我们首先假设现在只有一个事件日。针对这一个事件日,大猫会给出一个叫做 do_car() 的自定义函数计算其对应的超额收益。当以后出现多个事件日时,我们只要对每个事件日都调用一次 do_car() 函数就可以了

    640?wx_fmt=png

    这种“先把任务分解为任务单元,为每个任务单元写一个函数,然后再批量调用函数”的方法,希望大家好好掌握哦!

    640?wx_fmt=png

    既然我们的目标是写一个函数 do_car(),那么其肯定有参数。为了计算超额收益,我们需要以下四个输入变量:1)个股收益向量 r, 2)市场收益向量 rm,3)日期向量,4)事件日发生的序号 n。因此这个 do_car() 大致会长这个样子:

    do_car <- function(n, r, rm, date) {    ...
    }

    那么如何把函数的主体填充进去,从而计算单个事件日对应的超额收益呢?大猫给出以下三个步骤:


    Step I. 先定位事件日,然后根据给定的参数分别截取出模型估计期 [T - 10, T - 5] 以及CAR窗口期 [T - 1, T + 1] 的收益率 r、rm


    Step II. 根据模型估计期的 r 与 rm 数据估计收益率模型的参数 alpha,beta,并计算超额收益率


    Step III. 输出最终结果


    Step I:截取收益率向量

    我们用n来标记事件日的序号。例如在我们的例子中,第30天发生了事件,因而n=30。需要注意的是在我们的例子中 n 是一个标量,下节课中我们会把n拓展为向量,也即引入多个事件日。


    确定了事件日序号之后,我们就可以用他来截取收益率向量了。模型估计期的个股收益向量为 r[n - m2, n - m1],(n - m2表示截取起点,n - m1表示截取的终点),我们将其命名为 r.model。同理,模型估计期对应的市场收益率的向量为 rm[n - m2, n - m1],我们将其命名为 rm.model。类似的,我们可以分别截取出CAR窗口期的收益率向量。代码如下:

    i1 <- n - m1
    i2 <- n - m2
    i3 <- n - c1
    i4 <- n + c2
    r.model <- r[i1:i2]
    rm.model <- rm[i1:i2]
    r.car <- r[i3:i4]
    rm.car <- rm[i3:i4]

    其中,r 表示个股收益,rm 表示市场收益,后缀model表示模型估计期,后缀car表示CAR窗口期。


    Step II:估计模型,计算超额收益率

    得到了r.model, rm.model 这两个变量,我们就可以进行收益模型的估计了。我们使用R内置的多元线性回归函数:

    > model <- lm(r.model ~ I(r.model - rm.model))> coef <- coef(model)
    > ars <- r.car - predict(model, list(r.model = r.car, rm.model = rm.car))

    先来看第一行。其中,lm是回归函数,“~”符号左边的是因变量r.model,右边的是自变量 I(r.model - rm.model),最后得到的回归模型命名为“model”。R默认回归中有常数项,因而在公式中不需要显式表示。另外,函数I()表示要把r.model - rm.model的结果作为一个变量来看待。


    再来看第二行。要知道在R中,线性回归的结果是一个类名为“lm”的对象,这个对象包含了回归结果的系数、p值、残差等等元素。而coef()函数的作用就是提取回归结果的系数。


    最后看第三行。这一行的作用是用估计得到的模型预测CAR窗口期股票的收益率。predict()函数用来预测模型。第一个参数model指出了预测所依据的模型(就是我们上面估计得到的model),第二个参数指定了自变量,其中“r.model = r.car”表示把model中的r.model变量用r.car变量代替,类似的,"rm.model = rm.car"表示把model中的rm.model变量替换成rm.car。最后,我们用股票的实际收益率(r.car)减去由模型计算得到的收益率(predict()函数计算的结果),就能得到股票的超额收益(ars, abnormal returns)。需要注意的是,刚才提到的ars, r.car, r.model等变量都是向量,而不是标量。


    Step III:输出最终结果

    得到了超额收益率向量ars,我们需要确定最终输出的结果应该是什么样子。一般来说,对于每一个事件日(非事件日我们不输出结果),我们需要保留股票代码stk.id、事件日date、该事件日对应的收益率模型系数coef,以及该事件日窗口期间的超额收益。因此最终输出结果应该大致长下面这个样子:

    640?wx_fmt=jpeg

    关于上面这个输出结果,有以下三点需要注意:


    1. 图中每一行都对应一个事件日,非事件日不输出结果。上图中说明6月17日发生了一个事件。


    2. ars是超额收益率向量,因为我们的例子中把超额收益率区间定为 T 日前后各一天,因此 ars 共有三个元素。注意,我们这里没有直接输出加总后的CAR,而是输出超额收益向量ars。这是因为输出超额收益向量便于我们后期进行各种复杂的计算。


    3. coef、ars都是向量


    这一步对应的代码是:

    list(date = date[n], coef = list(coef), ars = list(ars))

    这一行代码指定了我们需要输出的三个变量:事件日、收益率模型系数以及超额收益。其中,coef = list(coef)的含义是把向量coef打包成一个list类型的变量,并命名为coef。date = date[n]的含义是选取date变量的第n个元素(也就是事件日),并命名为date。最外面的list()则把其中的三个元素打包成一个大的list。值得一提的是,我们在这里运用了把向量打包成list的这个小技巧,这一技巧在进行回归计算时非常有用,其作用以及应用场景将会在以后详细讲述。现在只要知道它用来输出结果就可以了。


    将step I ~ III 归纳为函数

    把 step I 至 step III 归纳成函数的话就是:已知个股收益率向量r、市场收益率向量rm、日期向量date,以及事件日的序号n标量),我们就可以用以下函数计算对应事件日的超额收益率向量ars——

    do_car <- function(n, r, rm, date) {    stopifnot(m1 > m2)    if (n - m1 < 0) {        cat("n =", n, "is too small \n")    } else if (n + c2 > length(r)) {        cat("n =", n, "is too large \n")    } else {        i1 <- max(1, n - m1)        i2 <- n - m2        i3 <- n - c1        i4 <- n + c2        r.model <- r[i1:i2]        rm.model <- rm[i1:i2]        r.car <- r[i3:i4]        rm.car <- rm[i3:i4]        model <- lm(r.model ~ I(r.model - rm.model))        coef <- coef(model)        ars <- r.car - predict(model, list(r.model = r.car, rm.model = rm.car))        list(date = date[n], coef = list(coef), ars = list(ars))    }}

    其中,(n - m1 < 0)以及(n + c2 > length(r)) 这两条语句的作用是:如果事件日出现在收益率向量的太前面或者太后面,以至于向前向后追溯无法满足估计模型或者CAR窗口期的要求,那么该事件日将被剔除。


    下期预告

    至此,我们已经学会如何针对单一事件日计算超额收益了。然而现实生活中我们往往要计算多个股票多个事件日的超额收益,这时应该怎么做?小伙伴们不用担心,其实只需要添加几行代码就可以了。具体做法,就请期待下一次的大猫课堂——35行代码搞定事件研究法(下)


    640?wx_fmt=jpeg

    640?wx_fmt=jpeg

    公众号后台回复关键字即可学习

    回复 爬虫            爬虫三大案例实战
    回复 Python       1小时破冰入门
    回复 数据挖掘     R语言入门及数据挖掘
    回复 人工智能     三个月入门人工智能
    回复 数据分析师  数据分析师成长之路 
    回复 机器学习     机器学习的商业应用
    回复 数据科学     数据科学实战
    回复 常用算法     常用数据挖掘算法

    展开全文
  • 35行代码搞定事件研究法(下)

    千次阅读 2018-07-25 11:40:00
    作者简介:祝小宇,个人公众号:大猫的R语言课堂前文推送:35行代码搞定事件研究法(上)Hello亲爱的小伙伴们,上期已经讲到如何对单一事件日计算超额收益,本期将会教大家如...
        

    640?wx_fmt=gif


    作者简介:

    祝小宇个人公众号:大猫的R语言课堂


    前文推送:

    35行代码搞定事件研究法(上)


    Hello亲爱的小伙伴们,上期已经讲到如何对单一事件日计算超额收益,本期将会教大家如何针对多个股票多个事件日计算超额收益,Let's go!


    640?wx_fmt=png

    注意 I,本代码主要使用data.table包完成,关于data.table包的相应知识会在涉及的时候进行讲解。在以后的课堂中,我们会重点介绍data.table这个包。


    注意 II, 本代码还使用了partial()函数,它来自于pryr这个包

    640?wx_fmt=png


    用data.table包处理多个事件日 


    本期课堂的核心代码只有下面5行(应用了data.table包的语法):


     car <- event[, {     ns <- which(event.flg == 1);     lapply(ns, partial(do_car, r = r, rm = rm, date = date)) %>% rbindlist()     },     by = stk.id]


    虽然看起来似乎有些难懂,但如果我们将他分解为三部分,理解起来就容易多了。


    首先,这5行代码可以抽象为如下形式:


     event[,         {...},           by = stk.id]


    其中,event数据集就是我们在上节课讲到的包含有股票代码、日期、股票收益率、市场收益率、事件日标识的数据集(什么你忘了?快去看上节课教程!就是那个黑色的图)。请观察在上面这个抽象后的代码,大家应该可以看出我们对event数据集做了三件事情,具体分别为:


    选取event中所有的行(第一行代码)。此处,我们没有添加任何条件,因此默认选中event的所有行。


    对选中的变量进行操作(第二行代码)。此处,所有的操作都用大括号{}包裹了起来。


    对event按照stk.id进行分组(第三行代码)。加了这一行代码后,第二行代码中所有的操作都会对每个stk.id分组运行一遍(这一步很关键!)。


    讲到这,大家一定会发现,上述代码的关键部分就在大括号{...}所括起来的内容。我们一行一行来看:


    ns <- which(event.flg == 1);


    这一行代码的作用找到每个股票的所有事件日的序号 ns。大家应该还记得在上一讲中我们用 n 来表示单一事件日的序号吧?在这里,which(event.flg == 1)的意思是返回所有event.flg变量等于1的那些行的序号,很自然的,在这里 ns 应该是一个向量


    在上一讲中,我们已经给出了函数 do_car() 用来求单个事件日的超额收益,因此很自然的,我们希望对于事件日向量 ns 中的每个元素,都应用一遍 do_car()这个函数。为了做到这一点,我们运用了lapply() 函数。因此代码就变成了


     lapply(ns, do_car)


    那么,在最初给的那段代码中,partial()函数是用来干什么的呢?在这里我们不妨先回忆一下上一讲中的do_car() 函数有哪些参数:


    do_car <- function(n, r, rm, date) {    ....
    }


    看到了没有?do_car() 要求我们提供n, r, rm, date 四个参数,但是向量 ns 只能提供 n 这一个参数的值,因此我们需要用pryr包中的partial() 函数把剩下的几个变量补充完整(感谢pryr的作者Hadley!如果不是你,我们需要写许多非常冗长的代码)。


    最后,将处理的结果赋值给car,我们的任务就完成了!下图是最终的输出结果(部分):

    640?wx_fmt=jpeg

    其中,stk.id是股票代码,date是事件日(非事件日不输出结果),coef是该事件日对应的收益率模型的系数(alpha、beta),ars是对应的超额收益率。在我们的例子中,我们只计算T日前后各一日的收益,因而ars一共有三个元素。



    完整的代码


    到此为止,求超额收益的计算就完成了,现在大猫给出完整的代码:


    c1 <- 1
    c2 <- 1m1 <- 10m2 <- 5
    # do cardo_car <- function(n, r, rm, date) {    stopifnot(m1 > m2)    if (n - m1 < 0) {        cat("n =", n, "is too small ")    } else if (n + c2 > length(r)) {        cat("n =", n, "is too large ")    } else {        i1 <- max(1, n - m1)        i2 <- n - m2        i3 <- n - c1        i4 <- n + c2        r.model <- r[i1:i2]        rm.model <- rm[i1:i2]        r.car <- r[i3:i4]        rm.car <- rm[i3:i4]        model <- lm(r.model ~ I(r.model - rm.model))        coef <- coef(model)        ars <- r.car - predict(model, list(r.model = r.car, rm.model = rm.car))        list(date = date[n], coef = list(coef), ars = list(ars))    }}
    car <- event[, {    ns <- which(event.flg == 1);    lapply(ns, partial(do_car, r = r, rm = rm, date = date)) %>% rbindlist()    },    by = stk.id]


    最上面三行注释用来描述数据结构,如果去掉的话,所有代码加起来35行都不到,是不是很神奇!



    性能测试


    大猫在这里给出的代码已经经过高度优化,是在尝试众多可行方法后给出的计算速度最快的版本。小伙伴大可不必担心自己的数据太多计算机跑不起来。但是口说无凭,大猫在这里给出用模拟数据得到的测试结果。


    在测试中,大猫设置了一个极端条件:模拟2500个股票(差不多是A股股票数),每个股票拥有1000个交易日的记录(差不多有4年的时间),平均50个交易日出现一个事件(模拟盈利公告这类事件的出现频率)。因此在整个数据集中,一共有250万条观测,5万个左右的事件。一般的事件研究法的数据量极少超过这个量级。


    在这里附上生成模拟数据集的代码:


    n.day <- 1000n.stk <- 2500p <- 0.02stk.id <- rep(1:n.stk, each = n.day)event.flg <- rbinom(n.day * n.stk, 1, p)date <- rep(seq(from = as.Date("2000-01-01"), by = "day", length.out = n.day))event <- data.table(stk.id, date = rep(date, n.stk), r = runif(n.stk * n.day), rm = runif(n.stk * n.day),    event.flg = event.flg)


    我们接着设定 c1 = c2 = 1, m1 = 90, m2 = 5,也即求 [T - 1, T + 1] 区间的超额收益,并用 [T - 90, T - 5] 这个区间估计收益率模型。这也是一个比较常见的设定。


    大猫用这个数据集在自己的surface pro 4 i5版上连续跑了三遍,每一次的耗时分别为:


    79s      81s      82s


    三次平均耗时在80秒左右。可以说,这是一个非常优秀的成绩了。况且我们平时遇到的数据集应该远远小于模拟数据集,小伙伴还担心什么嗯?


    对CAR进行 T 检验


    既然已经算出了超额收益AR,那么下面我们自然希望把AR加起来得到累计超额收益CAR并进行T检验。例如,我们想知道每个事件日对应的累计超额收益,那么代码就为:


    car[,    car := vapply(ars, sum, double(1))]


    其中,car数据集是上面计算得到的所有事件日对应的超额收益率。语句“car :=” 表示在原数据集中新建一个名为 car 的变量,vapply(ars, sum)的含义是把超额收益率向量ars中的元素相加,double(1)指定输出的必须是一个标量(因为对于每个事件日,CAR是唯一的)


    再比如,如果我们想计算逐日的累计超额收益率,那么代码就为:


    car[,    cumcar := lapply(ars, cumsum)]


    cumsum() 是累计求和函数。注意,此时最终得到的cunsum应该是一个和ars长度相等的向量


    如果我们希望对每个股票的CAR进行T检验,那么代码就为:


    ttest <- car[,    .(t.test = sapply(ars, function(x) t.test(x)$statistic),      p.ttest = sapply(ars, function(x) t.test(x)$p.value)),    by = .(stk.id)]


    最终的结果为:

    640?wx_fmt=jpeg

    其中,t.test给出了 t 值,p.ttest 给出了对应的p值。


    其实,还有很多别的后续工作可以扩展,大猫就不一一介绍啦,小伙伴们可以自行实验。最后,如果觉得大猫的R语言课堂有用,请多多支持关注哦!


    640?wx_fmt=jpeg

    640?wx_fmt=jpeg

    公众号后台回复关键字即可学习

    回复 爬虫            爬虫三大案例实战
    回复 Python       1小时破冰入门
    回复 数据挖掘     R语言入门及数据挖掘
    回复 人工智能     三个月入门人工智能
    回复 数据分析师  数据分析师成长之路 
    回复 机器学习     机器学习的商业应用
    回复 数据科学     数据科学实战
    回复 常用算法     常用数据挖掘算法

    展开全文
  • 事件研究法-python-万矿

    千次阅读 2019-07-05 11:22:31
    import pandas as pd from WindPy import * import numpy as np import scipy as sp import matplotlib.pyplot as plt from scipy.optimize import leastsq w.start()
    import pandas as pd
    from WindPy import *
    import numpy as np
    import scipy as sp
    import matplotlib.pyplot as plt
    from scipy.optimize import leastsq
    
    w.start()
    data_df_QTJY=w.wsd("300359.SZ", "close", "2018-12-01", "2019-02-28", "Fill=Previous;PriceAdj=F")
    data_df_CYBZ=w.wsd("399006.SZ", "close", "2018-12-01", "2019-02-28", "Fill=Previous;PriceAdj=F")
    
    data_df_QTJY=pd.DataFrame(data_df_QTJY.Data,columns=data_df_QTJY.Times,index=data_df_QTJY.Fields)
    data_df_QTJY=data_df_QTJY.T
    data_df_CYBZ=pd.DataFrame(data_df_CYBZ.Data,columns=data_df_CYBZ.Times,index=data_df_CYBZ.Fields)
    data_df_CYBZ=data_df_CYBZ.T
    
    data_df_QTJY['return']=np.log(data_df_QTJY['CLOSE']/data_df_QTJY['CLOSE'].shift(1))
    data_df_QTJY['index_return']=np.log(data_df_CYBZ['CLOSE']/data_df_CYBZ['CLOSE'].shift(1))
    data_df_QTJY=data_df_QTJY.dropna()
    
    ##样本数据(Xi,Yi),需要转换成数组(列表)形式
    xi=np.array(data_df_QTJY['index_return'])
    yi=np.array(data_df_QTJY['return'])
    xi
    ##需要拟合的函数func 
    def func(p,x):
        k,b=p
        return k*x+b
     
    ##偏差函数:x,y都是列表:这里的x,y更上面的Xi,Yi中是一一对应的
    def error(p,x,y):
        return func(p,x)-y
     
    #k,b的初始值,可以任意设定,经过几次试验,发现p0的值会影响cost的值:Para[1]
    p0=[0.5,0.03]
     
    #把error函数中除了p0以外的参数打包到args中(使用要求)
    Para=leastsq(error,p0,args=(xi,yi))
    Para
    #读取结果
    k,b=Para[0]
    print("k=",k,"b=",b)
     
    #画样本点
    plt.figure(figsize=(8,6)) ##指定图像比例: 8:6
    plt.scatter(xi,yi,color="green",label="样本数据",linewidth=2) 
     
    #画拟合直线
    x=np.linspace(-0.1,0.1,100) ##在150-190直接画100个连续点
    y=k*x+b ##函数式
    plt.plot(x,y,color="red",label="拟合直线",linewidth=2) 
    plt.legend() #绘制图例
    plt.show()
    def get_ar(k):
        # 计算窗口期 AR
        data_df_QTJY=w.wsd("300359.SZ", "close", "2019-04-01", "2019-04-15", "PriceAdj=F")
        data_df_CYBZ=w.wsd("399006.SZ", "close", "2019-04-01", "2019-04-15", "PriceAdj=F")
        data_df_QTJY=pd.DataFrame(data_df_QTJY.Data,columns=data_df_QTJY.Times,index=data_df_QTJY.Fields)
        data_df_QTJY=data_df_QTJY.T
        data_df_CYBZ=pd.DataFrame(data_df_CYBZ.Data,columns=data_df_CYBZ.Times,index=data_df_CYBZ.Fields)
        data_df_CYBZ=data_df_CYBZ.T
        data_df_QTJY['return']=np.log(data_df_QTJY['CLOSE']/data_df_QTJY['CLOSE'].shift(1))
        data_df_QTJY['index_return']=np.log(data_df_CYBZ['CLOSE']/data_df_CYBZ['CLOSE'].shift(1))
        data_df_QTJY=data_df_QTJY.dropna()
        data_df_QTJY['moni_return']=(data_df_QTJY['index_return']-0.03/365)*k
        data_df_QTJY['ar']=data_df_QTJY['return']-data_df_QTJY['moni_return']
        
        return data_df_QTJY
    
    k=0.9595205659434853
    df=get_ar(k=k)    
    def get_ar(k):
        # 计算窗口期 AR
        data_df_QTJY=w.wsd("300359.SZ", "close", "2019-04-01", "2019-04-15", "PriceAdj=F")
        data_df_CYBZ=w.wsd("399006.SZ", "close", "2019-04-01", "2019-04-15", "PriceAdj=F")
        data_df_QTJY=pd.DataFrame(data_df_QTJY.Data,columns=data_df_QTJY.Times,index=data_df_QTJY.Fields)
        data_df_QTJY=data_df_QTJY.T
        data_df_CYBZ=pd.DataFrame(data_df_CYBZ.Data,columns=data_df_CYBZ.Times,index=data_df_CYBZ.Fields)
        data_df_CYBZ=data_df_CYBZ.T
        data_df_QTJY['return']=np.log(data_df_QTJY['CLOSE']/data_df_QTJY['CLOSE'].shift(1))
        data_df_QTJY['index_return']=np.log(data_df_CYBZ['CLOSE']/data_df_CYBZ['CLOSE'].shift(1))
        data_df_QTJY=data_df_QTJY.dropna()
        data_df_QTJY['moni_return']=(data_df_QTJY['index_return']-0.03/365)*k
        data_df_QTJY['ar']=data_df_QTJY['return']-data_df_QTJY['moni_return']
        
        return data_df_QTJY
    
    k=0.9595205659434853
    df=get_ar(k=k)    
    
    # t检验
    from scipy import stats
    result=stats.ttest_1samp(df['ar'],0)
    car=[0.0986 ,0.0933 ,0.0512 ,0.0344 ,0.1287 ,0.0957 ,0.0837 ,0.1155 ,0.0916]
    print('car显著性检验',stats.ttest_1samp(car,1))
    print('单样本检验结果',result)
    result2=stats.ttest_ind(df['return'],df['moni_return'],equal_var=False)
    print('双样本检验结果',result2)
    result3=stats.levene(df['return'],df['moni_return'])
    print('原假设方差不同',result3)
    x=[1,2,3,4,5,6,7,8,9]
    plt.plot(x,df['return'],color='blue',label='actual return')
    plt.plot(x,df['moni_return'],color='black',label='semulated_return')
    plt.plot(x,np.zeros(9),color='red')
    plt.legend() #绘制图例
    plt.show()
    x=[1,2,3,4,5,6,7,8,9]
    plt.plot(x,df['ar'],color='blue',label='ar')
    car=[0.0986 ,0.0933 ,0.0512 ,0.0344 ,0.1287 ,0.0957 ,0.0837 ,0.1155 ,0.0916]
    plt.plot(x,car,color='black',label='car')
    plt.plot(x,np.zeros(9),color='red')
    plt.legend() #绘制图例
    plt.show()
    
    展开全文
  • 花了3天时间,包括一天的等待(回归过程真的好慢),终于搞清楚了用市场模型针对一个公司多个事件的超额回报率计算。 以下为stata的实现过程(借鉴了普林斯顿大学的教程...
  • 论文研究-用于VIS系统分析、设计、研制的事件驱动.pdf, 可视交互式仿真系统是系统仿真技术直接为非专家们所采用的最有效的手段之一。本文充分利用该系统的性质及特点...
  • 有关如何用stata做事件研究的命令以及详细步骤,还有案例解释 基本上看完这些资料就可以自己做了 事件研究法资料.zip (1.43 MB)
  • 以某地区的8家煤矿企业为研究对象进行实证研究,研究结果表明,该模型不仅可以有效地评价出煤矿突发事件应急能力的等级,而且还可以计算出与正理想的之间差距,为煤矿突发事件应急能力的提升提供客观依据。
  • 通过大量实验证明了公安110报警事件具备可预测性。该预测模型具备适用性特点, 可应用于公安机关实战指挥及政府应急管理部门的预测应用, 并辅助决策支持。该创新建模预测过程称为先重构后建模预测
  • 在阐述未遂事件国内外的研究状况及我国煤炭行业未遂事件研究必要性的基础上,选取太原某煤矿采煤工作为试验对象,记录并分析未遂事件的发生,运用BBS对通过灰色关联对选取的关键行为进行管理。试验运用安全行为指数...
  • Twitter流中无监督事件检测的句子嵌入:英语和法语语料库研究 此回购旨在让研究人员在2个数据集上重现我们的Twitter事件检测结果: (英文推文)和Event2018数据集(法文推文,提供了此数据集的完整描述。) 由于自...
  • 从微博中准确而高效地挖掘出突发事件是近年来的研究热点。通过词频统计、词增长率计算和 TF - PDF 算法抽取突发词集,使用突发词表示文本并结合微博突发事件的描述特征进行文本过滤; 提出一种“绝对聚类”算 ,对...
  • 研究 软件可靠性分析方法有失效模式影响分析、严酷度分析、故障树分析事件树分析、潜在线路分析
  • 为了快速确定不同类型指标下突发环境事件分级问题,从而快速准确地制定突发事件应急预案和调度应急资源,提出一种基于改进模糊综合评价方法的突发环境事件等级评估模型。该模型分别利用熵权和改进模糊层次分析...
  • 为仿真描述有源风网上外源气体涌入运移过程,创新引入...研究结果表明:新方法能够自动截取网络中组分气体流动的微小事件变化,防止因过大的时间步长导致的截断误差;与单纯的时间步长相比,计算精度高,模拟仿真更准确.
  • 利用大系统控制论建立了递阶的重大突发事件处理系统协调控制模型,并采用局部最优和全局最优来实现对系统的协调控制。研究结果显示,递阶的重大突发事件处理系统协调控制模型有利于建立集成、统一、可扩充的应急...
  • 根据济三煤矿163下05工作面回采期间的微震事件、矿压显现程度以及钻屑监测结果,指出了推进速度的变化可以在一定程度上影响工作面周围震动能量的释放过程,当工作面每日推进度为4.8~5.6 m,每日震动次数较少、震动...
  • 基于Leader-follower的处置突发事件队形变换方法研究,熊景,巩青歌,针对武警部队处置突发事件时的队形变换问题,提出了一种基于跟随领航者(Leader–follower)的队形变换方法,该方法引入几何划分,对��
  • 用事故树分析进行定量分析计算,如何准确可靠确定各基本事件的发生概率是保证其结果可靠的关键问题。通过文献研究,总结了目前普遍采用的实验测定、经验取值和数据库统计计算3种方法,并指出各方法的适用范围和...
  • 然后通过编制调查问卷,利用SPSS17.0和探索性因子分析对问卷数据进行处理和分析,建立煤矿险兆事件主动上报意愿影响因素三级指标体系,通过G1赋权确定了各层次指标权重,对影响险兆事件主动上报因素的三级指标进行了...
  • 在走访座谈、实地考察、专家会审、问卷调查等的基础上,结合文献比较分析,分析了我国突发事件应急管理科技支撑的建设现况,为进一步完善健全突发事件应急管理科技支撑体系提供依据和措施。目前,我国突发事件应急管理...
  • vue事件点击穿透解决大

    千次阅读 2019-10-12 19:43:46
    经过一番研究才发现是vue事件点击穿透引起的,而且弹窗一定要在300ms内出现才会引发这个bug,接下来分析具体原因: 一,click与300ms延迟 vue框架内置指令v-on:click有300ms的延迟响应,这是为了判断区分单击和双击...
  • 论文研究-结构可靠性的故障树模糊分析法研究.pdf, 探讨了主观不定性与客观不定性因素对事件的影响,并用模糊数学的理论和方法将两种不定性因素相融合讨论了可靠性理论中...
  • 三聚氰胺的催化动力学光度方法研究,张丽,周夫涛,三聚氰胺是一种化工原料,由于其含氮量高,常被添加到牛乳中,最终因2008年的三鹿奶粉事件而家喻户晓。本文主要的研究对象为水样和牛�
  • 针对当前DDoS防御方法的不足,提出了一种基于...在第二阶段,应用秩和检验自动选取检测特征,根据到重心的距离甄别合法与非法流,并对合法流进行漫游。实验结果表明,该模型能较早发现攻击,检测精度高,响应及时。
  • 最近在研究事件相机的算法, 这方面目前国内研究的人较少,没有较多的参考资料。所以得靠自己慢慢研究。以下是关于Event-Based Visual Flow论文的研究记录 1. 事件相机对像素的处理 在事件相机中,对于每一个像素,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 532
精华内容 212
关键字:

事件研究法