IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Programme MIDAS (MIxed DAta Sampling)


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 4
    Par défaut Programme MIDAS (MIxed DAta Sampling)
    Bonjour,

    Travaillant sur un Mixed Data Sampling sur Matlab afin d'étudier l'apport prédictif de variables financières sur le PIB. Mon code n'aboutit pas et m'affiche l'erreur suivante:

    "Unable to perform assignment because the size of the left side is 1-by-12 and thesize of the right side is 1-by-14." L'erreur semble être à la ligne 63:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x_midas_j(j,:)=(index_H(j)-delai_m:-1:index_H(j)-(K+1)-delai_m);
    J'ai vérifié tous mes paramètres et matrices, je ne parviens pas à à trouver l'erreur. Est ce que l'un d'entre vous qui maîtrise accepterait de jeter un coup d'oeil à mon code afin de m'éclairer?

    Un grand merci par avance.

    Mon code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    clear; clc; close all; 
     
    %% Paramètres à modifier
    r = 3;  % nb de variables explicatives mensuelles 
    K = 12;  % nb de retards du polynome Almon (retard midas)
    p_ar = 1; % nb de termes autorégressifs
    bounds = 1;  % si 1, on impose theta2<0 dans la fonction almon
    delai_m = 0;  % si >0, on ne connait pas la variable mensuelle sur les delai_m derniers mois du trimestre
    options = optimset('TolX',10^(-10),'TolFun',10^(-10),'MaxIter',1000,'MaxFunEvals',10^5,'Display','off');
    % Options de l'Optimisation
     
    % conditions initiales
    param_init = [1;-1;zeros(p_ar,1);1;0.5;-0.15] + randn(5+p_ar,1);
        % paramètres initiaux : c, delta, phi, beta_1 ... beta_r
        % theta1_1 ... theta1_r  theta2_1... theta2_r
     
     
    %% Chargement de la BDD
    file = 'DataMidas.xlsx';
    DATA_L = xlsread(file,1);   % endog = variable expliquée trimestrielle
    date_L = DATA_L(1:end,1); % les dates trimestrielles en format numérique
    endog_L = DATA_L(1:end,2);  % le PIB trimestriel
    indic_L = DATA_L(1:end,3);  % l'indicatrice du trimestre 2009T1
     
    DATA_H = xlsread(file,2);   % variables explicatives mensuelles
    date_H = DATA_H(1:end,1); % les dates mensuelles en format numérique
    exog_H = DATA_H(1:end,2:r+1); % variables explicatives mensuelles
     
     
    %% Construction des variables expliquée et explicatives
    % Termes autorégressif
    X_ar = zeros(size(endog_L,1),p_ar);
    for i_p = 1:p_ar
        X_ar(:,i_p) = [repmat(mean(endog_L),i_p,1);endog_L(1:end-i_p)];
    end
     
    % Recherche des dates communes aux vecteurs H et L
    [date_com,index_L,index_H]=intersect(date_L,date_H);
        % date_com = dates communes des 2 vecteurs, 
        % index_L = indice des dates dans le vecteur trimestriel (en principe, 1,2,3...,T) 
        % index_H = indice des dates dans le vecteur mensuel
     
    % variable expliquée de fréquence trimestrielle
    Y = endog_L(index_L); 
     
    % variables explicatives de fréquence mensuelle
    x_midas_j = zeros(length(index_H),K);
    for j=1:length(index_H)
       x_midas_j(j,:)=(index_H(j)-delai_m:-1:index_H(j)-(K+1)-delai_m);
    end
     
    % Calcul du nb de valeurs manquantes à retirer
    if sum(sum(x_midas_j<=0))>0
        [a,b]=find(x_midas_j<=0);
        a = unique(a);  % lignes à supprimer car comportant indices <0
        x_midas_j(x_midas_j<=0)=1; 
    else
        a=0;
    end
     
    a = max([a;p_ar]); % termes autorégressifs
     
    X_midas = [];
    for i=1:r
        temp = exog_H(:,i);  
        X_midas = [X_midas temp(x_midas_j)];
    end
     
    % matrice des explicatives par bloc de K colonnes 
    % colonnes 1:K : retards de la var 1, K+1:2K : var 2 etc
     
    % on supprime les premiers points du fait des K retards
    Y = Y(max(a)+1:end,:);  
    X_midas = X_midas(max(a)+1:end,:);
    X_control = [indic_L(max(a)+1:end,:) X_ar(max(a)+1:end,:)];
     
    n_X_H = size(X_midas,2)/K;
    n_X_L = size(X_control,2);
     
    T = size(Y,1);
     
    %% Estimation du modèle
    [paramopt,res,code,tstat] = estim_midas(Y,X_midas,X_control,param_init,bounds,options);
     
     
    %% Tests de diagnostic
    [~,pval_JB] = jbtest(res);  % JB test
    [~,pval_LB] = lbqtest(res,'lags',[4,12,20]);  % Ljung Box test
    [~,pval_ARCH] = lbqtest(res.^2,'lags',[4,12,20]);  % McLeod-Li test
     
     
    %% Affichage des résultats d'estimation
    format compact
    disp('Résultats d''estimation');
    disp(['Exit condition: ' num2str(code)]);
    % >0: Function converged to a solution x
    %  0: The maximum number of function evaluations or iterations was exceeded
    % <0: The function did not converge to a solution
     
    disp(['R-squared: ' num2str(1-(res'*res)/sum((Y-mean(Y))'*(Y-mean(Y))))]);
    disp(['Jarque Bera test: ' num2str(pval_JB)]);
    disp(['Ljung Box test: ' num2str(pval_LB)]);
    disp(['ARCH effects test: ' num2str(pval_ARCH)]);
     
    nom_coef = ['cste  ';'I_09T1';'phi   ';'beta  ';'theta1';'theta2'];
    tab_resu = table(nom_coef,round(paramopt,3),round(tstat,3),'VariableNames',{'Coef','bet','tstat'});
    disp(tab_resu)
     
    % Affichage des poids
    theta= paramopt(end-1:end)';
    poids = poids_almon(theta,K);  % Kxr
    x = (0:11)';
    bar(x,poids); xlim([0 11]);
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2019
    Messages : 90
    Par défaut
    Bonjour,

    "Unable to perform assignment because the size of the left side is 1-by-12 and thesize of the right side is 1-by-14."
    signifie que :
    x_midas_j(j,:) est de taille 1 x 12
    alors que (index_H(j)-delai_m:-1:index_H(j)-(K+1)-delai_m); est de taille 1 x 14
    Il est impossible de mettre un truc de longueur 14 dans une boite de taille 12, donc le programme plante.



    La ligne dans la boucle for :
    x_midas_j(j,:)=(index_H(j)-delai_m:-1:index_H(j)-delai_m-(K+1));est équivalente à x_midas_j(j,:)=(index_H(j)-delai_m) + (0:-1:-(K+1));.
    Or (index_H(j)-delai_m) + (0:-1:-(K+1)); est de la même longueur que (0:-1:-(K+1)), qui est évidemment de longueur K+2 . A l'opposé, le nombre de colonnes de x_midas_j a été initialisé à K.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 4
    Par défaut
    Merci beaucoup !

    J'ai tenté d'initialiser x_midas_j à K+2 mais j'ai l'impression que cela me décale tout car un autre message d'erreur s'affiche désormais.... Y a t il un autre moyen ?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2019
    Messages : 90
    Par défaut
    D'un côté tu as une boite avec 12 places, de l'autre tu as 14 trucs à ranger... Comment faire pour que ça marche ?
    Prendre une boite avec 14 emplacements comme tu l'as fait peut fonctionner, mais si il se trouve qu'une étape ultérieur exige que la boite soit de taille 12, c'est peut-être pas la bonne solution.

    Plus généralement, récupérer un code qui ne fonctionne pas et essayer de le tripatouiller sans le comprendre pour en sortir un résultat risque de ne pas mener bien loin.
    Ton dernier message manque cruellement de détail ; il revient à demander sur un forum automobile "ma voiture fait un drôle de bruit, qu'est ce que je peux faire ?".

Discussions similaires

  1. [Débutant] Problème code MIDAS (MIxed DAta Sampling)
    Par guerinp dans le forum MATLAB
    Réponses: 3
    Dernier message: 28/02/2020, 11h10
  2. Réponses: 0
    Dernier message: 28/01/2020, 12h30
  3. Macro programme dans un data step
    Par sabiou dans le forum Macro
    Réponses: 4
    Dernier message: 18/06/2013, 19h15
  4. programmation data cursor dans GUI?
    Par jponsoda dans le forum Interfaces Graphiques
    Réponses: 0
    Dernier message: 22/06/2010, 11h04
  5. Import export de data dans un programme
    Par jamescook dans le forum C++Builder
    Réponses: 9
    Dernier message: 16/05/2007, 10h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo