我需要检查星期几或一年中的某月对股票 yield 有影响。我决定在R中使用带有“rucm”包的不可观察的组件模型,因为它可以从时间序列中提取季节性特征。就我而言,我想确定是否存在每日和每月的季节性。我的数据集只是每日股票 yield 的时间序列:
structure(list(Date = structure(c(1388966400, 1389139200, 1389225600,
1389312000, 1389571200, 1389657600, 1389744000, 1389830400, 1389916800,
1390176000, 1390262400, 1390348800, 1390435200), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), LogReturn = c(-0.009, 0.016, 0.021,
0.036, 0.049, 0.092, 0.023, -0.05, 0.044, -0.018, 0.001, -0.021,
-0.022)), .Names = c("Date", "LogReturn"), row.names = c(NA,
-13L), class = c("tbl_df", "tbl", "data.frame"))
这是它的样子
我使用的代码:
install.packages(rucm)
library(rucm)
model1<-ucm(formula=LogReturn~0,data=data, level=TRUE,slope=FALSE,season=TRUE,season.length=30)
我随机放置season.length = 30。我以为如果我有每日数据并且季节性是每天,则season.length应该为1,但不接受1。
我的输出看起来像这样
估计方差:
“不规则的差异”“级别的差异”“季节的差异”
如您所见,我没有得到有关一周中的一天或一年中的月份如何影响股票 yield 的大量信息。您能帮我解决这个问题吗?
更新1。我向数据集中添加了一些功能。现在,它显示了每个日期的星期几,并为一周的每一天添加了代理变量。
structure(list(Date = structure(c(1388966400, 1389139200, 1389225600,
1389312000, 1389571200, 1389657600, 1389744000, 1389830400, 1389916800,
1390176000, 1390262400, 1390348800, 1390435200), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), LogReturn = c(-0.009, 0.016, 0.021,
0.036, 0.049, 0.092, 0.023, -0.05, 0.044, -0.018, 0.001, -0.021,
-0.022), Dayoftheweek = c("Monday", "Wednesday", "Thursday",
"Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Monday", "Tuesday", "Wednesday", "Thursday"), proxymonday = c(1,
0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0), proxytuesday = c(0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 1, 0, 0), proxywednesday = c(0, 1, 0, 0,
0, 0, 1, 0, 0, 0, 0, 1, 0), proxythursday = c(0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 0, 0, 1), proxyfriday = c(0, 0, 0, 1, 0, 0, 0,
0, 1, 0, 0, 0, 0)), .Names = c("Date", "LogReturn", "Dayoftheweek",
"proxymonday", "proxytuesday", "proxywednesday", "proxythursday",
"proxyfriday"), row.names = c(NA, -13L), class = c("tbl_df",
"tbl", "data.frame"))
看起来像这个
最佳答案
我没有提到使用RUCM,因为我对未观察到的组件模型还不够熟悉。但是看来您提出的问题可以用另一种方式回答。
在我看来,您有两个独立的问题要关注。第一个是星期几作为自变量,第二个是一年中的月作为自变量。视情况而定,您可能还需要查看星期几*一年中某月的交互作用。因此,让我们分解一下:
首先让我们看一下星期几。您想首先找到每天的平均美元。在这种情况下,您的零假设将是没有日常差异,而替代假设则至少有一天会与其他日子有显着差异。为了看到这一点,我们使用anova
作为dayofweek
的函数:(在此示例中,dat
是您的数据集的名称)
datsum <- anova(lm(LogReturn~dayofweek))
这将产生:
> datsum
Analysis of Variance Table
Response: LogReturn
Df Sum Sq Mean Sq F value Pr(>F)
dayofweek 4 0.0066421 0.0016605 1.266 0.3587
Residuals 8 0.0104932 0.0013116
根据您提供的数据,似乎没有明显的日间影响。但是就像您说的那样,这只是数据的一小部分。
现在,您可以基于月份执行此操作,尽管由于月份的天数不一致,所以您将不得不对其进行调整。但是,您可以通过
anova(lm(LogReturn ~ Month, data = dat))
再次执行相同的操作。现在,使用ARIMA建模,您可以找到季节性。这是time series的教程。
另一种选择是使用double-seasonal time series。
由于您没有提供更多数据,因此我很难在此处进行演示。但是,两个链接的指南都将帮助您构建代码和数据,以执行季节性分析。我提供了
anova
作为入门指南和启动点,供您考虑。关于r - 如何在R中实现不可观察的组件模型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50147748/