scipy.stats.random_correlation#
- scipy.stats.random_correlation = <scipy.stats._multivariate.random_correlation_gen object>[Quelle]#
Eine zufällige Korrelationsmatrix.
Gibt eine zufällige Korrelationsmatrix zurück, gegeben einen Vektor von Eigenwerten. Die zurückgegebene Matrix ist symmetrisch positiv semidefinit mit Einheiten auf der Diagonalen.
Der Parameter eigs gibt die Eigenwerte der Korrelationsmatrix an und impliziert die Dimension.
- Parameter:
- eigs1D-ndarray
Eigenwerte der Korrelationsmatrix. Alle Eigenwerte müssen nicht-negativ sein und zu der Anzahl der Eigenwerte summieren.
- seed{None, int,
numpy.random.Generator,numpy.random.RandomState}, optional Wenn seed None ist (oder np.random), wird die Singleton-Instanz von
numpy.random.RandomStateverwendet. Wenn seed eine Ganzzahl ist, wird eine neueRandomState-Instanz mit seed initialisiert. Wenn seed bereits eineGenerator- oderRandomState-Instanz ist, wird diese Instanz verwendet.- tolfloat, optional
Toleranz für die Überprüfung von Eingabeparametern
- diag_tolfloat, optional
Toleranz für Abweichungen der Diagonalen der resultierenden Matrix. Standard: 1e-7
Methoden
rvs(eigs=None, random_state=None)
Zieht zufällige Korrelationsmatrizen, alle mit Eigenwerten eigs.
- Rückgabe:
- rvsndarray oder Skalar
Zufällige N-dimensionale Matrizen, Dimension (Größe, dim, dim), die jeweils Eigenwerte eigs haben.
- Löst aus:
- RuntimeError
Ein Gleitkommafehler verhinderte die Erzeugung einer gültigen Korrelationsmatrix.
Hinweise
Erzeugt eine zufällige Korrelationsmatrix nach einem numerisch stabilen Algorithmus, der von Davies & Higham beschrieben wird. Dieser Algorithmus verwendet eine einzelne O(N) Ähnlichkeitstransformation, um eine symmetrische positiv semidefinitive Matrix zu konstruieren, und wendet eine Reihe von Givens-Rotationen an, um sie so zu skalieren, dass sie Einsen auf der Diagonalen hat.
Referenzen
[1]Davies, Philip I; Higham, Nicholas J; „Numerically stable generation of correlation matrices and their factors“, BIT 2000, Bd. 40, Nr. 4, S. 640–651
Beispiele
>>> import numpy as np >>> from scipy.stats import random_correlation >>> rng = np.random.default_rng() >>> x = random_correlation.rvs((.5, .8, 1.2, 1.5), random_state=rng) >>> x array([[ 1. , -0.02423399, 0.03130519, 0.4946965 ], [-0.02423399, 1. , 0.20334736, 0.04039817], [ 0.03130519, 0.20334736, 1. , 0.02694275], [ 0.4946965 , 0.04039817, 0.02694275, 1. ]]) >>> import scipy.linalg >>> e, v = scipy.linalg.eigh(x) >>> e array([ 0.5, 0.8, 1.2, 1.5])