Hallo!
Ich arbeite mit verschiedenen petrophysikalischen Bohrlochprotokolldaten aus 14 Bohrlöchern in meinem Datensatz. Die Protokolldaten weisen fehlende Werte auf, die in unterschiedlichen Intervallen identifiziert wurden, und ich möchte diese Werte auf verschiedene Arten unterstellen, um festzustellen, welche Techniken am besten geeignet sind. Ich habe das Fenster "Explore Missing Values" verwendet, um die Imputation von einer Variablen, in der Daten vorhanden sind, in eine andere Variable zu implementieren, in der Daten im selben Bohrloch fehlen (z. B. Gammastrahldaten fehlen in einem Abstand von 50 Fuß im Bohrloch, es liegen jedoch Dichtedaten vor). Aber was ist, wenn ich eine Protokollvariable in einem Brunnen verwenden möchte, um fehlende Werte in derselben Protokollvariablen, aber in einem anderen nahe gelegenen Brunnen zu unterstellen? Wenn beispielsweise in einem Bohrloch in einer Tiefe von 4000 bis 6000 Fuß Gamma Ray-Daten vorliegen und in einem anderen in der Nähe Gamma Ray in einer Tiefe von 5000 bis 5800 Fuß fehlt, wie kann ich dieselbe Variable (dieselbe Spalte) verwenden, um fehlende Werte in a zu unterstellen? gut mit verschiedenen XY-Koordinaten? Vielen Dank!
Melanie
Im Folgenden finden Sie ein Beispiel für die Berechnung eines Werts für einen Bohrlochkopf, indem die Bohrlochköpfe, die den fehlenden Wert aufweisen, um den Bohrlochkopf herum berechnet und deren Werte gemittelt werden und der Bohrlochkopf mit dem fehlenden Wert auf den gemittelten Wert gesetzt wird.
Names Default To Here( 1 );
// Create a new table to use
dt = New Table( "Untitled 7",
Add Rows( 2500 ),
New Column( "x", Numeric, "Continuous", Format( "Best", 12 ), Set Display Width( 42 ) ),
New Column( "y", Numeric, "Continuous", Format( "Best", 12 ), Set Display Width( 83 ) ),
New Column( "data", Numeric, "Continuous", Format( "Best", 12 ), )
);
// Populate the data, leaving 2% missing data
theRow = 0;
For( i = 1, i <= 50, i++,
For( k = 1, k <= 50, k++,
theRow = theRow + 1;
:x[theRow] = i;
:y[theRow] = k;
If( Random Integer( 0, 100 ) <= 98,
:data[theRow] = Random Uniform( 800, 1000 ),
:data[theRow] = .;
write("\!nMissing value for row ", therow)
);
)
);
// Impute missing values by averaging the well heads around the missing value
For( theRow = 1, theRow <= N Rows( dt ), theRow++,
If( Is Missing( :data[theRow] ) == 1,
minX = :x[theRow] - 1;
If( minX < 1, minX = 1 );
maxX = :x[theRow] + 1;
If( maxX > 50, maxX = 50 );
minY = :y[theRow] - 1;
If( minY < 1, minY = 1 );
maxY = :y[theRow] + 1;
If( maxY > 50, maxY = 50 );
impute = 0;
count = 0;
For( i = minX, i <= maxX, i++,
For( k = minY, k <= maxY, k++,
theValue = dt:data[dt << get rows where( dt:x == i & dt:y == k )][1];
If( Is Missing( theValue ) == 0,
count
++);
impute = Sum( impute, theValue );
)
);
:Data[theRow] = impute / count;
)
);Danke für die Antwort! Ich werde das versuchen.