Forum de Statistiques
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Les posteurs les plus actifs de la semaine
Aucun utilisateur

-15%
Le deal à ne pas rater :
(Adhérents) LEGO® Icons 10318 Le Concorde
169.99 € 199.99 €
Voir le deal

Comment simuler des données appariées sans inflation du SD

3 participants

Aller en bas

données - Comment simuler des données appariées sans inflation du SD Empty Comment simuler des données appariées sans inflation du SD

Message par zezima Ven 15 Sep 2017 - 15:26

Bonjour,

Je suis en train d'essayer de simuler des données appariées réalistes.

Le modèle que je veux faire est NULL, pour 4 groupes.
Moyenne_1=0
Moyenne_2=0
Moyenne_3=0
Moyenne_4=0
SD pour chaque groupe=1
Les groupes sont appariés.

Code:
Null1=rnorm(120000,0,1)
Null2=Null1+rnorm(120000,0,1)
Null3=Null2+rnorm(120000,0,1)
Null4=Null3+rnorm(120000,0,1)
boxplot(Null1,Null2,Null3,Null4)


J'ai réalisé ma simulation en prenant chaque donnée au temps t et en additionnant une loi normale simulée de même moyenne et même variance.

Mais au final, chaque groupe est plus variant que les précédents.

Savez-vous quel SD il faut choisir pour chaque nouveau groupe pour éviter une inflation du SD (qui doit surement être dû à la variance intra-sujet que je récupère à chaque fois ?

Merci d'avance
zezima
zezima

Nombre de messages : 939
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

données - Comment simuler des données appariées sans inflation du SD Empty Re: Comment simuler des données appariées sans inflation du SD

Message par Ayana Ven 15 Sep 2017 - 17:20

Bonjour,

Var(X+Y)=Var(X)+Var(Y)+2Cov(X,Y)

Par exemple ici Null2=Null1+N(0,1) donc sd(Null2)=sqrt(2) car tes variables sont independantes.

Ce que tu peux faire c'est utiliser une loi multivariee normale (fonction rmvnorm du package ‘mvtnorm`) ou tu as juste a specifier ton vecteur de moyennes et ta matrice de variance/covariance.

Ayana
Ayana
Ayana

Nombre de messages : 550
Localisation : Londres
Date d'inscription : 18/08/2009

Revenir en haut Aller en bas

données - Comment simuler des données appariées sans inflation du SD Empty Re: Comment simuler des données appariées sans inflation du SD

Message par Eric Wajnberg Dim 17 Sep 2017 - 9:29

Je ne suis pas sûr de bien comprendre la démarche de simulation adoptée. Le but est de simuler des données appariées, or la procédure proposée simule plutôt des données corrélées, ce qui n'est pas forcément la même chose.

Par ailleurs, l'inflation de la variance est due au fait que chaque série vient de la précédente.

Pourquoi ne pas simplement faire:

Code:
Null1=rnorm(120000,0,1)
Null2=Null1+rnorm(120000,0,1)
Null3=Null1+rnorm(120000,0,1)
Null4=Null1+rnorm(120000,0,1)
boxplot(Null1,Null2,Null3,Null4)
Dans ce cas, il n'y a plus d'inflation de la variance, et les données restent bien corrélées deux-à-deux (encore une fois si c'est ce qui est souhaité).

Si vraiment le but est de simuler des données corrélées plutôt qu'appariées, alors la procédure proposée par Ayana (qui passe par la décomposition de Cholesky de la matrice de variance-covariance) est évidement préférable.

HTH, Eric.
Eric Wajnberg
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

données - Comment simuler des données appariées sans inflation du SD Empty Re: Comment simuler des données appariées sans inflation du SD

Message par zezima Lun 18 Sep 2017 - 11:04

Bonjour et merci à tous les deux pour vos réponses.

Ayana
Merci pour l'astuce, je pense essayer ce package, on peut donc bien simuler des données appariées ?
Et d'après la formule que tu m'as donné, ma méthode pour créer Null2 est mauvaise car dans tous les cas j'aurais un SD plus grand.

On est en droit de se demander du coup, est-ce qu'on n'est pas censé en théorie avoir une variabilité plus importante entre chaque temps ?

Eric
En faite je veux que valeur d'un individu à un temps ait sa valeur dépendant de la valeur précédente (par exemple un patient ayant une valeur grande au temps 0 aura une valeur autour de cette grande valeur au temps 1).

Selon toi, il est normal dans une série temporelle d'avoir une inflation de la variance à force d'avancer dans le temps (pour des données appariées) ?

Merci pour ce code mais ce que j'essaie de faire est d'avoir chacune des valeur appariées sur les 4 temps. Or ici ils ne sont appariés que sur 2 temps.
zezima
zezima

Nombre de messages : 939
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

données - Comment simuler des données appariées sans inflation du SD Empty Re: Comment simuler des données appariées sans inflation du SD

Message par zezima Lun 18 Sep 2017 - 13:50

Rebonjour,

Ayana, j'ai testé la fonction que tu m'as proposé, cependant je n'ai aucune idée de quelle covariance prendre :

Code:
library(mvtnorm)

sigma <- matrix(c(13^2,100,100,13^2), ncol=2)
x <- rmvnorm(n=50000, mean=c(72,72), sigma=sigma)
colMeans(x)
var(x)

sd(x[,1]);sd(x[,2])

cor.test(x[,1],x[,2])

boxplot(x[,1],x[,2])

J'ai pris 100, mes données sont un peu corrélées mais je n'ai aucune idée de quelle valeur choisir, sais-tu comment on peut procéder ?

Merci d'avance
zezima
zezima

Nombre de messages : 939
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

données - Comment simuler des données appariées sans inflation du SD Empty Re: Comment simuler des données appariées sans inflation du SD

Message par Eric Wajnberg Lun 18 Sep 2017 - 23:11

zezima a écrit:En faite je veux que valeur d'un individu à un temps ait sa valeur dépendant de la valeur précédente (par exemple un patient ayant une valeur grande au temps 0 aura une valeur autour de cette grande valeur au temps 1).
Le fait que les données ait une structure longitudinale ne change rien. Le problème reste le même, et travailler sur la décomposition de cholesky de la matrice de variance-covariance est la bonne, je pense.
zezima a écrit:Selon toi, il est normal dans une série temporelle d'avoir une inflation de la variance à force d'avancer dans le temps (pour des données appariées) ?
Non. Ca dépend de la méthode de simulation adoptée.
zezima a écrit:Merci pour ce code mais ce que j'essaie de faire est d'avoir chacune des valeur appariées sur les 4 temps. Or ici ils ne sont appariés que sur 2 temps.
Dans mon code, les données sont corrélées sur les 4 temps:
Code:
Null1=rnorm(120000,0,1)
Null2=Null1+rnorm(120000,0,1)
Null3=Null1+rnorm(120000,0,1)
Null4=Null1+rnorm(120000,0,1)
cor(Null1,Null4)
[1] 0.7102614

Enfin, je vois toujours une confusion entre "appariées" et "corrélées". On peut avoir des données appariées qui ne sont pas corrélées, et réciproquement.

HTH, Eric.
Eric Wajnberg
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

données - Comment simuler des données appariées sans inflation du SD Empty Re: Comment simuler des données appariées sans inflation du SD

Message par zezima Mar 19 Sep 2017 - 7:35

Merci,

D'accord, je vais même faire en sorte que la corrélation soit proche de 0 car le hasard voudrait ça sur un échantillonnage aléatoire.
Je vais également explorer la décomposition de Cholesky.

Pour le coup la caractéristique qui m'intéresse vraiment c'est l'appariement de mes données mais dans le code que tu as écrit je ne vois pas en quoi elles sont appariées.
L'échantillon 1 est apparié avec tous les autres échantillons mais on ne peut pas en dire autant des échantillons 2, 3 et 4.

Eric Wajnberg a écrit:Non. Ca dépend de la méthode de simulation adoptée.
Oui et d'ailleurs c'est dommage car je viens de voir qu'un groupe de travail de l'ENSAI a présenté récemment à la sfds le sujet "Biais liés aux méthodes d'appariement des données".
zezima
zezima

Nombre de messages : 939
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

données - Comment simuler des données appariées sans inflation du SD Empty Re: Comment simuler des données appariées sans inflation du SD

Message par Eric Wajnberg Mar 19 Sep 2017 - 8:27

La décomposition de Cholesky est la méthode utilisée dans la solution proposée par Ayana. Dans le code que je donne, toutes les quatre variables sont corrélées entres elles. On pourra le vérifier, au moins graphiquement, avec :
Code:
plot(data.frame(Null1,Null2,Null3,Null4))
Ceci vaut pour des données corrélées, pas nécessairement appariées (..).

HTH, Eric.
Eric Wajnberg
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

données - Comment simuler des données appariées sans inflation du SD Empty Re: Comment simuler des données appariées sans inflation du SD

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum