时间序列lappy中ADF检验的R误差

时间序列lappy中ADF检验的R误差,r,statistics,time-series,R,Statistics,Time Series,我有一个带有时间序列的数据帧,我试图迭代测试每个帧是否是平稳的。R给了我一个奇怪的错误,if(interpol==min(tablep))警告…:缺少需要TRUE/FALSE的值 df <- structure(list(DATE = structure(c(15405, 15406, 15407, 15408, 15409, 15405, 15406, 15407, 15408, 15409, 15405, 15406, 15407, 15408, 15409), class = "

我有一个带有时间序列的数据帧,我试图迭代测试每个帧是否是平稳的。R给了我一个奇怪的错误,
if(interpol==min(tablep))警告…:缺少需要TRUE/FALSE的值

df <- structure(list(DATE = structure(c(15405, 15406, 15407, 15408, 15409, 15405,
  15406, 15407, 15408, 15409, 15405, 15406, 15407, 15408, 15409), class = "Date"),
  ID = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L),
  VALUE = c(5.67, 3.45, 4.56, 20.3, 5.1, 5.67, 3.45, 4.56, 5.28, 5.1, 5.67, 7.8,
  8.79, 9.43, 10.99)), .Names = c("DATE", "ID", "VALUE"), row.names = c(NA, -15L),
  class = "data.frame")
ids <- 1:3

test<-lapply(ids, function(i) {
  if(!any(is.na(df[df$ID==i,3]))) {adf.test(df[df$ID==i, 3])} else {NA} })

Error in if (interpol == min(tablep)) warning("p-value smaller than printed p-value") else warning("p-value greater than printed p-value") : 
  missing value where TRUE/FALSE needed

df您得到一个错误,因为您试图用3个数据点估计4个参数(常数、时间趋势、滞后x水平、滞后x差异)。简单地说,您没有足够的数据来运行此测试

如果
k=0,则至少需要5个数据点;如果
k>0,则需要更多数据点

library(tseries)
adf.test(rnorm(5),k=0)  # works without error

呵呵。。。很奇怪。但这绝对是有帮助的。关于你从哪里读到的/你是如何发现问题的?@OlgaMu:我从调试
adf.test
code(
debug(adf.test)
)开始,注意到其中一个模型估计值是
NA
。然后,我在上查找模型并读取
?adf.test
(细节部分说它测试一阶自回归系数)。然后,我简单地计算了系数和数据(在计算滞后和差异时会丢失2个OB)。编写代码的较短方法是
lappy(split(df$VALUE,df$ID),adf.test)
。它还避免了
ids
可能具有
df$ID
中不存在的值(例如
ids)的潜在问题