log normal inv

21did21

XLDnaute Junior
salut tous,

je suis pas très à l'aise avec les distributions et je ne sais pas trop comment en obtenir une avec excel donc j'espere que vous pourrait m'aider :eek:

=> en fait je voudrais à partir de deux données obtenir deux distribution log normal inversées mais tout en respectant un certain critere.

je m'explique :
-j'ai Yi echantillons différents qui ont chacun Xi dimensions différentes.
(je veux determiner les Yi et Xi)

je voudrais fixer une dimension moyenne sum(Yi*Xi)/sumXi et un volume moyen sum(Yi*Xi^3) et à partir de ceci obtenir deux distributions différentes:
1°) une étalée
2°) une étroite
mais elles suivraient toutes les deux une loi lognormal inversée et auraient toutes les deux la meme dimension moyenne et meme volume moyen

savez vous comment je peux faire ceci ?

perso je ne vois pas du tout :confused:
 

21did21

XLDnaute Junior
Re : log normal inv

merci beaucoup fhoest, ce cours m'aide deja beaucoup !

je viens d'essayer ceci:
=LOI.LOGNORMALE.INVERSE(ALEA.ENTRE.BORNES(3e-9,5e-7),1e-6,0.05)

mais le probleme est que excel me dit que le resultat de ceci n'est pas un nombre..
je ne comprends pas trop pourquoi
 

fhoest

XLDnaute Accro
Re : log normal inv

Bonjour,
le problème vient du fait que alea.entre.bornes retourne une valeur entre 1 et 100 donc par defaut vu le min et max valeur=1
si tu met la valeur 1 comme chiffre de probabilté la loi.lognormale.inverse retourne une erreur tu dois etre compris entre 0 et 1 essaie par exemple avec la valeur 0,0009 tu verra la formule fonctionnecependant tu dois mettre des ; a la place des , et une , a la place du . de 0.05
c'est sans doute de la que le problème se trouve
A bientôt
 

21did21

XLDnaute Junior
Re : log normal inv

- super, merci pour ton aide, la fonction me renvoie bien un nombre à présent !

==> par contre je n'ai pas compris comment faire pour avoir ma distribution.

par exemple si je veux avoir une taille moyenne d'échantillon de 5e-9 avec un certain ecart type comment dois je faire ?
je n'ai pas trop compris comment générer une distribution avec cette fonction...
 

Dranreb

XLDnaute Barbatruc
Re : log normal inv

Bonjour.
J'utilise ce code pour engendrer des nombre aléatoires en distribution normale:
VB:
Function AléatN(ByVal ÉTyp As Double, ParamArray Moy() As Variant) As Variant
Dim TRés() As Double, N As Long, Np As Long, AléN1 As Double: Static AléN2 As Double, DéjàDonné As Boolean
If UBound(Moy) = 0 Then
   GoSub Donner: AléatN = Moy(0) + AléN1 * ÉTyp
Else
   ReDim TRés(1 To UBound(Moy) + 1) As Double
   Np = 0: N = 1: Do:
      GoSub Donner: TRés(N) = Moy(Np) + AléN1 * ÉTyp: If N = UBound(TRés) Then Exit Do
      Np = N: N = N + 1: Loop
   AléatN = TRés
   End If
Exit Function
Dim AléU1 As Double, AléU2 As Double, S As Double
Donner: If DéjàDonné Then
   AléN1 = AléN2: DéjàDonné = False
Else:                 AléU1 = Aléat * 2 - 1
   Do: AléU2 = AléU1: AléU1 = Aléat * 2 - 1: S = AléU1 * AléU1 + AléU2 * AléU2: Loop Until S <= 1
   S = Sqr(-2 * Log(S) / S): AléN1 = AléU1 * S: AléN2 = AléU2 * S: DéjàDonné = True: End If
Return
End Function
'

Function Aléat(Optional ByVal G As Double = -1) As Double
Const Pi = 245850922 / 78256779 ' Sin(Pi) = 1,22460635382238E-16
'         Tandis que  Sin(165707065 / 52746197) = -3,21628574467825E-16
'         et pire encore: Sin(3.14159265358979) = 32,3108510433268 E-16
Static X As Double
If G >= 0 Then If G > 0 Then X = G Else X = Now / 2958466
X = (X + Pi) ^ 3: X = X - Int(X)
Aléat = X
End Function
Remarque: Rnd peut être utilisé à la place de mon Aléat perso.
Moi je ne l'utilise plus depuis que j'ai constaté de nombreux alignements d'étoiles en voulant m'en servir pour dessiner un ciel étoilé. Faire Aléat 0 pour équivalent de Randomize

Cordialement.
 
