Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS STAT
SAS STAT Forum d'entraide sur les fonctionnalités liées à la statistique sur SAS : statistique descriptive, test, régression, classification
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/03/2011, 11h09   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 20
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 20
Points : 0
Points : 0
Par défaut PROC GLM avec Weight

Bonjour,

J'aimerais avoir la p-value pondérée d'une anova, j'ai lancé ce programme :
Code :
1
2
3
4
5
6
7
 
proc glm DATA=TABLE;
class groupe;
model age=groupe;
means  groupe;
weight poids;
quit;
Or les moyennes pondérées et écarts types sont différents avec ce programme :
Code :
1
2
3
4
5
 
proc means DATA = TABLE N Mean Std vardef=wdf;
var age / weight=poids;
BY groupe;
run;
Dans la proc means on a l'option vardef=wdf qui permet de changer le dénominateur dans le calcul de la variance et de l'écart type (somme des poids-1 au lieu de n-1) alors que l'on a pas cette option dans la proc glm...

Est ce que la p-value pondérée dans la proc glm est toujours juste par contre ?

Merci beaucoup pour vos réponses,
Skywash58 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 12h14   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
en lancant ce code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
proc sort DATA=	sashelp.cars out=cars;
BY 	DriveTrain;
run;
 
proc glm DATA=cars;
class DriveTrain;
model Length=DriveTrain;
means  DriveTrain;
weight cylinders;
quit;
 
 
proc means DATA = cars N Mean Std vardef=wdf;
var Length / weight=cylinders;
BY DriveTrain;
run;
je n'ai pas constaté de différences entre les deux versions, si ce n'est l'arrondi. As tu trié des données? Si oui peux tu faire parvenir tes données?
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 14h10   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 20
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 20
Points : 0
Points : 0
Par défaut Reponse weight

En fait c'est au niveau de l'ecart type que ce n'est pas exactement le même pour une catégorie de la variable groupe car le dénominateur n'est pas corrigé je pense
Skywash58 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h18   #4
Invité de passage
 
Inscription : septembre 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 2
Points : 2
Points : 2
Bonjour à tous,

j'ai la même interrogation que skywash58.

La p-value par l'intermediare de la proc glm en pondérant mes données par l'option weight ne doit pas être calculée sur la bonne variance (anova).

En effet si l'on utlise la proc means avec comme options vardef=WEIGHT et que l'on compare les résultats de la proc glm en mettant l'option weight on obtient la même valeur pour la moyenne mais pas la même valeur pour la variance.
On obtient les même variance seulement si on ne met pas vardef=weight dans la proc means. (voir les procedure utilisée ci-dessous)

Je dois calculer un p-value par une anova, soit une analyse de la variance.

Si la variance n'est pas la même ma p-value ne sera par conséquent pas la même.

Ma question: Est ce que quelqu'un connait une option dans la proc glm permettant de calculer la p-value en fonction des poids.



Voila les procedures utilisées qui ne donnent pas la même variance.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
                  proc glm DATA=tab1;
                  class GROUP;
                  model age=GROUP;
                  means=GROUP;
	         weight w;
                  ods output ModelANOVA=sortie;
                  run;quit;
 
 
                  proc means DATA=tab1   vardef=WEIGHT   n mean std median;
                  var age / weight=w ;
                  class group2;
                  run;
Merci pour vos réponses.

Si cela n'est pas clair je rééxplique.
bouchéen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 10h47   #5
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
Bonjour Boucheen,

J'ai un peu plus de temps pour me pencher sur le probleme aujourd'hui et voici ce que j'en pense:

On va commencer par la proc means.

En regardant

http://www.sfu.ca/sasdoc/sashtml/proc/zormulas.htm
et
http://www.sfu.ca/sasdoc/sashtml/proc/zrweight.htm

il existe plusieurs methodes proposees par sas pour calculer la deviation standard. La plus utilisee est sans aucun doute vardef=df (le defaut, soit dit en passant), qui correspond a une estimation non biaisee de la variance de la population sous-jacente (si cette variance existe et que les chantillons sont determines independamment et avec remplacement).

En faisant une analyse ponderee, tu trouveras donc les meme resultats avec cette pour la proc means avec vardef=df et la proc glm, si la repartition de tes poids est identique pour chacune de tes categories de ton by:

Code :
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
 
DATA cars;
  do Drivetrain=1 TO 3;
do cylinders=1 TO 10;
    do i=1 TO 50;
	  length=100*ranuni(-3);
	  output;
	end;
  end;
end;
run; 
 
proc glm DATA=cars;
class DriveTrain;
model Length=DriveTrain;
means  DriveTrain;
weight cylinders;
quit;
 
 
proc means DATA = cars N Mean Std ;
var Length / weight=cylinders;
BY DriveTrain;
run; 
proc means DATA = cars N Mean Std vardef=n;
var Length / weight=cylinders;
BY DriveTrain;
run; 
proc means DATA = cars N Mean Std vardef=df;
var Length / weight=cylinders;
BY DriveTrain;
run; 
proc means DATA = cars N Mean Std vardef=weight;
var Length / weight=cylinders;
BY DriveTrain;
run; 
proc means DATA = cars N Mean Std vardef=wdf;
var Length / weight=cylinders;
BY DriveTrain;
run;
remarquer dans l'output de la glm, la somme des poids est identique pour chacune des categories du by.

Maintenant je te propose un cas assez particulier. En generant les poids d'une maniere aleatoire, on provoque une repartition differente des poids pour chacune des categories, et dans ce cas, l'analyse de la glm ne retombe sur aucun des resultats de la proc means.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
DATA cars;
  do Drivetrain=1 TO 3;
    do i=1 TO 500;
      cylinders=int(ranuni(-3)*10);
	  length=100*ranuni(-3);
	  output;
	end;
 
end;
run;
 
proc glm DATA=cars;
class DriveTrain;
model Length=DriveTrain;
means  DriveTrain;
weight cylinders;
quit;
regarder la somme des poids dans la glm.

Citation:
Ma question: Est ce que quelqu'un connait une option dans la proc glm permettant de calculer la p-value en fonction des poids.
reponse: c'est bien ce que sas fait dans la proc glm comme tu l'as code. Mais a quoi correspond cette p-value? C'est bien la tout le danger de SAS pour lequel il est tres facile d'obtenir un resultat, mais pas forcement celui qu'on souhaite. il est important je pense de maitriser la theorie statistique, et etre sur que le code sas que l'on ecrit correspond bien a la modelisation que l'on souhaite (sans message personnel). Si j'ai le temps je vais regarder un peu plus le cas de la deuxieme glm

Manoutz
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 11h26   #6
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
http://support.sas.com/documentation...lm_sect018.htm

Citation:
Beginning with SAS 6.12, the variance of the difference between weighted group means for group and is computed as

MSE*(1/Wi+1/Wj)

where Wi is the sum of the weights for the observations in group i.
PROC GLM var calculer une variance poolee entre les groupes, ce qui va determiner une meilleure estimation de la variance entre les groupes.

PROC MEANS calcule une variance separement pour chaque categorie de ton by, basee une nombre de degres de liberte inferieur.
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 15h15   #7
Invité de passage
 
Inscription : septembre 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 2
Points : 2
Points : 2
Merci Manoutz pour cette réponse précise.

Cela a pu m'éclairer et je pense résoudre mon probleme.

En fait mes poids entre les groupes etaient totalement déséquilibrés:

975(groupe 1) vs 1 800 000(groupe 2).

Ce qui me donnait une variance enorme pour le groupe 2. Le résultat de la p-value grace à l'anova (qui se base sur la variance) etait donc systématiquement non significatif. J'ai donc 'standardisé' mes poids pour se baser sur une comparaison de groupe homogène.

Bonne journée à tous.
bouchéen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 16h00   #8
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
Une autre possibilite pour gerer l'heteroscedasticite consiste a utiliser la proc mixed qui permet de travailler avec variances inegales.

En utilisant le group= dans un statement repeted sans variable, on aura une estimation des residues propre a chaque categorie. C'est assez puissant, et en plus on a le test du maximum de vraisemblance genere automatiquement qui permet de se prononcer directement sur l'homoscedasticite
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h46.


 
 
 
 
Partenaires

Hébergement Web