Ungefärlig entropi
Inom statistik är en ungefärlig entropi ( ApEn ) en teknik som används för att kvantifiera mängden regelbundenhet och oförutsägbarheten av fluktuationer över tidsseriedata . Tänk till exempel två serier av data:
- Serie A: (0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, ...), som alternerar 0 och 1. Serie B
- : (0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, ...), som har antingen värdet 0 eller 1, slumpmässigt valt , var och en med sannolikhet 1/2.
Momentstatistik , såsom medelvärde och varians , kommer inte att skilja mellan dessa två serier. Inte heller kommer rangordningsstatistiken att skilja mellan dessa serier. Ändå är serie A helt regelbunden: att veta att en term har värdet 1 gör det möjligt för en att med säkerhet förutsäga att nästa term kommer att ha värdet 0. Däremot värderas serie B slumpmässigt: att veta att en term har värdet 1 ger ingen insikt i vilket värde nästa termin kommer att ha.
Regularitet mättes ursprungligen med exakt regularitetsstatistik, som huvudsakligen har fokuserat på olika entropimått. Men noggrann entropiberäkning kräver stora mängder data, och resultaten kommer att påverkas mycket av systembrus, därför är det inte praktiskt att tillämpa dessa metoder på experimentella data. ApEn utvecklades av Steve M. Pincus för att hantera dessa begränsningar genom att modifiera en exakt regularitetsstatistik, Kolmogorov–Sinai-entropi . ApEn utvecklades ursprungligen för att analysera medicinska data, såsom hjärtfrekvens, och senare spred dess tillämpningar inom finans , fysiologi , mänskliga faktorteknik och klimatvetenskap.
Algoritm
En omfattande steg-för-steg handledning med en förklaring av de teoretiska grunderna för Approximate Entropy är tillgänglig. Algoritmen är:
- Steg 1
- Antag en tidsserie av data . Dessa är rådatavärden från mätningar jämnt fördelade i tid.
- Steg 2
-
Låt vara ett positivt heltal , med , som representerar längden på en datakörning (i huvudsak ett fönster ). Låt vara ett positivt reellt tal , som anger en filtreringsnivå. Låt . - Steg 3
-
Definiera för varje där . Med andra ord, är en -dimensionell vektor som innehåller datakörningen som börjar med . Definiera avståndet mellan två vektorer och som maximum av avstånden mellan deras respektive komponenter, ges av - för .
- Steg 4
- Definiera ett antal som
- för varje där . Observera att eftersom tar på sig alla värden mellan 1 och , kommer matchningen att räknas när (dvs. när testföljden, , matchas mot sig själv, ).
- Steg 5
- Definiera
- där är den naturliga logaritmen , och för en fast , , och enligt steg 2.
- Steg 6
- Definiera ungefärlig entropi ( ) som
- Parameterval
- Välj vanligtvis eller , medan beror mycket på applikationen.
En implementering på Physionet, som är baserad på Pincus, använd istället för i steg 4. Medan en oro för artificiellt konstruerade exempel, är det vanligtvis inte ett bekymmer i praktiken.
Exempel
Betrakta en sekvens av prover av hjärtfrekvens jämnt fördelade i tid:
Observera att sekvensen är periodisk med en period på 3. Låt oss välja och (värdena för och kan varieras utan att resultatet påverkas).
Bilda en sekvens av vektorer:
Avståndet beräknas upprepade gånger enligt följande. I den första beräkningen,
- som är mindre än .
I den andra beräkningen, notera att så
- som är större än .
Liknande,
Resultatet är totalt 17 termer så att . Dessa inkluderar . I dessa fall är
Notera i steg 4, för . Så termerna så att inkluderar och det totala antalet är 16.
I slutet av dessa beräkningar har vi
Sedan upprepar vi ovanstående steg för . Bilda först en sekvens av vektorer:
Genom att beräkna avstånd mellan vektorn , Vi finner att vektorerna som uppfyller filtreringsnivån har följande egenskaper:
Därför,
I slutet av dessa beräkningar har vi
Till sist,
Värdet är mycket litet, så det antyder att sekvensen är regelbunden och förutsägbar, vilket överensstämmer med observationen.
Python implementering
importera numpy som np def ApEn ( U , m , r ) -> float : """Approximate_entropy.""" def _maxdist ( x_i , x_j ): return max ([ abs ( ua - va ) för ua , va in zip ( x_i , x_j )]) def _phi ( m ): x = [[ U [ j ] för j i intervall ( i , i + m - 1 + 1 )] för i i intervall ( N - m + 1 )] C = [ len ([ 1 för x_j i x om _maxdist ( x_i , x_j ) <= r ]) / ( N - m + 1,0 ) för x_i i x ] returnera ( N - m + 1,0 ) ** ( - 1 ) * summa ( np . log ( C )) N = len ( U ) return abs ( _phi ( m + 1 ) - _phi ( m ))
Användningsexempel:
>>> U = np . array ([ 85 , 80 , 89 ] * 17 ) >>> print ( ApEn ( U , 2 , 3 )) 1.0996541105257052e-05 >>> randU = np . slumpmässigt . val ([ 85 , 80 , 89 ], storlek = 17 * 3 ) >>> print ( ApEn ( randU , 2 , 3 )) 0,8626664154888908
MATLAB implementering
- Snabb Ungefärlig Entropi från MatLab Central
- ungefärlig Entropi
Tolkning
Närvaron av repetitiva fluktuationsmönster i en tidsserie gör den mer förutsägbar än en tidsserie där sådana mönster saknas. ApEn återspeglar sannolikheten att liknande observationsmönster inte kommer att följas av ytterligare liknande observationer. En tidsserie som innehåller många repetitiva mönster har en relativt liten ApEn; en mindre förutsägbar process har en högre ApEn.
Fördelar
Fördelarna med ApEn inkluderar:
- Lägre beräkningsbehov. ApEn kan utformas för att fungera för små dataprover ( punkter) och kan appliceras i realtid.
- Mindre effekt från buller. Om data är bullriga kan ApEn-måttet jämföras med brusnivån i data för att bestämma vilken kvalitet på sann information som kan finnas i data.
Begränsningar
ApEn-algoritmen räknar varje sekvens som matchande sig själv för att undvika förekomsten av i beräkningarna. Detta steg kan introducera bias i ApEn, vilket gör att ApEn har två dåliga egenskaper i praktiken:
- ApEn är starkt beroende av rekordlängden och är jämnt lägre än förväntat för korta skivor.
- Det saknar relativ konsekvens. Det vill säga, om ApEn för en datamängd är högre än den för en annan, bör den, men inte, förbli högre för alla testade förhållanden.
Ansökningar
ApEn har använts för att klassificera elektroencefalografi (EEG) vid psykiatriska sjukdomar, såsom schizofreni, epilepsi och beroende.