* *******lecture des données lydia pinkham **********************; * modèle économétrique dynamique; *****************************************************************; options nocenter formdlim="-" ; title1 'Effets de la publicité (variable agrégée)'; footnote1 h=3 j=l 'Master Marketing Paris-Dauphine'; footnote2 h=2 j=l 'Source : Mesure de la performance marketing ' j=r '2010 (c) Pierre Desmet'; ********lecture des données lydia pinkham **********************; * modèle économétrique dynamique; *****************************************************************; Data in ; input annee pub ventes ; **************************************; * definition de 3 périodes ; * Winer 1979 ; **************************************; era=3 ; if annee <1941 then era= 2; else if annee<1926 then era=1 ; **************************************; * transformations ; **************************************; log_pub = log(pub) ; log_ventes=log(ventes); **************************************; * décalage temporel (lag); **************************************; pub_1=lag1(pub); pub_2=lag2(pub); pub_3=lag3(pub); pub_4=lag4(pub); pub_5=lag5(pub); ventes_1 = lag1(ventes) ; **************************************; * ratio ; **************************************; pourcent_1 = pub/ventes ; pourcent_2 = pub/ventes_1 ; cards ; 1907 608 1016 1908 451 921 1909 529 934 1910 543 976 1911 525 930 1912 549 1052 1913 525 1184 1914 578 1089 1915 609 1087 1916 504 1154 1917 752 1330 1918 613 1980 1919 862 2223 1920 866 2203 1921 1016 2514 1922 1360 2726 1923 1482 3185 1924 1608 3351 1925 1800 3438 1926 1941 2917 1927 1229 2359 1928 1373 2240 1929 1611 2196 1930 1568 2111 1931 983 1806 1932 1046 1644 1933 1453 1814 1934 1504 1770 1935 807 1518 1936 339 1103 1937 562 1266 1938 745 1473 1939 749 1423 1940 862 1767 1941 1034 2161 1942 1054 2336 1943 1164 2602 1944 1102 2518 1945 1145 2637 1946 1012 2177 1947 836 1920 1948 941 1910 1949 981 1984 1950 974 1787 1951 766 1689 1952 920 1866 1953 964 1896 1954 811 1684 1955 789 1633 1956 802 1657 1957 770 1569 1958 639 1390 1959 644 1387 1960 564 1289 ; run; symbol1 i= v=dot ; /* W= épaisseur de la ligne H= taille de la police */ title2 "Graphique relation publicité / ventes " ; proc gplot data=in ; plot ventes*pub ; plot log_ventes*log_pub ; run; title2 "Graphique évolution chronologique Ventes et Publicité " ; symbol1 i=join v=circle C=RED; symbol2 i=join V=PLUS C=BLUE; proc gplot data=in; plot ventes*annee=1 /* =1 : utilise Symbol1 */ pub*annee=2 / overlay; run; *****************************************************************; title2 "Corrélation linéaire entre les variables" ; *****************************************************************; proc corr data=in ; var ventes ventes_1 pub pub_1 pub_2 ; run; ods graphics on; *****************************************************************; title2 "Modèle simple : Ventes= Pub " ; *****************************************************************; Proc REG data=in; modele2 : model ventes = pub ; output out=regprev2 pred=ventes_est; run ; proc gplot data=regprev2; plot ventes*annee ventes_est*annee / overlay; run; ods graphics off ; *****************************************************************; title2 "Modèle avec lag : Ventes= Pub Pub_1 Pub_2" ; *****************************************************************; Proc REG data=in; modele3 : model ventes = pub pub_1 pub_2 / r ; output out=regprev3 pred=ventes_est; run ; proc gplot data=regprev3; plot ventes*annee ; plot2 ventes_est*annee / overlay; run; *****************************************************************; title2 "Modèle autorégressif : Ventes= ventes(-1) Pub (erreur iid Normale)" ; *****************************************************************; Proc REG data=in; modele4 : model ventes = ventes_1 pub ; output out=regprev4 pred=ventes_est; run ; proc gplot data=regprev4; plot ventes*annee ventes_est*annee / overlay; run; *****************************************************************; Title2 "Modèle autorégressif : Ventes= ventes(-1) Pub (avec autocorrélation erreurs )"; * attention avec la transformation de koyck le lambda de Y(t-1) est le même que celui de l'autocorrélation des erreurs ; title3 H=0.5 "coef de Ventes_1 devrait être égal au coef d'autocorrélaton de l'erreur"; *****************************************************************; Proc AUTOREG data=in; model ventes = ventes_1 pub / nlag=1 /* u(t)= rho*u(t-1) + epsi(t) */ dwprob /* test Durbin-watson */ normal /* test normalité de Jarque-Berra */ archtest /* test hétéroscédasticité */; output out= data_autoreg p=p pm=ventes_est rm= residumodel r=bb; run ; proc gplot data=data_autoreg; plot ventes*annee ventes_est*annee / overlay; run; *****************************************************************; Title2 "avec retard distribué selon un modèle polynomial (ALMON)"; *****************************************************************; Proc PDLREG data=in; modele7 : model ventes = pub ; modele8 : model ventes = pub pub_1 pub_2 ; modele9 : model ventes = ventes_1 pub_1 / lagdep= ventes_1 ; modele10 : model ventes = pub (2,1) ; modele11 : model ventes = pub (4,1) ; run ; *****************************************************************; title2 "Modèle inverse : Pub = ventes(-1) " ; *****************************************************************; Proc REG data=in; model pub = ventes_1 ; output out=regprev5 pred=pub_est; run ; proc gplot data=regprev5; plot pub*annee pub_est*annee / overlay; run; *****************************************************************; Title2 "Prise en compte de l'évolution économique (PNB)"; *****************************************************************; data gnp ; input annee deflate nominal capita ; cards ; 1909 116.8 33400.0 1291.0 1910 120.1 35300. 1300.0 1911 123.2 35800. 1312.0 1912 130.2 39400. 1366.0 1913 131.4 39600. 1351.0 1914 125.6 38600. 1267.0 1915 124.5 40000. 1238.0 1916 134.3 48300. 1317.0 1917 135.2 60400. 1309.0 1918 151.8 76400. 1471.0 1919 146.4 84000. 1401.0 1920 140.0 91500. 1315.0 1921 127.8 69600. 1177.0 1922 148.0 74100. 1345.0 1923 165.9 85100. 1482.0 1924 165.5 84700. 1450.0 1925 179.4 93100. 1549.0 1926 190.0 97000. 1618.0 1927 189.8 94900. 1594.0 1928 190.9 97000. 1584.0 1929 203.6 103095. 1671.0 1930 183.5 90367. 1490.0 1931 169.3 75820. 1364.0 1932 144.2 58049. 1154.0 1933 141.5 55601. 1126.0 1934 154.3 65054. 1220.0 1935 169.5 72247. 1331.0 1936 193.0 82481. 1506.0 1937 203.2 90446. 1576.0 1938 192.9 84670. 1484.0 1939 209.4 90494. 1598.0 1940 227.2 99678. 1720.0 1941 263.7 124540. 1977.0 1942 297.8 157910. 2208.0 1943 337.1 191592. 2465.0 1944 361.3 210104. 2611.0 1945 355.2 211945. 2538.0 1946 312.6 208509. 2211.0 1947 309.9 231323. 2150.0 1948 323.7 257562. 2208.0 1949 324.1 256484. 2172.0 1950 355.3 284769. 2342.0 1951 383.4 328404. 2485.0 1952 395.1 345498. 2517.0 1953 412.8 364593. 2587.0 1954 407.0 364841. 2506.0 1955 438.0 397960. 2650.0 1956 446.1 419238. 2652.0 1957 452.5 441134. 2642.0 1958 447.3 447334. 2569.0 1959 475.9 483663. 2688.0 1960 487.7 503734. 2699.0 ; data in ; merge in gnp ; proc gplot data=in; plot ventes*annee=1 /* =1 : utilise Symbol1 */ capita*annee=2 / overlay; run; *****************************************************************; title2 "Modèle avec PNB" ; *****************************************************************; Proc REG data=in; modele3 : model ventes = capita pub ; output out=regprev7 pred=ventes_est; run ; proc gplot data=regprev7; plot ventes*annee ; plot2 ventes_est*annee / overlay; run; * EN COURS * ; *****************************************************************; Title2 "avec Proc model"; title3 "carry over effect : b /(1-lambda)" ; *****************************************************************; proc MODEL data=in ; parms b0 b1 lambda; ventes = b0 + b1*(pub+lambda*pub_1+lambda*lambda*Pub_2 +lambda*lambda*lambda*pub_3) ; fit ventes / outest= ventes_prev1 white /* test d heteroscedasticite de white */ ; run ; * attention avec la transformation de koyck le lambda de Y(t-1) est le même que celui de l'autocorrélation des erreurs ; proc MODEL data=in ; parms b0 b1 a; if annee=1907 then notoriete= pub ; if annee>1907 then notoriete = (1-a)* lag1(notoriete)+ a*pub ; ventes = b0 + b1*notoriete ; fit ventes start=(b0 1 b1 0.5 a 0.05) / outest= ventes_prev1 white /* test d heteroscedasticite de white */ ; run ; proc print data=ventes_prev1 ; run ;