在对时间序列进行简单回归时,我有一个关于日期单位开始的问题。这是我在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
你看,拦截是不同的。所以我的问题是:当没有为时间序列指定日期时,正确的启动单位是什么?
感谢您的回答。
答案 0 :(得分:1)
你刚刚将你的线条向右移动了一个单位(你刚刚将第一个点的x从0改为1)所以你的截距是不同的,斜率是相同的(如果你没有看到则绘制它)
时间序列作为名称sussgest是给定时间的一系列数据,因此它必须有一个时间(add或x的第一个参数)和该时间的函数值(y或addData的第二个参数) )。
您应该知道数据的时间,因此如果它们从0,1或1345454开始。您必须为回归提供一对值(x,y)。
答案 1 :(得分:0)
我不认为回归在这里是正确的。统计学家会说,当观察是独立的时候,回归适用。时间序列的情况并非如此:显然,时间顺序的概念打破了“独立”假设。
我想知道更好的想法是否是离散傅立叶变换。检查信号的频率内容会更有意义。