正确的方法将季度观察值指定为plm包中的时间索引

时间:2018-02-07 14:45:24

标签: r plm

我正在尝试将存储在data.table中的季度数据转换为面板data.frame,以便为进一步分析做好准备。但是,当使用季度日期作为时间维度时,显然存在问题。 我可以将它们转换为日期,数字或字符,但它不会被is.pconsecutive()识别为季度时间序列,这会阻止我使用某些函数。

library(zoo)
library(data.table)
dt <- structure(list(Global.Company.Key = c(1380L, 1380L, 1380L, 1380L, 
1380L, 1380L, 1380L, 1380L), Calendar.Data.Year.and.Quarter = structure(c(2000, 
2000.25, 2000.5, 2000.75, 2001, 2001.25, 2001.5, 2001.75), class = "yearqtr"), 
    Calendar.Year.Quarter.Integer = c(10957L, 11048L, 11139L, 
    11231L, 11323L, 11413L, 11504L, 11596L), Year.Date = structure(c(10957, 
    11048, 11139, 11231, 11323, 11413, 11504, 11596), class = "Date")), .Names = c("Global.Company.Key", 
"Calendar.Data.Year.and.Quarter", "Calendar.Year.Quarter.Integer", 
"Year.Date"), row.names = c(NA, -8L), class = c("data.table", 
"data.frame"))
# defined the date index as integer
pdt <- pdata.frame(dt, index = c("Global.Company.Key", "Calendar.Year.Quarter.Integer"))
is.pconsecutive(pdt)
 1380 
 FALSE 

显然,通过检查数据点之间的距离是否规则间隔和1来分析时间维度。从手册:&#34;为了评估连续性,时间维度被解释为数字,并且测试数据是规则间隔的序列,每个个体的时间段之间的距离为1(对于每个个体的时间维度)可以解释为序列t,t + 1,t + 2,...其中t是整数)。&#34; 那么转换年度季度时间序列的最佳和最强大的方法是什么?

2 个答案:

答案 0 :(得分:2)

pdata.frame不知道季度数据,也不知道zoo提供的设施包。用作索引的变量被强制转换为因子变量。

通过分析is.pconsecutive的作用:在将因子首先强制转换为字符然后转换为数字之后,您需要一个时间变量作为索引,这是一个“有意义的”整数系列(这就是is.pconsecutive一样)。

对于您的示例,您需要一个为此提供常规序列的索引: as.numeric(as.character(index(pdt)[[2]]))

对于你问题中的数据,你得到:

[1] 10957 11048 11139 11231 11323 11413 11504 11596,未评估为连续。

对于答案中的数据,您可以获得:

[1] 1 2 3 4 5 6 7 8,被评估为连续。

答案 1 :(得分:0)

我想出了一个问题的解决方案,这个问题就足够了,只适用于这个特定的数据集,因为如果涵盖不同的时间范围,它需要进行调整。 我基本上相对于数据集中的第一个季度转换所有季度,然后只计算每个季度的整数并将其用作时间索引。

<a-entity id="main-camera-wrapper" position="0 0 0" rotation="0 30 0">
  <a-camera id="main-camera" visible="true" wasd-controls="enabled: false; easing: 10; acceleration: 75; fly: false;" cursor="rayOrigin: mouse;" raycaster="objects: .clickable" >
    <a-box logo="normal: img/button_meet_the_team.png; hover: img/button_meet_the_team_hover.png;" position="-4.5 -2.2 -3" rotation="0 0 0" scale="0.1 0.1 0.1" color="#FFFFFF" opacity="1" class="clickable">
        <a-image src="img/button_meet_the_team.png" scale="15 5 10"></a-image>
    </a-box>
    <a-box mute-sound position="4.8 -2.2 -3" rotation="0 0 0" scale="0.1 0.1 0.1" color="#FFFFFF" opacity="1" class="clickable">
        <a-image src="img/sound-on.png" scale="5 5 5"></a-image>
    </a-box>
    <a-box id="title" position="-1.5 2.2 -3" color="#FFFFFF" opacity="0">
        <a-text position="0.015 -0.015 0" value="Front Door" width="10.8" color="#000000" opacity="0.3" font="font/Eurosti.fnt" fontImage="font/Eurosti.png"></a-text>
        <a-text position="0 0 0" value="Front Door" width="10.8" color="#FFFFFF" font="font/Eurosti.fnt" fontImage="font/Eurosti.png"></a-text>
    </a-box>
  </a-camera>
</a-entity>

这是一种解决方法,但我认为并非如此糟糕。