PSPP: prise en main

L

E 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), racheté en 2009 par IBM et permettant une sortie des tableaux générés aux formats HTML, ASCII ou PostScript. Cette page issue de mes notes est écrite pour une prise en main rapide pour la personne qui a un besoin urgent d'un outil compatible avec SPSS. La tendance actuelle chez les statisticiens est plutôt d'utiliser R.

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

Le format de fichier de SPSS/PSPP a pour extension .sav. Si vous disposez d'un fichier .csv (Comma Separated Values), issu d'un tableur, vous devez l'importer: 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 .sav se charge par Fichiers » Ouvrir.

La syntaxe

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

Pour une ligne de commentaire, commencer la ligne par l'étoile *. Commencer par COMMENT est également possible, mais le commentaire ne se terminera qu'avec une ligne vide.

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

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

INCLUDE FILE=file-name.

Une seconde manière permet plus de flexibilité:

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

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

Les données

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!

Pour charger un fichier, par exemple:

GET FILE=nom_du_fichier.sav
GET DATA /TYPE=GNM /FILE="chemin/fichier-gnumeric".
GET DATA /TYPE=PSQL /FILE="chemin/fichier-postgres".
GET DATA /TYPE=TXT /FILE="chemin/fichier-csv" /DELIMITERS=';'.

Pour un fichier de données délimitées avec une tabulation:

GET TRANSLATE FILE="auto4.txt" /TYPE=TAB /FIELDNAMES. LIST.

/FIELDNAMES suppose que le nom des variables se trouvent sur la première ligne.

Pour les fichiers .xls

GET TRANSLATE FILE="auto.xls" /TYPE=XLS /FIELDNAMES. LIST.

Pour inclure des données dans un fichier de syntaxe:

DATA LIST /X 1-2.
BEGIN DATA.
2
3
5
7
11
13
END DATA.

Sauvegarder

Pour sauvegarder le fichier:

SAVE OUT="chemin/nom_de_fichier.sav".

On peut ajouter /COMPRESSED pour gagner de la place.

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é, a 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 traités: /SAVE, /MISSING et FORMAT.

FREQUENCIES /VARIABLES=liste de variables

/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~» signifie «Standard Error». N'est valide que pour les variables réelles.

/PERCENTILES=x,y,z ajoute aux précédents les valeurs aux percentiles choisis (de 0 à 100, 50 pour la médiane).

/NTILE=n affiche les percentiles tous les 100/n. /NTILES=10 affiche les déciles.

/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 traités: STANDARD, CONDENSE, ONEPAGE).

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

Non traités: PIECHART et HISTOGRAM pour lesquels les png générés n'ont pas été (très) lisibles (pspp 0.6.2).

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 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 la proportion p (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).

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 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 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 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 N1 et N2 et affecter la réponse dans la variable Neo:

COMPUTE Neo=N1+N2.

Choisit le minimum (MAX pour le maximum) entre deux variables (si un des deux est absent, l'autre 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.