使用Java中的Apache Maths简单回归时间序列

时间:2015-02-19 13:58:04

标签: java date math regression linear-regression

在对时间序列进行简单回归时,我有一个关于日期单位开始的问题。这是我在t = 0和t = 1时开始日期单位回归时的代码。

package main;

import java.util.ArrayList;
import java.util.Arrays;

import org.apache.commons.math3.stat.regression.SimpleRegression;

public class RegressionTest {

    public static void main(String[] args) {

        SimpleRegression simpleRegression = new SimpleRegression();

        ArrayList<Double> timeSeries = new ArrayList<Double>(Arrays.asList(3.0,
                5.0, 1.0, 7.0, 9.0, 2.0, 1.0, 8.0, 11.0));

        for(int i = 0; i < timeSeries.size(); i++) {
            simpleRegression.addData(i, timeSeries.get(i));
        }

        System.out.println("Start date unit at t = 0:");
        System.out.println("Intercept: " + simpleRegression.getIntercept());
        System.out.println("Slope    : " + simpleRegression.getSlope());


        simpleRegression = new SimpleRegression();

        for(int i = 0; i < timeSeries.size(); i++) {
            simpleRegression.addData((i+1), timeSeries.get(i));
        }

        System.out.println("\nStart date unit at t = 1:");
        System.out.println("Intercept: " + simpleRegression.getIntercept());
        System.out.println("Slope    : " + simpleRegression.getSlope());

    }



}

我得到的输出是:

Start date unit at t = 0:
Intercept: 2.8222222222222224
Slope    : 0.6

Start date unit at t = 1:
Intercept: 2.2222222222222223
Slope    : 0.6

你看,拦截是不同的。所以我的问题是:当没有为时间序列指定日期时,正确的启动单位是什么?

感谢您的回答。

2 个答案:

答案 0 :(得分:1)

你刚刚将你的线条向右移动了一个单位(你刚刚将第一个点的x从0改为1)所以你的截距是不同的,斜率是相同的(如果你没有看到则绘制它)

时间序列作为名称sussgest是给定时间的一系列数据,因此它必须有一个时间(add或x的第一个参数)和该时间的函数值(y或addData的第二个参数) )。

您应该知道数据的时间,因此如果它们从0,1或1345454开始。您必须为回归提供一对值(x,y)。

答案 1 :(得分:0)

我不认为回归在这里是正确的。统计学家会说,当观察是独立的时候,回归适用。时间序列的情况并非如此:显然,时间顺序的概念打破了“独立”假设。

我想知道更好的想法是否是离散傅立叶变换。检查信号的频率内容会更有意义。