精华内容
下载资源
问答
  • MATLAB源码集锦-离散灰色预测模型和AR预测模型的组合预测
  • 针对LOS/NLOS混合条件下对机动目标的鲁棒跟踪问题,提出一种基于AR预测模型的交互式多模型(Interacting Multiple Model,IMM)跟踪算法(ARIMM)。该算法利用AR预测模型对运动状态建模,针对LOS与NLOS条件下观测...
  • 从对噪声信号的预测入手建立AR模型,以该模型对电场噪声做前向预测的误差作为检验统计量,对该统计量做滑动功率谱,通过与计算的浮动阈值比较来判断目标是否存在。仿真结果表明:将该方法用于船舶轴频电场信号的检测能够...
  • MATLAB源码集锦-基于AR预测模型的未来油价预测代码
  • 离散灰色预测模型和AR预测模型的组合预测matlab代码.zip
  • 基于AR预测模型的未来油价预测matlab代码.zip
  • 对时间序列线性ARIMA模型的建模和预测方法进行了总结,根据其特征提出了采用稀疏数AR模型代替ARIMA模型作为通用线性预测模型,并给出了模型搜索算法,使得时间序列线性预测模型的建模过程无需人的干预而能通过程序自动...
  • 时间序列分析(Time-Series Analysis)是指将原来的销售分解为四部分来看——趋势、周期、时期和不稳定因素, 然后综合这些因素, 提出销售预测。强调的是通过对一个区域进行一定时间段内的连续遥感观测,提取图像有关...
  • 基于AR预测模型,预测油价的变化,自带数据,结果较好。
  • AR自回归模型matlab预测程序

    热门讨论 2014-07-11 15:42:31
    AR自回归模型,采用matlab预测程序,差分标准化数据后进行AR模型使用判定,之后定AR阶数,做预测处理
  • ar模型代码实现Matlab

    2017-12-14 16:44:05
    构建ar模型,分析自相关和偏相关系数,并进行数据拟合
  • MATLAB编写的AR模型预测数据

    热门讨论 2012-02-15 16:54:22
    MATLAB编写的AR模型预测数据,此方法常用语电力系统中预测短期负荷数据。
  • ar_ar预测_AR模型_源码

    2021-10-02 15:45:42
    能实现基本的AR预测功能,后面的说明就是为了凑字数了
  • AIC经典算法,可以运行, 仅限程序
  • 时间序列预测(二)—— AR模型

    万次阅读 2019-05-20 15:22:15
    时间序列预测(二)—— AR模型 文章链接 (一)数据预处理 (二)AR模型(自回归模型) (三)Xgboost模型 (四)LSTM模型 (五)Prophet模型(自回归模型模型原理   AR(auto-regressive)模型,亦即是自...

    时间序列预测(二)—— AR模型

    欢迎大家来我的个人博客网站观看原文:https://xkw168.github.io/2019/05/20/时间序列预测-二-AR模型.html

    文章链接

    (一)数据预处理

    (二)AR模型(自回归模型)

    (三)Xgboost模型

    (四)LSTM模型

    (五)Prophet模型(自回归模型)


    模型原理

      AR(auto-regressive)模型,亦即是自回归模型,是时间序列分析模型中最简单的两个模型其中之一(另一个是MA/Moving Average/滑动平均模型)。其原理是利用观测点前若干时刻的变量的线性组合来描述观测点后若干时刻变量的值,属于线性回归模型。AR§模型认为,任意时刻的观测值 x t x_t xt取决于前面p个时刻的观测值加上一个误差,见下式:
    x t = ϕ 0 + ϕ 1 x t − 1 + ϕ 2 x t − 2 + ⋯ + ϕ p x t − p + ε t x_t = \phi_0 + \phi_1x_{t-1} + \phi_2x_{t-2} + \dots + \phi_px_{t-p} + \varepsilon_t xt=ϕ0+ϕ1xt1+ϕ2xt2++ϕpxtp+εt
    ε t \varepsilon_t εt是均值为0,方差为 σ 2 \sigma^2 σ2的白噪声序列。


    模型安装

    pip install tensorflow


    模型实现

      这里使用的是TensorFlow里面的Timeseries模块实现AR模型

    def now():
        return datetime.now().strftime("%m_%d_%H_%M_%s")
    
    
    def parse_result_tf(tf_data):
        """
        parse the result of model output in tensorflow
        :param tf_data: the output of tensorflow
        :return: data in DataFrame format
        """
        return pd.DataFrame.from_dict({"ds": tf_data["times"].reshape(-1), "y": tf_data["mean"].reshape(-1)})
    
    
    def generate_time_series(
            start_date=datetime(2006, 1, 1),
            cnt=4018, delta=timedelta(days=1), timestamp=False
    ):
        """
        generate a time series/index
        :param start_date: start date
        :param cnt: date count. If =cnt are specified, delta must not be; one is required
        :param delta: time delta, default is one day.
        :param timestamp: output timestamp or format string
        :return: list of time string or timestamp
        """
    
        def per_delta():
            curr = start_date
            while curr < end_date:
                yield curr
                curr += delta
    
        end_date = start_date + delta * cnt
    
        time_series = []
        if timestamp:
            for t in per_delta():
                time_series.append(t.timestamp())
        else:
            for t in per_delta():
                time_series.append(t)
            # print(t.strftime("%Y-%m-%d"))
        return time_series
    
    
    def AR_predict_tf(train_data, evaluation_data, forecast_cnt=365, freq="D", model_dir=""):
        """
        predict time series with auto-regressive model in tensorflow
        :param train_data: data use to train the model
        :param evaluation_data: data use to evaluate the model
        :param forecast_cnt: how many point needed to be predicted
        :param freq: the interval between time index
        :param model_dir: directory of pre-trained model(checkpoint, params)
        :return:
        """
        model_directory = "./model/AR_%s" % now()
        params = {
            # periodicities of the input data, in the same units as the time feature.
            # Note this can be a single value or a list of values for multiple periodicities.
            "periodicities": 52,
            # Number of past time steps of data to look at when doing the regression
            "input_window_size": 12,
            # Number of future time steps to predict. Note that setting it to > 1 empirically seems to give a better fit
            "output_window_size": 5,
            # The dimensionality of the time series (one for univariate, more than one for multivariate)
            "num_features": 1,
            # how many steps we train the model
            "global_steps": 3000
        }
        # if there is a pre-trained model, use parameters from it
        if model_dir:
            model_directory = model_dir
            params = read_model_param(model_dir + "/params.txt")
    
        # create time index for model training(use int)
        time_int = range(len(train_data) + len(evaluation_data))
    
        data_train = {
            tf.contrib.timeseries.TrainEvalFeatures.TIMES: time_int[:len(train_data)],
            tf.contrib.timeseries.TrainEvalFeatures.VALUES: train_data["y"],
        }
    
        data_eval = {
            tf.contrib.timeseries.TrainEvalFeatures.TIMES: time_int[len(train_data):],
            tf.contrib.timeseries.TrainEvalFeatures.VALUES: evaluation_data["y"],
        }
    
        reader_train = NumpyReader(data_train)
        reader_eval = NumpyReader(data_eval)
    
        """
        define in tensorflow/contrib/timeseries/python/timeseries/input_pipeline.py
        Note window_size must equal to input_window_size + output_window_size
        """
        train_input_fn = tf.contrib.timeseries.RandomWindowInputFn(
            reader_train, batch_size=20, window_size=params["input_window_size"] + params["output_window_size"]
        )
    
        """
        define in tensorflow.contrib.timeseries.python.timeseries.estimators
        periodicities: periodicities of the input data, in the same units as the time feature. 
                       Note this can be a single value or a list of values for multiple periodicities
        num_features: The dimensionality of the time series (one for univariate, more than one for multivariate
        website: https://www.tensorflow.org/api_docs/python/tf/contrib/timeseries/ARRegressor
        """
        estimator_ar = tf.contrib.timeseries.ARRegressor(
            periodicities=params["periodicities"],
            input_window_size=params["input_window_size"],
            output_window_size=params["output_window_size"],
            num_features=params["num_features"],
            model_dir=model_directory,
            loss=tf.contrib.timeseries.ARModel.NORMAL_LIKELIHOOD_LOSS
        )
    
        # only train the model when there is no pre-trained model
        if not model_dir:
            estimator_ar.train(input_fn=train_input_fn, steps=params["global_steps"])
    
        evaluation_input_fn = tf.contrib.timeseries.WholeDatasetInputFn(reader_eval)
        evaluation = estimator_ar.evaluate(input_fn=evaluation_input_fn, steps=1)
        # Predict starting after the evaluation
        (predictions,) = tuple(estimator_ar.predict(
            input_fn=tf.contrib.timeseries.predict_continuation_input_fn(
                evaluation, steps=forecast_cnt)))
    
        save_model_param(model_directory, params)
        if "loss" in evaluation.keys():
            # mean loss per mini-batch
            print("loss:%.5f" % evaluation["loss"])
            f = open(model_directory + "/%s" % evaluation["loss"], "w")
            f.close()
            model_log(
                evaluation["loss"],
                average_loss=-1 if "average_loss" not in evaluation.keys() else evaluation["average_loss"],
                content=model_dir
            )
    
        evaluation = parse_result_tf(evaluation)
        predictions = parse_result_tf(predictions)
        # here we should add an offset which is related to window size due to the inherent attribute of AR
        first_date = evaluation_data["ds"].tolist()[0] + \
                     delta_dict[freq] * (params["input_window_size"] + params["output_window_size"])
        evaluation["ds"] = generate_time_series(first_date, cnt=len(evaluation), delta=delta_dict[freq])
        latest_date = evaluation["ds"].tolist()[-1]
        predictions["ds"] = generate_time_series(latest_date, cnt=len(predictions), delta=delta_dict[freq])
    
        return evaluation, predictions
    

    关键参数

    • periodicities:数据的周期性,这个周期可以是一个列表(数据拥有多个周期);
    • input_window_size:输入的窗口大小,亦即是做回归分析的时候一次性观察多少个过去观测值;
    • output_window_size:输出窗口的大小,亦即是一次预测多少个未来数据;
    • num_features:时间序列的维度,亦即是一个时间点对应的观察值数量,同时分析多少个时间序列,这个值就为多少;
    • model_dir:预训练模型保存的位置(可以不指定);
    • loss:损失函数;
    • steps:模型的训练迭代次数,这里设置为3000次。
    展开全文
  • AR模型,采用PYTHON预测股票开盘价数据。
  • 选择合适的遗忘因子,对一阶AR模型用LMS算法进行预测
  • Autoregression / AR,就是用前期数据来预测后期数据的回归模型,所以叫做自回归模型。 它的逻辑简单,但对时间序列问题能够做出相当准确的预测。 1)自回归函数 y^t=b0+b1yt−1+...+bnyt−n,其中n<t y\hat{}_t =...

    Autoregression / AR,就是用前期数据来预测后期数据的回归模型,所以叫做自回归模型。

    它的逻辑简单,但对时间序列问题能够做出相当准确的预测。

    1)自回归函数

    y ^ t = b 0 + b 1 y t − 1 + . . . + b n y t − n , 其 中 n < t y\hat{}_t = b_0 + b_1y_{t-1} + ... + b_ny_{t-n} , 其中n<t y^t=b0+b1yt1+...+bnytn,n<t
    只有在数据平稳/若平稳的基础上,才能进行实现序列分析

    正式的说,如果一个时间序列 x t x_t xt 的一阶矩和二阶矩(即均值和方差)具有时间不变性,则称它为弱平稳的。弱平稳性是很重要的,因为它为预测提供了基础框架。
    ——《金融数据分析导论:基于R语言》2.1 平稳性

    2)上例子
    1. 首先取数&画图
    import pandas as pd
    import matplotlib.pyplot as plt
    
    df = pd.read_csv('https://raw.githubusercontent.com/jbrownlee/Datasets/master/daily-min-temperatures.csv',
    				 index_col=0, parse_dates=True)
    print(df.head())
    df.plot()
    plt.show()
    
    # 结果如下
                Temp
    Date            
    1981-01-01  20.7
    1981-01-02  17.9
    1981-01-03  18.8
    1981-01-04  14.6
    1981-01-05  15.8
    
    

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200408195712847.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h0dWh4Zg==,size_16,color_FFFFFF,t_70从上图可知温度序列是弱平稳的(weakly stationary);但是肉眼看不精确是不是平稳的,此时ADF Test/ Augmented Dickey-Fuller Test就排上用场了,其原假设H0:存在单位根/UNIT ROOT(即数据不平稳)

    from statsmodels.tsa.stattools import adfuller
    a = df.Temp
    print(adfuller(a,    # 下述参数均为默认值
    				maxlag=None, 
    				regression='c', 
    				autolag='AIC',   # 自动在[0, 1,...,maxlag]中间选择最优lag数的方法;
    				store=False, 
    				regresults=False)
    				)
    
    # 结果如下
    (-4.444804924611687,   #  AIC标准下得到的统计值,用于和下边 1%,5%,和10%临界值比较。但更方便的是直接用下边的p值
     0.00024708263003611164,   #  AIC标准下的p值,即原假设成立的概率
     20,     # AIC标准下的lags
     3629,   # nobs: 本次检测用到的观测值个数。ADF TEST中参数maxlag即由它决定,公式是 maxlag=12*(nobs/100)^{1/4},此处即29.45
    {'1%': -3.4321532327220154,   # 1%标准下的临界值
    '5%': -2.862336767636517, 
    '10%': -2.56719413172842}, 
    16642.822304301197)
    

    由p值可以看出,原假设成立的概率极底,我们应该拒绝原假设。即数据平稳。

    adfuller函数官方文档备注:
    Augmented Dickey-Fuller的原假设是存在单位根,备择假设是不存在单位根。如果p-value大于临界值,那么我们就不能拒绝有一个单位根存在。

    p-value是通过MacKinnon 1994年的回归曲面近似得到的,但使用的是更新的2010年表

    1. 快速查看数据是否适合AR模型
    from pandas.plotting import lag_plot
    lag_plot(df)   # 默认lag=1
    plt.show()
    # 结果如图所示:
    

    lag plot如上图所示, y t + 1 y_{t+1} yt+1 y t y_t yt明显相关。当然我们能通过计算,得到相关系数是0.77和显著性水平0。

    from scipy.stats.stats import pearsonr
    
    a = df.Temp
    b = df.Temp.shift(1)
    
    print(pearsonr(a[1:], b[1:]))
    
    # 结果如下
    (0.7748702165384458, 0.0)
    
    1. 上边是很好的检测方法。但是如果我们想同时查看 Y t Y_t Yt Y t − 1 Y_{t-1} Yt1,…, Y t − n Y_{t-n} Ytn的相关性,重复n次就太繁琐了。
      下面介绍一个一次性画出n多Lag的自回归系数方法:statsmodels.graphics.tsaplots.plot_acf()
    from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
    fig, axes = plt.subplots(2,1)
    
    fig, axes = plt.subplots(2, 1)
    plot_acf(df['Temp'], ax=axes[0])
    plot_pacf(df['Temp'], ax=axes[1])
    
    plt.tight_layout()
    plt.show()
    

    在这里插入图片描述
    4. 最后,到此为止我们就知道如何查看时间序列数据的自相关性了。接下来看如何用对它建立模型。

    import pandas as pd
    import numpy as np
    from statsmodels.tsa.ar_model import AR
    import matplotlib.pyplot as plt
    from sklearn.metrics import mean_squared_error as MSE
    
    df = pd.read_csv('e:/daily-min-temperatures.csv',
                     index_col=0, parse_dates=True)
    # 把模型数据分为train和test,分别用来训练模型和对比模型预测结果
    x = df.values
    train, test = x[:-7], x[-7:]  # test的个数设定为7
    
    # 训练模型得到所需参数:AR的滞后项个数p,和自回归函数的各个系数
    model_fit = AR(train).fit()
    params = model_fit.params
    p = model_fit.k_ar  # 即时间序列模型中常见的p,即AR(p), ARMA(p,q), ARIMA(p,d,q)中的p。
    # p的实际含义,此处得到p=29,意味着当天的温度由最近29天的温度来预测。
    
    history = train[-p:]   
    history = np.hstack(history).tolist()  # 也可以用history = [history[i] for i in range(len(history))] ,
    # 唯一的目的就是接下来通过append(test[i])实时更新history
    # (append函数不适用于np.narray类型的history)
    test = np.hstack(test).tolist()
    
    predictions = []
    for t in range(len(test)):
    	lag = history[-p:]
    	yhat = params[0]
    	for i in range(p):
    		yhat += params[i+1] * lag[p-1-i]
    	predictions.append(yhat)
    	obs = test[t]
    	history.append(obs)
    print(np.mean((np.array(test) - np.array(predictions))**2))  # 得到mean_squared_error, MSE
    plt.plot(test)
    plt.plot(predictions, color='r')
    plt.show()
    

    在这里插入图片描述附注:

    • 2个随机变量X和Y的pearson线性相关系数定义为:
      ρ x , y = C o v ( X , Y ) V a r ( X ) V a r ( Y ) = E [ ( X − μ x ) ( Y − μ y ) ] E ( X − μ x ) 2 E ( Y − μ y ) 2 ρ_{x,y} = \frac{Cov(X, Y)}{\sqrt{Var(X)Var(Y)}} = \frac{E[(X-μ_x)(Y-μ_y)]}{\sqrt{E(X-μ_x)^2E(Y-μ_y)^2}} ρx,y=Var(X)Var(Y) Cov(X,Y)=E(Xμx)2E(Yμy)2 E[(Xμx)(Yμy)]
      – 具体到样本:
      ρ ^ x , y = ∑ t = 1 T [ ( x t − x ˉ ) ( y t − y ˉ ) ] ∑ t = 1 T ( x t − x ˉ ) 2 ∑ t = 1 T ( y t − y ˉ ) 2 \hat{ρ}_{x,y} = \frac{\sum_{t=1}^{T} [(x_t -\bar{x})(y_t-\bar{y})]}{\sqrt{\sum_{t=1}^{T} (x_t -\bar{x})^2\sum_{t=1}^{T}(y_t-\bar{y})^2}} ρ^x,y=t=1T(xtxˉ)2t=1T(ytyˉ)2 t=1T[(xtxˉ)(ytyˉ)]
    展开全文
  • AR 模型股票预测 PYTHON

    2014-07-02 13:12:16
    股票分析,利用AR模型建模,实现预测。python实现,AR的特殊解法
  • 1.使用AR模型仿真生成随机信号,求解Yue- Walker方程估计AR模型的参数,并与 MATLAB自带函数 anyue进行比较,检验程序是否正确。 2.应用FPR、AC等准则估计模型的阶数,并与真实值进行比较。 3.讨论AR模型阶数及白...
  • 使用AR模型预测轨迹

    千次阅读 2014-10-19 19:27:01
    自回归模型(Autoregressive Model)是用自身做回归变量的过程,即利用前期若干时刻的随机变量的线性组合来描述以后某时刻随机变量的线性回归模型,它是时间序列中的一种常见形式。
    自回归模型(Autoregressive Model)是用自身做回归变量的过程,即利用前期若干时刻的随机变量的线性组合来描述以后某时刻随机变量的线性回归模型,它是时间序列中的一种常见形式。
    

    简单地说就是预测第n+1个时间序列时,使用前n个时间序列,AR模型则假设第n+1个时间序列与前n个时间序列存在着线性关系, 如下图所示。更多信息请参考维基百科。

    显然使用AR模型时,前n个时间序列前的参数的估计是这个模型的核心问题。

    这里简略地说明参数估计方法:

    联想线性回归中的参数估计中,给出的一组训练序列,已知其中存在线性关系,则我们会使用最小二乘法来估计y=theta'*x中的参数矩阵theta。

    theta = (x'*x)^-1 * x' * y

    但是这里显然不是完全相同的情况,不是线性回归的问题,而是一个预测问题。为此构造训练序列来求前n个时间序列前的参数。

    构造训练序列:取若干组n+1个相连的时间序列中的前n个时间序列作为input,第n+1个时间序列作为output。(算法核心)

    得到了前n个时间序列前的参数后,就可以用他们来预测了。

    为了验证算法,使用matlab编程实现整个算法。

    首先,生成一个被高斯噪声污染了的线性时间序列,然后对它们使用AR模型来分析,最后来预测并将预测结果和原始数据进行对比。

    结果如下图所示:

    黑实线是生成的线性时间序列,红圈是被高斯噪声污染了的线性时间序列,蓝色三角形是使用AR模型和高斯噪声污染了的线性时间序列得到的预测结果,绿色星形是从某时间开始单纯使用AR模型和其AR模型得到的历史预测时间序列的预测结果,可以看到随着时间推移,预测误差越来越大。


    附源代码

    close all;
    clear all;
    N = 100;
    nVerctor = (1:N)';
    realHeight = nVerctor * 0.1;
    plot(nVerctor, realHeight, 'k-');
    title('Graph of realHeight series');
    grid on;
    
    %add gaussian noise
    
    noise = randn(size(nVerctor));
    
    realHeightAddNoise = realHeight + noise;
    hold on;
    plot(nVerctor, realHeightAddNoise, 'ro');
    title('Graph of realHeight series with gaussian noise');
    grid on;
    
    p = 24;
    fai = zeros(p, 1);
    
    %为了估计参数,取50对input & output, 借用梯度下降算法学习参数。
    y = realHeightAddNoise((p+1):N);%
    x = zeros(size(y, 1), p);
    for n = 1:size(x,1)
    	x(n, :) = realHeightAddNoise(n:(p+n-1));
    end
    
    
    %theta=(x'x)^-1x'y
    fai = inv(x'*x)*(x'*y);
    
    
    reconstructSeries = ones(size(realHeightAddNoise));
    reconstructSeries(1:p) = realHeightAddNoise(1:p);
    
    reconstructSeries2 = ones(size(realHeightAddNoise));
    reconstructSeries2(1:p) = realHeightAddNoise(1:p);
    
    
    for n = (p+1):N	
    	reconstructSeries(n) = reconstructSeries((n-p):(n-1))' * fai;
    	reconstructSeries2(n) = realHeightAddNoise((n-p):(n-1))' * fai;
    end
    
    hold on;
    plot(nVerctor, reconstructSeries, 'g*');
    title('Graph of reconstructSeries');
    grid on;
    
    hold on;
    plot(nVerctor, reconstructSeries2, 'b^');
    title('Graph of reconstructSeries2');
    grid on;
    


    展开全文
  • 假设该过程遵循AR流程,则此功能将提前进行h周期的预测。 最佳滞后数 p 由 AIC 原理确定,并具有简化的公式。 一旦确定了最佳滞后数,算法就会执行预测,选择迭代或直接方法。 迭代方法对下一个周期执行第一个预测,...
  • 基于matlab GUI一步线性+weiner滤波预测 二、源代码 function varargout = WeinerFilter(varargin) % WEINERFILTER M-file for WeinerFilter.fig % WEINERFILTER, by itself, creates a new WEINERFILTER or raises ...

    一、AR模型简介

    1 自回归模型的定义
    自回归模型(Autoregressive Model)是用自身做回归变量的过程,即利用前期若干时刻的随机变量的线性组合来描述以后某时刻随机变量的线性回归模型,它是时间序列中的一种常见形式。
    在这里插入图片描述
    2 AR模型的状态空间形式(AR-Process in State Space Form)
    AR模型可以写成状态空间模型的形式,令:
    在这里插入图片描述
    3 AR模型的求解
    AR模型可以采用Yule-Walker方程的形式进行求解[3]。考虑p阶AR模型有相应的AR特征多项式和相应的AR特征方程。
    在这里插入图片描述
    在这里插入图片描述
    4 AR模型示例
    在这里插入图片描述
    5 模型参数的求解
    这里加上一点自己在运用模型时的感受,在实际我在运用AR模型进行时序数据的预测时,最常见有两个板块:
    (一)AR 模型的判定:
    这一部分的主要任务是,判断该问题是否适用 AR 模型建模,以及大致确定阶数 p。
    如果一个时间序列满足以下两个条件:

    ACF 具有拖尾性,即 ACF(k) 不会在 k 大于某个常数之后就恒等于 0。
    PACF 具有截尾性,即 PACF(k) 在 k>p 时变为 0

    第 2 个条件还可以用来确定阶数 p。考虑到存在随机误差的存在,因此 PACF 在 p 阶延迟后未必严格为 0 ,而是在 0 附近的小范围内波动。
    在这里插入图片描述
    从图中可以看出:1, 2, 4, 8, 20 都可以采用, 进一步理解就是要采用多少阶的模型比如AR(1), AR(2)….但是有一点,从AR模型公式看,当阶越大,数据处理难度越高。

    (二) AR 模型的参数估计
    1. 模型的有效性检验
    一个好的拟合模型应该能够提取观测值序列中几乎所有的样本相关信息,即残差序列应该为白噪声序列。因此,模型的有效性检验即为残差序列的白噪声检验。如果残差序列是白噪声,那么理论赏其延迟任意阶的自相关系数为 0,考虑数据的偏差,那么绝大多数应该在 0 附近的范围内,通常在 95% 的置信水平(2倍标准差)以内。
    2. 参数的显著性检验
    这一部分的目标是,删除那些不显著参数使模型结构最为精简。对于模型参数 aj(j=1,…,p) 的检验,其原假设和备择假设分别为
    在这里插入图片描述
    检验统计量为 t 统计量:
    在这里插入图片描述
    在给定的显著水平 α 下,当检验统计量 T 大部分位于分点t 1 − α / 2 t,或该统计量的 P 值小于 α 时,则可以以 1-α 的置信水平拒绝原假设,认为模型参数显著。反之,则不能显著拒绝参数为 0 的假设。

    二、部分源代码

    function varargout = WeinerFilter(varargin)
    % WEINERFILTER M-file for WeinerFilter.fig
    %      WEINERFILTER, by itself, creates a new WEINERFILTER or raises the existing
    %      singleton*.
    %
    %      H = WEINERFILTER returns the handle to a new WEINERFILTER or the handle to
    %      the existing singleton*.
    %
    %      WEINERFILTER('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in WEINERFILTER.M with the given input arguments.
    %
    %      WEINERFILTER('Property','Value',...) creates a new WEINERFILTER or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before WeinerFilter_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to WeinerFilter_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
    
    % Edit the above text to modify the response to help WeinerFilter
    
    % Last Modified by GUIDE v2.5 28-May-2021 16:23:34
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @WeinerFilter_OpeningFcn, ...
                       'gui_OutputFcn',  @WeinerFilter_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
    
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
    
    
    % --- Executes just before WeinerFilter is made visible.
    function WeinerFilter_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to WeinerFilter (see VARARGIN)
    
    % Choose default command line output for WeinerFilter
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
        set(handles.listSignal,'string', ...
        '1-|2-AR过程的信号|3-两个正弦信号叠加+N|4-单一正弦信号|5-SAR_Line');
    % UIWAIT makes WeinerFilter wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    
    % --- Outputs from this function are returned to the command line.
    function varargout = WeinerFilter_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Get default command line output from handles structure
    varargout{1} = handles.output;
    
    
    % --- Executes on button press in btnWiener.
    function btnWiener_Callback(hObject, eventdata, handles)
    % hObject    handle to btnWiener (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
        %获取数据
        pInfo = getappdata(handles.figure1,'mydata');
        x=pInfo.pData;
        s=pInfo.pDataS;
        M=length(x);
        
        N=str2num(get(handles.edLengthFilter,'string'));
        fNoiseM=str2num(get(handles.edNoiseM,'string'));
        
        % 指定输出
        axes(handles.axesOut);
        
        %自相关矩阵 %自相关矩阵R
        Re=zeros(1,M);
        for i=1:N
            for j=1:M
                if j+i-1<=M
                    Re(1,i)=x(1,j)*x(1,j+i-1)'/(M-i+1)+Re(1,i);
                end
            end
        end
        R=zeros(N,N);            
        for i=1:N
            for j=i:N
                if(i==j)
                    R(i,i)=Re(1,1);
                else
                    R(i,j)=Re(1,j-i+1);
                    R(j,i)=conj(R(i,j));
                end
            end
        end  
        %互相关矩阵 r
        r=zeros(1,N);             
        for i=1:N
            for j=1:M
                if j-i+1>0
                    r(1,i)=x(1,j)*s(1,j-i+1)'/(M-i+1)+r(1,i);
                end
            end
        end
        
        Wopt=inv(R)*r';           %最优抽头权向量
    
        X=zeros(1,M);             %滤波器输出
        for n1=1:M
            if n1<N
                    for i=0:n1-1
                        X(1,n1)=Wopt(i+1,1)*x(1,n1-i)+X(1,n1);
                    end
            else
                    for i=0:N-1
                        X(1,n1)=Wopt(i+1,1)*x(n1-i)+X(1,n1);
                    end
            end
        end
    %     %%去延迟
    %     for j=1:M
    %         if(j>=M-iDelay-iDelay)
    %             XX(1,j)=0;
    %         else
    %             XX(1,j)=X(1,j+iDelay+iDelay);
    %         end
    %     end
        
        hold off
        plot(s,'.-k','linewidth',2);hold on
        plot(x,'.-b');
        hold on
        plot(X,'*-r','linewidth',2);
        hold off
        legend('原信号','噪声信号','滤波信号')
    
    %%
    % --- Executes on selection change in listSignal.
    function listSignal_Callback(hObject, eventdata, handles)
    % hObject    handle to listSignal (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: contents = get(hObject,'String') returns listSignal contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from listSignal
    
    
    % --- Executes during object creation, after setting all properties.
    function listSignal_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to listSignal (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: listbox controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
    function edLengthSignal_Callback(hObject, eventdata, handles)
    % hObject    handle to edLengthSignal (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % Hints: get(hObject,'String') returns contents of edLengthSignal as text
    %        str2double(get(hObject,'String')) returns contents of edLengthSignal as a double
    
    % --- Executes during object creation, after setting all properties.
    function edLengthSignal_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to edLengthSignal (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: edit controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
    

    三、运行结果

    在这里插入图片描述

    四、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
    [2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
    [3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
    [4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
    [5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.

    展开全文
  • 基于时间序列AR模型的PHM预测 由于时间序列分析方法是一个小样本理论,应用起来方便简单,符合实际工程中样本数量较小的情况的需求。 在工程领域,自回归(AR模型比滑动平均(MA)模型和自回归滑动平均(ARMA)...
  • 对于得到的故障参数估计值, 利用递推最小二乘法更新约束AR预测模型, 从而实现故障参数的在线估计与预测. 仿真结果表明, MSTUKF方法在故障参数估计精度上优于UKF 和单渐消因子强跟踪UKF, 约束AR模型的预测精度高于无...
  • AR模型 仅通过时间序列变量的自身历史观测值来反映有关因素对预测目标的影响和作用,不受模型变量相互独立的假设条件约束。p 是系统阶数,系统函数中只有极点,无零点,也称为全极点模型,系统由于极点的原因,要...
  • 3) AR模型预测解调 对于来电显示中的2FSK解调,由于比特率是1200bit/s,采样率是9600Hz(也有可能是19200Hz),那么每个比特对应的样点数是8,这样的情况下利用传统的频谱分析(DFT/Goertzel)达不到解调精度。《一...
  • 用Python进行时间序列预测的自回归模型 自回归是一个时间序列模型,它使用以前时间步的观察值作为回归方程的输入,以预测下一个时间步的值。 这是一个非常简单的想法,可以对一系列时间序列问题进行准确的预测。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,411
精华内容 4,164
关键字:

ar预测模型