Salut!
Je travaille avec diverses données de diagraphie de puits pétrophysiques de 14 puits dans mon ensemble de données. Les données de journalisation ont des valeurs manquantes qui ont été identifiées à différents intervalles et je voudrais imputer ces valeurs de différentes manières pour voir quelles techniques sont les meilleures. J'utilise le panneau Explorer les valeurs manquantes pour implémenter l'imputation d'une variable où les données sont présentes à une autre variable où des données sont manquantes dans le même puits (par exemple: Des données de rayons gamma sont manquantes dans le puits à un intervalle de 50 ft mais des données de densité sont présentes. Mais que se passe-t-il si je souhaite utiliser une variable de journalisation dans un puits pour imputer les valeurs manquantes dans la même variable de journalisation mais dans un autre puits proche? Par exemple, si j'ai des données de rayons gamma dans un puits à des profondeurs de 4 000 à 6 000 pieds et qu'un autre puits à proximité manque dans le rayon Gamma à des profondeurs de 5 000 à 5 800 pieds, comment utiliser la même variable (même colonne) pour imputer les valeurs manquantes bien avec différentes coordonnées XY? Merci!
Mélanie
Vous trouverez ci-dessous un exemple de calcul d'une valeur pour une tête de puits en prenant les têtes de puits entourant la tête de puits qui a la valeur manquante, en faisant la moyenne de leurs valeurs et en réglant la tête de puits avec la valeur manquante sur la valeur moyenne.
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;
)
);Merci pour la réponse! Je vais essayer ça.