DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

Eliminierung von Ausreißern

Hallo, 

 

ich versuche gerade Ausreißer aus meinen Messdaten zu löschen. Dafür habe ich, um den Bereich zu definieren, das obere und unter Quartil, sowie deren Abstand und die Spannweite berechnet. Die Messwerte sollen also in dem Bereich Q1 - 1,5*IQR und Q3 + 1,5*IQR liegen. Die Werte dafür habe ich berechnet. 

Ich würde gerne das Skript so schreiben, das Messwerte die größer sind als Q3 + 1,5*IQR und Messwerte die kleiner sind als Q1 - 1,5*IQR als NoValues deklariert und aus den Messwerten gelöscht werden. 

 

Liebe Grüße

Sabrina 

0 Kudos
Message 1 of 8
(380 Views)

Hallo SabrinaAnders,

 

Mit der Funktion IIF kann man, abhängig von einer Bedingung, Werte für den TRUE und FALSE Fall in einen Ergebniskanal schreiben.

 

Call Calculate("Ch(""Result"")=IIf( Ch(""Kanal_A"") < Grenze, Ch(""Kanal_A""), NoValue)")

 

Details zu IIF sind in der DIAdem Hilfe zu finden.

 

Gruß

Walter

0 Kudos
Message 2 of 8
(349 Views)

Hallo Walter, 

 

danke für die Antwort. 

 

SabrinaAnders_0-1643015052814.png

Ich habe mein Problem versucht so zu lösen. Aber ich schaffe es nicht, dass Skript so zu programmieren, dass es die Werte aus dem Kanal subtracted und added übernimmt und diese Werte als Grenzwerte setzt.

 

Liebe Grüße

Sabrina

0 Kudos
Message 3 of 8
(342 Views)

Hallo Sabrina,

 

kannst du bitte das Script und passende Daten zur Verfügung stellen?

 

Gruß

Walter

0 Kudos
Message 4 of 8
(337 Views)

Hallo Walter,

 

okay alles klar mach ich.

 

Liebe Grüße Sabrina

Download All
0 Kudos
Message 5 of 8
(331 Views)

Hallo Sabrina,

 

Die Ergebnisse der Statistikberechnung sind Einzelwerte. Diese Ergebnisse in Kanäle zu speichern ist sinnvoll, wenn gleichzeitig für mehrere Kanäle diese Berechnungen durchgeführt werden.

Wenn für einen Kanal die Berechnung erfolgt, werden die Ergebnisse direkt als Eigenschaften an den Kanal gespeichert. Beispielhaft für eine Lösung der Aufgabe könnte folgendes Script sein:

dim oDX90Chn, oDX90ResChn
dim oGroupChns, oResGroupChns
dim dIQR1_5, dLQ, dUQ

call Data.Root.Clear
call DataFileLoad(CurrentScriptPath & "TestDaten.tdm")

set oGroupChns    = Data.Root.ChannelGroups(1).Channels
set oResGroupChns = Data.Root.ChannelGroups.Add("Results").Channels

set oDX90Chn     = oGroupChns("Dx (90)")
set oDX90ResChn  = oResGroupChns.Add("DX90_Result", DataTypeChnFloat64)

call ChnStatisticsChannelCalc(oDX90Chn, 92734, 0, 0, False, False)

dIQR1_5 = oDX90Chn.Properties("Result~Statistics~Dispersion~QuartileDistance").Value * 1.5
dLQ     = oDX90Chn.Properties("Result~Statistics~Quantiles~LowerQuartile").Value - dIQR1_5
dUQ     = oDX90Chn.Properties("Result~Statistics~Quantiles~UpperQuartile").Value + dIQR1_5

ChnEventList1 = ChnEventDetectionWindow("", oDX90Chn, dLQ, dUQ, 0, 0)
Call ChnEventCreateFilteredTrueChn(oDX90ResChn, ChnEventList1, oDX90Chn, NOVALUE)

 

Das sieht dann so aus:

 

Walter_Rick_0-1643025332987.png

Das Beispiel ist im Anhang gespeichert.

 

Gruß

Walter

0 Kudos
Message 6 of 8
(282 Views)

Hallo Walter, 

 

danke für deine schnelle Hilfe, es hat jetzt alles funktioniert. 

Ich hätte noch eine andere Frage und zwar ist es möglich, ausgehend von den definierten Ausreißer die ganze Zeile zu löschen und nicht nur diesen einen Wert? 

 

Liebe Grüße 

Sabrina 

0 Kudos
Message 7 of 8
(276 Views)

Hallo Sabrina,

 

Ja, die Funktion „NoValues Bearbeiten“ hat einen Steuerkanal und kann weitere Kanäle (die mit behandelt werden sollen) aufnehmen. Am besten schaust du dir einmal den Dialog an.

 

Walter_Rick_0-1643032917975.png

 

 

Call ChnNovHandle(oDX90ResChn, "'[1]/Dx (10)', '[1]/Dx (50)', '[1]/Dx (90)'", "Delete", "X", False, False, 0)

 

Gruß

Walter

0 Kudos
Message 8 of 8
(264 Views)