Dernière édition:

fhoest

XLDnaute Accro
Re : log normal inv

Rebonjour, & bonjour Danreb.
Pour générer simplement un nombre entre 0 et 1 il y a la fonction alea()
celle ci te permettra de générer ce que tu désire mais pour la plage de valeur il faudra faire une boucle dans le vba alors autant utilisé le code de danreb qui est tout cuit
A+
 

21did21

XLDnaute Junior
Re : log normal inv

merci dranreb pour ton code mais c'est un peu difficile pour debutant sur excel comme moi ...

en fait je vais reformuler ma demande car j'ai mieux compris ce que je cherche à faire à présent :eek:
(avant c'etait un peu flou dans ma tete)
désolé si je n'ai pas été précis...

contexte:
j'ai environ 1e22 échantillons qui ont une taille moyenne de 3e-9. Je pourrais me contenter de cette information pour caractériser cette population mais ce n'est pas suffisant. En effet, la taille de 3e-9 n'est qu'une taille moyenne en réalité il y a des échantillons qui ont une taille de 4e-8 et d'autres 1e-12.

Solution:
je sais que la distribution de taille de mes echantillons suit une loi log normal inversée. Je peux donc, sachant la valeur moyenne, le nombre d'échantillon et l'écart type dire à un logiciel comme excel de me generer une distribution de taille qui respect ces critères.

Probleme:
je n'arrive pas à comprendre comment je peux faire ceci avec excel.
- j'ai essayé de faire quelque chose avec la fonction que vous m'avez dit mais je me suis rendu compte que je n'arrivais pas à l'utiliser

Le soucis c'est que je m'attendais à rentrer une formule dans ce genre quelque part:
log.normal.inverse(1e22,3e-9,0.05)
et que ça me retourne directement deux colonnes dans excel "dimension" et "nombre" qui respectent cette loi log noramale inversée.

Ensuite, en traçant la colonne "nombre" en fonction de "dimension" j'obtiendrai un histogramme dans ce genre (image PJ):
 

Pièces jointes

  • distrib.jpg
    distrib.jpg
    29 KB · Affichages: 310

21did21

XLDnaute Junior
Re : log normal inv

merci pour ces lien intéressants !

du coup je pense que cette fonction n'est appliquée pour ce que je veux faire, c'est plutot le contraire avec cette fonction:
=> je connais la distribution et je veux en determiner qqch

or moi c'est le contraire de ceci
 

Dranreb

XLDnaute Barbatruc
Re : log normal inv

Bonsoir.
Une formule de ce genre donne l'enveloppe de votre courbe:
Code:
=LOI.NORMALE(LOG(x);LOG(a);b;FAUX)
avec:
x: une valeur d'abscisse > 0,
a: la valeur x pour laquelle la courbe est maxi
b: l'écart type des logarithmes des dimensions
À +

Edit
Pour engendrer des nombre aléatoires en distribution normale j'ai également cette fonction, plus courte, si elle vous arrange mieux :
VB:
Function DistrN(ByVal Rnd1 As Double, ByVal Rnd2 As Double, ByVal ÉTyp As Double, ParamArray Moy() As Variant) As Variant
Const Pi = 245850922 / 78256779, Pi×2 = 2 * Pi 
Dim Ax As Double, Ay As Double, S As Double
Rnd1 = Sqr(-2 * Log(Rnd1)) * ÉTyp: Rnd2 = Rnd2 * Pi×2
If UBound(Moy) = 1 Then
DistrN = Array(Moy(0) + Rnd1 * Cos(Rnd2), Moy(1) + Rnd1 * Sin(Rnd2))
Else: DistrN = Moy(0) + Rnd1 * Cos(Rnd2): End If
End Function
Mais elle a besoin de deux nombres aléatoires en distribution uniforme 0 à 1, bornes exclues, et ne peut rendre, contrairement à la première, une série de n nombres représentant les coordonnées d'un point dans un espace à n dimensions, n étant défini par le nombre de valeurs indiquées comme moyenne. Elle peut toutefois aller jusqu'à un nombre complexe: indiquer deux valeurs pour la moyenne et utiliser la fonction dans deux cellules contiguës horizontalement, validée par Ctrl+Maj+Entrée
Il va de soit que pour la distribution souhaitée en réalité il faut en prendre l'EXP et indiquer comme Moy le logarithme népérien de la valeur la plus probable, et comme Écart l'écart type des logarithmes.
Code:
=EXP(DistrN(ALEA();ALEA();Écart;Moy))
 
Dernière édition:

Statistiques des forums

Discussions
312 231
Messages
2 086 449
Membres
103 213
dernier inscrit
Poupoule