PSPP en mode console et en mode graphique

LE logiciel PSPP est une application sous licence GPL permettant l'analyse statistique de données, en reprenant la syntaxe du langage SPSS (Statistical Package for the Social Sciences) et permettant une sortie des tableaux générés aux formats HTML, ASCII ou PostScript. Cette page est écrite en vue d'une prise en main rapide pour un besoin urgent d'un outil compatible avec SPSS. La tendance actuelle chez les statisticiens est plutôt d'utiliser R, logiciel qui demande un bien plus grand investissement.

Attention : cette page a vieilli ; corrections en cours.

En GNU/Linux, le paquet à installer s'appelle pspp. L'application permet plusieurs formes d'utilisation. Dans une console :

PSPP considèrent en effet trois types de fichiers : les fichiers de données, les fichiers de syntaxe regroupant un ensemble de commandes et les fichiers de résultats. Il est pourtant possible de travailler sans utiliser de fichiers, en n'utilisant que le mode console pour entrer les données, saisir les commandes et constater les résultats.

Interface graphique, avec psppire

L'installation (au moins en UNIX) permet également l'utilisation d'un interface graphique, lancée avec psppire dans une console ou par le menu du Bureau, qui facilite l'exploration des données et permet de produire facilement des tableaux de fréquences, des croisements de variables, de comparaisons de moyennes, de corrélations et des tests…

C'est pratique pour une découverte des données mais un travail de plus grande ampleur nécessite d'utiliser des fichiers de syntaxe, pour automatiser les améliorations et variantes. Le mode graphique affiche les commandes issues du travail avec le système de menus et les résultats, qu'il sauvegarde dans le fichier pspp.jnl. Par ailleurs, Fichiers » Nouveau » Syntaxe ouvre une interface très simple permettant d'éditer et de lancer un fichier de commandes.

La syntaxe

Une commande complète se termine par un point ou une ligne suivant vide. Il n'y a pas de différence entre minuscules et majuscules, qu'il s'agisse des commandes, /paramètres, mots-clés, champs ou variables.

Les chaînes sont entourées de 'guillemets simples' ou "doubles". Les chaînes entourées de guillemets doubles acceptent des guillemets simples (des apostrophes) ; des chaînes délimitées par des guillemets simples acceptent des guillemets doubles " .

Les expressions numériques sont composées de chiffres, de l'éventuel signe moins, point décimal et/ou rang décimal : -4.3e5 vaut -430000.

COMMENT ou l'étoile * en début de ligne (ou précédé d'espaces) permet un commentaire, qui ne se terminera qu'avec un point ou une ligne vide.

ECHO permet la sortie d'une chaîne de caractères sur la console.

Il est possible d'inclure un fichier dans un fichier de commandes avec :

INCLUDE FILE=monfichier .

Une seconde manière permet plus de flexibilité :

INSERT FILE=chemin/monfichier ERROR=STOP CD=NO SYNTAX=BATCH .

CD=YES force le répertoire actuel à s'aligner sur le répertoire du chemin specifié.
ERROR=STOP stoppe le fichier de commande si une erreur est rencontrée. Par défaut : ERROR=CONTINUE
SYNTAX=INTERACTIVE si le fichier est conforme aux conventions de la syntaxe interactive. Par défaut, SYNTAX=BATCH.

Certaines commandes ont des conséquences irréversibles : il est conseillé de garder une copie du fichier de données original dans un autre répertoire et de sauvegarder à chaque étape les fichiers modifiés (monde150812A.sav, monde150812B.sav, etc.). Je ne peux garantir l'absence d'erreur dans cette page; je vous garantis par ailleurs les approximations : prudence!

2. Les fichiers

2.1 Ouvrir un fichier de données des données

Pour charger un fichier SPSS ou PSPP :

GET FILE="nom_du_fichier.sav" .

Importer un fichier texte :

GET DATA /TYPE=TXT /FILE="/home/jc/dummy.csv" /ARRANGEMENT=DELIMITED /DELCASE=LINE /DELIMITERS="\t" /VARIABLES= VAR001 A3 VAR002 F2.0 . fichiers "comma separated values", valant pour les tabulations ("\t")

Note : il faut connaître la structure de la base de données (noms et natures des /VARIABLES.

Avec interface graphique psppire

Fichiers » Importer des données textuelles ouvre un sélecteur de fichiers permettant de choisir le fichier .csv.

Le plus prudent est de tout de suite sauvegarder les données en format SPSS/PSPP .sav. Un fichier de format .sav se charge avec Fichiers » Ouvrir.

Importer un fichier .ods (Libreoffice/Calc) :

GET DATA /TYPE=ODS /FILE="monfichier.ods" /SHEET=index 1 /READNAMES=OFF /CELLRANGE=RANGE "A1:X43".

Avec l'interface graphique psppire

Fichiers » Importer des données textuelles également pour les fichiers .ods.

Il n'est pas possible (PSPP 1.2) d'importer les fichiers Microsoft Excel xls ou xlsx. Passer par Libreoffice/Calc.

Il serait possible (pas essayé) d'importer des fichiers issus d'autres traitements de base de données :

GET DATA /TYPE=GNM /FILE="chemin/fichier-gnumeric" . fichiers gnumeric
GET DATA /TYPE=PSQL /FILE="chemin/fichier-postgres" . fichiers postgreSQL

2.2 Sauvegarder des données

Toutes les donnéess sont considérées comme l'unique base de données traitée et modifiée par PSPP :; elles ne sont pas liées à uner variable particulière.

Pour sauvegarder les données dans un fichier :

SAVE OUT="chemin/nom_de_fichier.sav" .

ou

SAVE OUTFILE="chemin/nom_de_fichier.sav" .

Ajouter /COMPRESSED pour gagner de la place ne semble plus nécessaire.

2.3 Fichiers de syntaxe

Il existe plusieurs formes pour inclure des données dans un fichier de syntaxe. Dans la première, espace, virgules et tabulation séparent les champs :

DATA LIST FREE TABLE /Nom (A12) Sx (A1) Age Ht Pds .
BEGIN DATA .
André M 24 175 65
Marthe F 27 163 57
Chloé F 29 165 62
Danielle F 24 167 87
Eric M 22 165 86
Francoise F 27 157 59
Gérard M 26 160 66
Henri M 27 185 45
Ines M 25 170 65
END DATA .
LIST .

LIST permet la sortie suivante (A12 limite le premier champ à 12 caractères) :

Data List
      Nom Sx      Age       Ht      Pds
───────────────────────────────────────
    André  M    24,00   175,00    65,00
   Marthe  F    27,00   163,00    57,00
    Chloé  F    29,00   175,00    82,00
 Danielle  F    24,00   167,00    87,00
     Eric  M    22,00   165,00    86,00
Francoise  F    27,00   157,00    59,00
   Gérard  M    26,00   160,00    66,00
    Henri  M    27,00   185,00    45,00
     Ines  M    25,00   170,00    65,00

La seconde façon considère des champs de longueurs spécifiées :

DATA LIST FIXED TABLE /Nom 1-9 (A) Sx 11 (A) An 13-16 Ms 17-18 Jr 19-20 .
BEGIN DATA .
André     M 199512 9
Marthe    F 1993 715
Chloé     F 1995 823
Danielle  F 1997 822
Eric      M 1995 619
Françoise F 1997 5 1
Gérard    M 1990 6 6
Henri     M 1998 5 4
Ines      M 1990 6 5
END DATA .
LIST .

donne :

Data List
      Nom Sx   An Ms Jr
───────────────────────
    André  M 1995 12  9
   Marthe  F 1993  7 15
    Chloé  F 1995  8 23
 Danielle  F 1997  8 22
     Eric  M 1995  6 19
Françoise  F 1997  5  1
   Gérard  M 1990  6  6
    Henri  M 1998  5  4
     Ines  M 1990  6  5

3. Statistiques

Souvenons-nous de la signification des différents concepts statistiques : il ne sert à rien de calculer la moyenne sur une variable à deux étiquettes (M/F) et une fréquence sur une variable réelle risque de renvoyer un très grand nombre de valeurs.

DESCRIPTIVES /VARIABLES=liste de variables

/VARIABLES=taille, poids les variables sont séparées par des virgules, ALL pour toutes. "/VARIABLES=" est optionnel : ALL ou la liste des variables peut suivre directement DESCRIPTIVES.

/STATISTICS accepte MEAN (moyenne arithmétique), STDDEV (écart-type), VARIANCE, MINIMUM, MAXIMUM, SUM, KURTOSIS, SESKEWNESS, SEKURTOSIS, SKEWNESS, RANGE, ou ALL pour tous. Si /STATISTICS n'est pas utilisé, la commande retourne MEAN, STDDEV, MINIMUM et MAXIMUM, ce qui équivaut à /STATISTICS=DEFAULT. «SE~» signifie «Standard Error». N'est valide que pour les variables réelles.

/SORT= permet d'ordonner les valeurs : NONE, MEAN, SEMEAN, STDDEV, VARIANCE, KURTOSIS, SKEWNESS, RANGE, MINIMUM, MAXIMUM, SUM, SESKEWNESS, SEKURTOSIS et NAME qui impose l'ordre alphabétique des noms de variable. Chacun de ces paramètres peut être suivi de (A) pour ascendant ou (D) pour descendant (inverse). Par défaut, la commande retourne /SORT=NONE.

Non (encore?) traités : /SAVE, /MISSING et FORMAT.

FREQUENCIES /VARIABLES=var1,var2,var3

/VARIABLES=ALL pour toutes les variables; pour en choisir certaines, les écrire séparées par des virgules. "/VARIABLES=" est optionnel : ALL ou la liste des variables peut suivre directement FREQUENCIES.

/STATISTICS accepte MODE, MEDIAN, MEAN (moyenne arithmétique), STDDEV (écart-type), VARIANCE, MINIMUM, MAXIMUM, SUM, KURTOSIS, SESKEWNESS, SEKURTOSIS, SKEWNESS, RANGE, ou ALL pour tous. Si /STATISTICS n'est pas utilisé, la commande retourne MEAN, STDDEV, MINIMUM et MAXIMUM, ce qui équivaut à /STATISTICS=DEFAULT . «SE~» est le préfixe «Standard Error». N'est valide que pour les variables numériques.

/FORMAT NOTABLE élimine la table des fréquences, LIMIT(n) l'élimine s'il y a plus de valeurs que n. AFREQ, DFREQ, AVALUE et DVALUE s'occupent de trier selon les fréquences ou les valeurs, en ordre direct (A~) ou inverse (D~). NOLABELS escamote les étiquettes, DOUBLE intercale une ligne vide entre les lignes du tableau de fréquences (non (encore?) traités : STANDARD, CONDENSE, ONEPAGE).

/MISSING=INCLUDE devrait inclure les données manquantes (NSP/NRP) parmi les pourcentages des valeurs valides.

CROSSTABS var1 BY var2 BY var3

Affiche un croisement de variables. CROSSTABS var1 BY var2 BY var3 n'est pas équivalent à CROSSTABS var1 BY var2,var3, cette dernière étant une façon plus compacte d'écrire et d'afficher les résultats de CROSSTABS var1 BY var2 et CROSSTABS var1 BY var3.

/CELLS permet de décider quel genre de résultats seront affichés. COUNT (par défaut), EXPECTED (% croisement des sommes par colonne et sommes par rangées : effectifs idéaux), RESIDUAL (COUNT - EXPECTED), SRESIDUAL (standardized residual), ASRESIDUAL (adjusted standardized residual), ROW (% distribués sur toute la rangée), COLUMN (% distribués sur toute la colonne), TOTAL (% distribués sur toutes les cellules); ALL donne tous ces paramètres; /CELLS sans autre spécification donne COUNT, ROW, COLUMN et TOTAL; NONE ne donne pas la tableau de croisement.

/MISSING= INCLUDE permet de comptabiliser les manquants dans le tableau croisé.

/STATISTICS= permet de tester. CHISQ (test du Χ²), PHI, CC (coefficient de contingence), LAMBDA, UC (coefficient d'incertitude), BTAU, CTAU, RISK, GAMMA, D, KAPPA, EAT, CORR; ALL les donne tous et NONE aucun; /STATISTICS sans paramètre donne CHISQ. (voir doc pour les bugs).

Non (encore?) traité : /VARIABLES (integer mode) et le mode /MISSING=REPORT qui s'y réfère; /FORMAT qui semble ne pas fonctionner (pspp 0.6.2)

SPLIT FILE variable.

morcelle un fichier selon les valeurs de la variable précisée. L'exemple suivant donne les tableaux de la fréquence des classes d'âges, un par sexe.

SPLIT FILE sexe.
FREQUENCIES age.

SELECT IF condition.

Élimine les cas qui ne vérifient pas la condition, de façon irréversible si une sauvegarde du fichier est réalisée. TEMPORARY. désactive cette irréversibilité.

SELECT IF sexe=0.

TEMPORARY.

Précise que la commande qui suit n'a d'effet que temporairement. L'exemple suivant donne les fréquences à condition que la variable pays vaut 1 :

TEMPORARY.
SELECT IF pays=1.
FREQUENCIES religion.

FILTER BY variable.

Suspend les cas pour lequels la variable précisée est 0 ou de valeur manquante. On peut fabriquer une telle variable avec COMPUTE, ou changer des valeurs d'une variable avec RECODE.

FILTER OFF. annule le filtre, ce qui n'est pas nécessaire si TEMPORARY. avait été placé avant FILTER BY variable.

RECODE

Permet de recoder des valeurs pour une variable. Par exemple si on veut recoder une échalle de Lickert de 1 à 5 en une telle échelle de 1 à 3, en agrégeant 2 et 1 en 1, en utilisant la valuer centrale 2 plutôt que 3 et en agrégeant 4 et 5 en 3" :

RECODE Var1
  (2=1)(3=2)(4=3)(5=3).

Si l'on veut créer une seconde variable qui reçoit ces valeurs, 1 doit également figurer parmi les transformations :

RECODE Var1
  (LOWEST THRU 2=1)(3=2)(4 THRU HIGHEST=3)
  INTO Var2.

Sous interface graphique : Transformer » Recoder en différentes variables. Choisir la variable à recoder dans le panneau de gauche, appuyer sur la flèche vers le parnneau du centre, cliquer sur le nom qui y apparaît, indiquer le Nom de la nouvelle variable à droite et cliquer sur changement. Cliquer sur Anciennes et nouvelles valeurs, préciser une valeur à gauche, plusieurs possibilités et une valeur en haut à droite, et appuyer sur Ajouter. Vous pouvez terminer par la possibilité en bas à gauche Toutes les autres valeurs. Attention : Intervalle, inférieur à signifie en fait «inférieur ou égal» ; de même pour supérieur à

N OF CASES n

Limite le nombre de cas au n premiers de la base de données.

WEIGHT BY ponderation .

Désigne la variable contenant l'éventuelle pondération : au lieu de valoir pour 1, chaque cas vaudra la valeur réelle indiquée dans la variable, ici ponderation, qui doit exister dans la base de données.

WEIGHT OFF . annule cette façon de compter.

SELECT p FROM n.

SELECT p. sélectionne aléatoirement selon la proportion p (à décider entre 0 et 1) parmi les cas disponibles.

SELECT p FROM n. sélectionne aléatoirement les cas selon trois possiblités :

SORT CASES BY var1, var2... (D).

Trie de façon irréversible une base de données (TEMPORARY n'a pas d'effet). (D) permet l'ordre descendant pour les variables situées en amont ; (A) par défaut ou en cas de plusieurs variables aux comportements différents.

Conditions et boucles

Opérateurs relationnels

EQ égal à
NE non égal à
GT strictement plus grand
GE plus grand ou égal
LT strictement plus petit
LE plus petit ou égal

Opérateurs logiques

AND «et» logique
OR «ou» logique
NOT «négation» logique

IF condition variable=expression.

Assigne une expression à une variable si la condition est vérifiée.

Non (encore?) traité : IF condition vector(index)=expression. ainsi que TEMPORARY (LAG) et LEAVE.

DO IF condition.

Les commandes seront exécutées si la condition est respectée.

ELSE IF condition. commande(s) (facultatif) permet des commande lors d'une autre condition.

ELSE commande(s) (facultatif) les commandes sont exécutées dans tous les autres cas.

END IF. nécessaire pour fermer la structure conditionnelle.

Non (encore?) traité : l'effet de TEMPORARY. sur IF ou ELSE IF.

LOOP.

Boucle simple.

LOOP variable=debut TO fin BY incr. permet d'incrémenter une variable de debut à fin inclus (par défaut, l'incrémentation est de 1). variable doit être une variable numérique préexistante. si debut est plus grand que fin, l'incrémentation est de -1.

LOOP IF condition. La boucle ne commencera que si la condition est vraie. Si une incrémentation est utilisée en même temps que la condition, la condition dispose de la valeur de la variable incrémentée.

END LOOP IF condition. termine une boucle et peut recevoir une condition de sortie.

BREAK. peut également permettre de sortir d'une boucle LOOP, souvent dans une condition IF.

Si aucune condition de sortie n'est prévue, la boucle est exécutée MXLOOPS fois, à déterminer par SET.

Non (encore?) traité : LEAVE et TEMPORARY (LAG).

COMPUTE : calculer à partir de variable(s)

Utile pour créer une variable :

COMPUTE Autrevar=0.
FORMATS Autrevar(F1).

Utile pour dupliquer une variable (ici de trois chiffres) :

SET FORMAT F3.
COMPUTE Nouvar=Var1.

Note : par défaut, la nouvelle variable est créée en format numérique de huit caractères avec deux chiffres après la virgule. Soit utiliser SET FORMAT xx avant COMPUTE, soit FORMATS variable() après COMPUTE.

Pour créer une variable chaîne de 20 caractères de large :

string nom(A20).

Pour additionner le contenu numérique de chaque ligne des variables v53, v54 et v55 et affecter la réponse dans la variable Neo :

COMPUTE Neo=sum(v53 to v55).

COMPUTE nv_var= v53+v54+v55. fait la même chose mais si une valeur est «missing», l'addition le sera également.

Choisit le minimum (MAX pour le maximum) entre deux variables (si un des deux est absent, l'autre les automatiquement) :

COMPUTE Neo=MIN(Np,Nm).

Il est possible d'agréger des valeurs d'une variable (ici : 1. pas du tout, 2. pas vraiment, 3. égal, 4. plutôt, 5. tout-à-fait de la variable D1 deviennent 1. non (1 et 2), 2. égal (3), 3. oui (4 et 5) dans la variable D1T).

DO IF D1<3.
  compute D1T = 1.
ELSE IF D1=3.
  compute D1T = 2.
ELSE IF D1>3.
  compute D1T = 3.
END IF.

(voir également RECODE)

Pour affecter en Ax le résultat du test «est-ce que la variable Ch1 contient un x?» (1 si oui, 0 si non) :

COMPUTE Ax=INDEX(Ch1, "x") > 0.

Si la variable n'existe pas encore, elle est automatiquement créée, mais pas nécessairement comme vous le désirez (décimales) : soit on la crée préalablement, soit on corrige ses paramètres ensuite.

En vrac

DELETE VARIABLES var1 var2B. pour supprimer des variables.