if((位置<;=1)|(位置>;=length(x))中的错误-R-事件研究

if((位置<;=1)|(位置>;=length(x))中的错误-R-事件研究,r,R,我正在尽我最大的努力研究R中的一个简单事件,并从沃顿研究数据服务(WRDS)检索一些数据。我对R并不完全陌生,但我会将我的专业水平描述为中级。因此,问题出在这里。我正在使用,其中一个步骤是使用phys2eventtime(…)函数将物理日期转换为事件时间帧日期。此函数具有多个参数: z:要为其生成事件帧的时间序列数据。以xts对象的形式 事件:它是一个包含两列的数据框:unit和when。unit具有在事件日期测量响应的列名,而when具有事件日期 宽度:宽度对应于事件日期两侧的天数。对于给定

我正在尽我最大的努力研究R中的一个简单事件,并从沃顿研究数据服务(WRDS)检索一些数据。我对R并不完全陌生,但我会将我的专业水平描述为中级。因此,问题出在这里。我正在使用,其中一个步骤是使用
phys2eventtime(…)
函数将物理日期转换为事件时间帧日期。此函数具有多个参数:

  • z:要为其生成事件帧的时间序列数据。以xts对象的形式
  • 事件:它是一个包含两列的数据框:unit和when。unit具有在事件日期测量响应的列名,而when具有事件日期
  • 宽度:宽度对应于事件日期两侧的天数。对于给定的宽度,如果事件窗口中存在任何NA,则结转最后一次观察
该包的作者提供了xts对象(StockPriceReturns)和事件(SplitDates)的示例。如下所示:

> data(StockPriceReturns)
> data(SplitDates)
> head(SplitDates)
            unit       when
5           BHEL 2011-10-03
6  Bharti.Airtel 2009-07-24
8          Cipla 2004-05-11
9     Coal.India 2010-02-16
10      Dr.Reddy 2001-10-10
11     HDFC.Bank 2011-07-14

> head(StockPriceReturns)
    Mahindra.&.Mahindra
2000-04-03          -8.3381609
2000-04-04           0.5923550
2000-04-05           6.8097616
2000-04-06          -0.9448889
2000-04-07           7.6843828
2000-04-10           4.1220462
2000-04-11          -1.9078480
2000-04-12          -8.3286900
2000-04-13          -3.8876847
2000-04-17          -8.2886060  
因此,我以同样的方式构造了数据,一个xts对象(DS_xts)和一个data.frame(cDS),列为“unit”和“when”。它看起来是这样的:

> head(DS_xts)
              61241 
2011-01-03  0.024247
2011-01-04  0.039307
2011-01-05  0.010589
2011-01-06 -0.022172
2011-01-07  0.018057
2011-01-10  0.041488

> head(cDS)
 unit       when
1 11754 2012-01-05
2 10104 2012-01-24
3 61241 2012-01-31
4 13928 2012-02-07
5 14656 2012-02-08
6 60097 2012-02-14
在我看来,这些都是相似的,但它的外观并不能说明全部情况。我很确定我的问题在于如何构造这两个对象。下面是我的R代码:

#install.packages("eventstudies")
library("eventstudies")

DS = read.csv("ReturnData.csv")
cDS = read.csv("EventData.csv")

#Calculate Abnormal Returns
DS$AR = DS$RET - DS$VWRETD

#Clean up and let only necessary columns remain
DS = DS[, c("PERMNO", "DATE", "AR")]
cDS = cDS[, c("PERMNO", "DATE")]

#Generate correct date format according to R's as.Date
for (i in 1:nrow(DS)) {
DS$DATE[i] = format(as.Date(toString(DS$DATE[i]), format = "%Y %m %d"), format = "%Y-%m-%d")
}

for (i in 1:nrow(cDS)) {
  cDS$DATE[i] = format(as.Date(toString(cDS$DATE[i]), format = "%Y %m %d"), format = "%Y-%m-%d")
}

#Rename cDS columns according to phys2eventtime format
colnames(cDS)[1] = "unit"
colnames(cDS)[2] = "when"

#Create list of unique PERMNO's
PERMNO <- unique(DS$PERMNO)

for (i in 1:length(PERMNO)) {
  #Subset based on PERMNO
  DStmp <- DS[DS$PERMNO == PERMNO[i], ]

  #Remove PERMNO column and rename AR to PERMNO
  DStmp <- DStmp[, c("DATE", "AR")]
  colnames(DStmp)[2] = as.character(PERMNO[i])
  dates <- as.Date(DStmp$DATE)
  DStmp <- DStmp[, -c(1)]

  #Create a temporary XTS object
  DStmp_xts <- xts(DStmp, order.by = dates)

  #If first iteration, just create new variable, otherwise merge
  if (i == 1) {
    DS_xts <- DStmp_xts
  } else {
   DS_xts <- merge(DS_xts, DStmp_xts, all = TRUE)
  }
}

#Renaming columns for matching
colnames(DS_xts) <- c(PERMNO)

#Making sure classes are the same
cDS$unit <- as.character(cDS$unit)

eventList <- phys2eventtime(z = DS_xts, events = cDS, width = 10)
我已经查看了原始函数(可以在他们的GitHub上找到,还不能使用两个以上的链接)来找出这个错误,但是我没有办法调试它。我希望有人能帮助我解决这个问题。最后,我还查看了与这个R包相关的另一个(极好的)答案(问题:“用“dimnames”=List of 2”),但这还不足以帮助我解决它(或者我还不能理解它)

如果您想重现我的错误(或解决它!),下面是两个CSV文件的示例



不要将
包装为.Date()
格式
中的
格式
将始终返回字符串/字符,但您可能希望内容保持为
日期
类。请参阅
str(DS)
查看列的类。此外,不需要使用
for
循环-您使用的所有命令都是矢量化的。您只需执行
DS$DATE=as.DATE(DS$DATE,format=“%Y%m%d”)
不要将
包装为.DATE()
格式()
format
将始终返回字符串/字符,但您可能希望事情保持为
Date
类。请参阅
str(DS)
以查看列的类。此外,您的
for
循环是不必要的-您使用的所有命令都是矢量化的。您只需执行
DS$Date=as.Date(DS$Date,format=%Y%m%d”)
> eventList <- phys2eventtime(z = DS_xts, events = cDS, width = 10)
Error in if ((location <= 1) | (location >= length(x))) { : 
  missing value where TRUE/FALSE needed
In addition: Warning message:
In findInterval(when, index(x)) : NAs introduced by coercion