楼主: silent_strings
27011 25

[问答] R里面的adf.test究竟具体做了哪些步骤? [推广有奖]

  • 3关注
  • 0粉丝

高中生

15%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
998 点
帖子
18
精华
0
在线时间
27 小时
注册时间
2015-2-10
最后登录
2015-3-23

楼主
silent_strings 发表于 2015-2-10 14:00:28 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
最近在用java写一个arima预测的程序,其中第一步就是求时间序列的稳定性,我打算用ADF检验方法来写,但是我目前找到的ADF检验原理都晦涩难懂,我知道R里面的adf.test函数实现了这个功能,但是R源码我看不懂,求助大神给我讲一下adf预测的具体步骤。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:test Est ADF ARIMA预测 ADF检验 具体步骤 稳定性 java 程序

回帖推荐

nuomin 发表于22楼  查看完整内容

(1)用rJava包直接调用R的函数,没必要重写。 (2)计量要学到ARIMA,最快得耗费几个月,不现实。 (3)在ADF检验里你需要看懂的只是t检验。这里的t检验值由lm()函数返回,查概率值(书上写成P值)有特殊的累积概率分布表。 (4)t检验值的概率分布表受lm()函数中的回归式当中的a.常数项,b.趋势项(指时间),组合后出现三种类型。 (5)lm()函数中的回归式是原时间序列差分后的序列对原时间序列滞后一阶的回归,如下 ...

沙发
silent_strings 发表于 2015-2-10 14:01:07
说错了,最后一句是ADF检验,不是预测

藤椅
kds222 发表于 2015-2-10 14:51:45 来自手机
silent_strings 发表于 2015-2-10 14:00
最近在用java写一个arima预测的程序,其中第一步就是求时间序列的稳定性,我打算用ADF检验方法来写,但是我 ...
码农都是相通的…

板凳
silent_strings 发表于 2015-2-10 15:38:02
kds222 发表于 2015-2-10 14:51
码农都是相通的…
什么意思?

报纸
silent_strings 发表于 2015-2-11 11:35:10
坐等大神出现

地板
kds222 发表于 2015-2-12 22:52:59
adf.test <-
function(x, alternative = c("stationary", "explosive"),
         k = trunc((length(x)-1)^(1/3)))
{
    if(NCOL(x) > 1)
        stop("x is not a vector or univariate time series")
    if(any(is.na(x)))
        stop("NAs in x")
    if(k < 0)
        stop("k negative")
    alternative <- match.arg(alternative)
    DNAME <- deparse(substitute(x))
    k <- k+1
    x <- as.vector(x, mode="double")
    y <- diff(x)
    n <- length(y)
    z <- embed(y, k)
    yt <- z[,1]
    xt1 <- x[k:n]
    tt <- k:n
    if(k > 1) {
        yt1 <- z[,2:k]
        res <- lm(yt ~ xt1 + 1 + tt + yt1)
    }
    else
        res <- lm(yt ~ xt1 + 1 + tt)
    res.sum <- summary(res)
    STAT <- res.sum$coefficients[2,1] / res.sum$coefficients[2,2]
    table <- cbind(c(4.38, 4.15, 4.04, 3.99, 3.98, 3.96),
                   c(3.95, 3.80, 3.73, 3.69, 3.68, 3.66),
                   c(3.60, 3.50, 3.45, 3.43, 3.42, 3.41),
                   c(3.24, 3.18, 3.15, 3.13, 3.13, 3.12),
                   c(1.14, 1.19, 1.22, 1.23, 1.24, 1.25),
                   c(0.80, 0.87, 0.90, 0.92, 0.93, 0.94),
                   c(0.50, 0.58, 0.62, 0.64, 0.65, 0.66),
                   c(0.15, 0.24, 0.28, 0.31, 0.32, 0.33))
    table <- -table
    tablen <- dim(table)[2]
    tableT <- c(25, 50, 100, 250, 500, 100000)
    tablep <- c(0.01, 0.025, 0.05, 0.10, 0.90, 0.95, 0.975, 0.99)
    tableipl <- numeric(tablen)
    for(i in (1:tablen))
        tableipl[i] <- approx(tableT, table[, i], n, rule=2)$y
    interpol <- approx(tableipl, tablep, STAT, rule=2)$y
    if(is.na(approx(tableipl, tablep, STAT, rule=1)$y))
        if(interpol == min(tablep))
            warning("p-value smaller than printed p-value")
        else
            warning("p-value greater than printed p-value")
    if(alternative == "stationary")
        PVAL <- interpol
    else if(alternative == "explosive")
        PVAL <- 1 - interpol
    else stop("irregular alternative")
    PARAMETER <- k-1
    METHOD <- "Augmented Dickey-Fuller Test"
    names(STAT) <- "Dickey-Fuller"
    names(PARAMETER) <- "Lag order"
    structure(list(statistic = STAT,
                   parameter = PARAMETER,
                   alternative = alternative,
                   p.value = PVAL,
                   method = METHOD,
                   data.name = DNAME),
            class = "htest")
}
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
胡老 + 5 + 5 + 5 精彩帖子

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

7
silent_strings 发表于 2015-2-13 09:55:22
kds222 发表于 2015-2-12 22:52
adf.test  1)
        stop("x is not a vector or univariate time series")
    if(any(is.na(x)))
多谢大神,但是我看不懂R代码,不知是否可以留个联系方式,想向大神请教一二。

8
kds222 发表于 2015-2-13 11:57:58
用java写ARIMA,码农其实都差不多
花1,2个小时,上面那段R代码怎么都看的差不多了啊
那段代码来自R的包里面

前面一大堆判断输入参数是否合法,否则stop
后面一大堆查表table那部分,再往后面就是打印输出
中间的算法核心其实不长。。。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
胡老 + 5 + 5 + 5 观点有启发

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

9
silent_strings 发表于 2015-2-13 12:03:37
kds222 发表于 2015-2-13 11:57
用java写ARIMA,码农其实都差不多
花1,2个小时,上面那段R代码怎么都看的差不多了啊
那段代码来自R的包里 ...
中间赋给table的那个二维数组是怎么回事呢?里面的数据是哪里来的?

10
kds222 发表于 2015-2-13 12:08:56
silent_strings 发表于 2015-2-13 12:03
中间赋给table的那个二维数组是怎么回事呢?里面的数据是哪里来的?
应该就是一个分布表

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 13:33