我需要检查星期几或一年中的某月对股票 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"))

r - 如何在R中实现不可观察的组件模型?-LMLPHP这是它的样子

我使用的代码:
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"))

看起来像这个r - 如何在R中实现不可观察的组件模型?-LMLPHP

最佳答案

我没有提到使用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/

10-10 22:20