* http://www2.sas.com/proceedings/sugi22/INFOVIS/PAPER179.PDF; * http://www.otago.ac.nz/sas/stat/chap65/sect47.htm; options ls=80 ps=65; title 'Evaluation des préférences pour les voitures (1980) par 25 juges'; data carpref; Length origin $8 make $10 modele $11; input Make $ 1-10 modele $ 12-22 @24 (Consom Fiabilite Accel Freinage Maniabilite Conduite Visibilite Confort Silence Coffre) (1.) origin $35 @37 (subj1-subj25) (1.); ID = SUBSTR(modele,1,3); IF origin='E'|origin='J' THEN IMPORT='OUI'; ELSE IMPORT='NON'; IF origin='C' THEN origin='CHRYSLER'; IF origin='F' THEN origin='FORD '; IF origin='G' THEN origin='GMC '; IF origin='E' THEN origin='EUROPE '; IF origin='J' THEN origin='JAPAN '; cards; CADILLAC ELDORADO 3234543533 G 0807990491240508971093809 CHEVROLET CHEVETTE 5335425223 G 0051200423451043003515698 CHEVROLET CITATION 4155555525 G 0453305814161643544747795 CHEVROLET MALIBU 3333444544 G 0627400723121345545668658 FORD FAIRMONT 3324345434 F 0224006715021443530648655 FORD MUSTANG 3244323222 F 0507197705021101850657555 FORD PINTO 4134313222 F 0021000303030201500514078 HONDA ACCORD 5554533433 J 9556897609699952998975078 HONDA CIVIC 5545435434 J 8436709507488852567765075 LINCOLN CONTINENTAL 2453353555 F 0708990592230409962091909 PLYMOUTH GRAN FURY 2134353535 C 0706000434101107333458708 PLYMOUTH HORIZON 4345535235 C 0305005635461302444675655 PLYMOUTH VOLARE 2153333424 C 0405003614021602754476555 PONTIAC FIREBIRD 1153551231 G 1007895613201206958265907 VOLKSWAGEN DASHER 5355545435 E 8458696508877795377895000 VOLKSWAGEN RABBIT 5454535424 E 8458509709695795487885000 VOLVO DL 4524555555 E 9989998909999987989919000 ; **************************************************************************; * ACP classique sur les notes des voitures ; **************************************************************************; ods graphics on ; ODS rtf ; title2 'ACP des données d"évaluation (exploration)'; proc factor data=carpref plots = all method= principal; var Consom Fiabilite Accel Freinage Maniabilite Conduite Visibilite Confort Silence Coffre; run; title2 'ACP des données d"évaluation (sélection de 2 facteurs'; proc factor data=carpref plots = all method= principal out= individu nfactors=2 outstat=variable ; var Consom Maniabilite Visibilite Conduite Confort Silence ; run; Title4 'premier plan factoriel Voitures x Mesures'; data work ; set individu ; keep X Y Xsys Ysys text size ; X=factor1 ; Y=factor2; size=1; xsys='2'; ysys='2'; text=modele ; * variable d'identification ; Label Y='Dim 2' X='Dim 1'; * nom des axes ; run; symbol1 V=none interpol=none; proc gplot data=work; plot Y*X / overlay annotate=work Frame Href=0 Vref=0; run; **************************************************************************; * Espace Voitures x Mesures par ACP avec PrinQual ; * sur des variables mixtes (nominales, ordinales, quanti ; * The PRINQUAL procedure performs principal component analysis (PCA) ; * of qualitative, quantitative, or mixed data ; **************************************************************************; title2 'Espace Voitures x Mesures avec mesures ordinales (monotone) ou quanti (identity)'; ods graphics on ; proc prinqual data=carpref plots=all maxiter=100 out=esp_prin n=2 standard scores method = mtv /* maximum total variance = PCA */; * transform monotone (Consom Maniabilite Visibilite Conduite Confort Silence); /* ordinales */ transform identity (Consom Maniabilite Visibilite Conduite Confort Silence); /* quanti */ id modele subj1-subj25; /* garder aussi les préférences */ run ; proc print data=esp_prin ; run ; **************************************************************************; * Superposition des préférences dans l'Espace Voitures x Mesures ; **************************************************************************; title2 'Superposition des Préférences sur l"espace Voiture x Mesure (ideal)'; Proc transreg data=esp_prin; model identity(subj1-subj25)=point(Prin1 Prin2); output tstandard=center coordinates replace noscores out=TResult2; id modele; ods select PrefMapIdealPlot ; run; data esp_prin ; set esp_prin ; prin1 = 2*prin1 ; prin2 = 2*prin2 ; run ; title2 'Superposition des Préférences sur l"espace Voiture x Mesure (vectoriel)'; Proc transreg data=esp_prin; model identity(subj1-subj25 )=identity(Prin1 Prin2); output tstandard=center coordinates replace out=TResult1; id modele; ods select PrefMapVecPlot ; run; proc print data=carpref ; run ; **************************************************************************; * PREFMAP phase 1 : ACP sur les préférences pour création de l'espace; **************************************************************************; title2 'PREFMAP Phase 1 : Création de l"espace des préférences par Prinqual (quanti)'; ods graphics on ; proc prinqual data=carpref plots=all maxiter= 100 out=Presults n=2 standard scores correlations mdpref replace ; transform identity (subj1-subj25); id modele Consom Maniabilite Visibilite Conduite Confort Silence; /* garder les mesures */ run ; proc print data=Presults ; run ; **************************************************************************; * PREFMAP phase 2 (Analyse externe): transreg ; * Transreg généralise la régression aux variables ordinales ; **************************************************************************; * modèle vectoriel pour les variables dont les optima sont à l'infini; ods graphics on ; title2 'Carte des Préférences (PREFMAP): Modèle vectoriel consommation & fiabilité (Mode Identity)'; Proc transreg data=Presults; model identity(Consom Maniabilite Visibilite Conduite Confort Silence )=identity(Prin1 Prin2); output tstandard=center coordinates replace out=TResult1; id modele; ods select PrefMapVecPlot ; run; * modèle point idéal pour la conduite (optimum fini); title2 'Carte des Préférences (PREFMAP) : Modèle point idéal conduite (Mode Point)'; Proc transreg data=Presults; model identity(Consom Maniabilite Visibilite Conduite Confort Silence )=point(Prin1 Prin2); output tstandard=center coordinates replace noscores out=TResult2; id modele; ods select PrefMapIdealPlot ; run; proc print data=Tresult2 ; run ; **************************************************************************; * ACP sur les préférences en 3 dimensions; **************************************************************************; ods graphics on ; proc prinqual data=carpref plots=all maxiter= 100 out=Presults n=3 standard scores correlations mdpref replace ; transform identity (subj1-subj25); id modele Consom Maniabilite Visibilite Conduite Confort Silence; /* garder les mesures */ run ; data LIST; set Presults ; retain color "black" when "a" xsys ysys "2" hsys "3" function "label"; length text $16 sval style $8; x=prin1; y=prin2; z=prin3; if _type_="SCORE" then size=1.5; else size=2.5; text=_name_; run; * préparation du graphique G3GRID; proc g3grid data=LIST out=GRID; grid prin2*prin1=prin3 /spline axis1=-2 to 2 by .1 axis2=-2 to 2 by .1; run ; * impression du graphique G3D ; proc g3d data=GRID anno=LIST ; plot prin2*prin1=prin3 / grid zmin=-3 zmax=2; run ; **************************************************************************; * Elaboration de la grille des préférences ; **************************************************************************; Data grille ; do Prin1 = -2 to 2 by 0.1 ; do Prin2 = -2 to 2 by 0.1 ; output; end ; end; run ; **************************************************************************; * Analyse canonique; * A FINIR ; **************************************************************************; proc candisc data=CARPREF outstat=OUTCAN short ; class modele; var Consom Fiabilite Conduite;* + rating ; run ; proc transpose data=OUTCAN out=OUTRAN; by _type_ modele notsorted; where _type_ In ("STRUCTUR","CANMEAN"); var Consom Fiabilite Conduite; * + rating ; run ; proc sort data=OUTRAN nodupkey; by _type_ can1 can2 can3 modele; run ; proc print data= OUTRAN noobs; title "Figure 4"; run ; data LIST ; set OUTRAN; where (_type_ eq "CANMEAN"); select(modele); when ("Accord") text= "Accord/Civic"; when("Civic") delete; when("Fairmont") text="Fairmont/Malibu"; when("Malibu") delete; otherwise text=modele; end; x=can2; y=canl; z=can3; retain function "label" hsys "3" XSYS YSYS "2" style "swissb" size 1.5; title h=2 "Figure 5. Graphique des variables canoniques"; proc g3d data=LIST ; scatter can1 * can2 = can3/ anno=LIST shape="POINT" xticknum=6 yticknum=6 zticknum=6 zmin=-3 zmax=3; run;