首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:时间序列的普通最小二乘

Java:时间序列的普通最小二乘
EN

Stack Overflow用户
提问于 2015-02-12 22:32:36
回答 1查看 505关注 0票数 3

我在使用Apache Commons数学库的OLS时遇到了一些问题。我有一个时间序列y,我想用最小二乘趋势线来拟合前26个观测值。这是我的代码:

代码语言:javascript
复制
List<Double> y = new ArrayList<>(Arrays.asList(206.0, 245.0,
                185.0, 169.0, 162.0, 177.0, 207.0, 216.0, 193.0, 230.0, 212.0,
                192.0, 162.0, 189.0, 244.0, 209.0, 207.0, 211.0, 210.0, 173.0,
                194.0, 234.0, 156.0, 206.0, 188.0, 162.0, 172.0, 210.0, 205.0,
                244.0, 218.0, 182.0, 206.0, 211.0, 273.0, 248.0, 262.0, 258.0,
                233.0, 255.0, 303.0, 282.0, 291.0, 280.0, 255.0, 312.0, 296.0,
                307.0, 281.0, 308.0, 280.0, 345.0));

OLSMultipleLinearRegression ols = new OLSMultipleLinearRegression();
        int obs = y.size()/2;

int vars = 1;

        double data[] = new Utils().toArray(y);

        try {
            ols.newSampleData(data, obs, vars); // 3
        }
        catch(IllegalArgumentException e) {
            System.out.print("Can't sample data: ");
            e.printStackTrace();
        }

        double[] coe = null;
        try {
            coe = ols.estimateRegressionParameters(); // 4
        } catch(Exception e) { // 5
            System.out.print("Can't estimate parameters: ");
            e.printStackTrace();
        }

我得到的结果是:

代码语言:javascript
复制
coe[0] = 58.3379729430363 
coe[1] = 0.7075495794353521

但是,结果应该是(参见屏幕截图也一样):

代码语言:javascript
复制
coe[0] = 202.6246154
coe[1] = -0.368205128

有人能帮我解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2017-04-11 08:52:12

更仔细地阅读文档。您调用的方法是将数据数组偶数索引处的值解释为观察值,将奇数索引处的值解释为预测变量值。

http://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math4/stat/regression/OLSMultipleLinearRegression.html#newSampleData-double:A-int-int-

我同意这是非常不直观的,我个人会避免使用这种令人困惑的方法。

看起来您想要做的是将x0:25与一个时间变量拟合,时间从1开始。为此,我将创建一个大小为26的数组,创建一个从i= 0开始的For循环,并为第i个索引赋值(i + 1.0)。在那里,您可以使用SimpleRegression类。http://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math4/stat/regression/SimpleRegression.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28480128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档