Scripting pour interpoler les données météorologiques de séries chronologiques manquantes ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Avec les données météorologiques à intervalle horaire, il y a parfois des points de données manquants (lectures manquées).J'aimerais interpoler les points de données manquants - la température, l'humidité, la pression barométrique changent généralement progressivement au cours d'une journée.J'aimerais interpoler entre la dernière et la prochaine valeur de série chronologique dans une colonne pour obtenir la ou les valeurs manquantes pour nettoyer les données.L'imputation à l'aide de "Explorer les valeurs manquantes" fournit des résultats dénués de sens en regardant à travers les lignes, j'ai besoin d'un moyen simple de remplir les points manquants dans les colonnes à utiliser avec d'autres calculs comme les degrés-jours de chauffage, les degrés-jours de refroidissement, etc.
Conceptuellement, la logique semble simple : lorsque vous rencontrez une valeur manquante dans la ligne suivante d'une colonne, comptez le nombre de points de données manquants jusqu'à la valeur suivante, puis interpolez en fonction du nombre de points de données manquants.La logique semble être : vérifier une colonne pour les données manquantes, avec des données manquantes puis compter les intervalles manquants, puis remplir les intervalles manquants avec (valeur suivante - dernière valeur / nombre d'intervalles manquants) ajoutés à la dernière valeur.
Quelqu'un avec une meilleure expertise en scripting que moi a une solution?
Cela a-t-il déjà été résolu ?Ou existe-t-il des fonctions déjà intégrées à JMP ?
Re : Script pour interpoler les données météorologiques de séries chronologiques manquantes ?Beaucoup de commentaires semblent avoir ignoré que vous avez des données de séries chronologiques. En supposant que vos données présentent une autocorrélation, vous pouvez utiliser la fonction JSL INTERPOLATE. Ou SPLINE SMOOTH si vous avez besoin d'une interpolation non linéaire.

Re : Script pour interpoler les données météorologiques de séries chronologiques manquantes ?.... que diriez-vous de scripter l'ajustement de la spline ?
g
Re : Script pour interpoler les données météorologiques de séries chronologiques manquantes ?Juste parce que tu peut faire quelque chose ne signifie pas que vous devrait !
On ne sait toujours pas exactement quelles informations vous souhaitez tirer de vos données, mais si vous effectuez une inférence (test d'hypothèse, intervalles de confiance, etc.) sur les données avec les imputations uniques, vous devez être conscient que vous avez biaisé toutes les variances de le paramètre estime vers zéro, affectant la qualité de toute inférence effectuée ultérieurement sur les données.
Peut-être qu'aucune inférence ne sera jamais faite sur ces données et ce n'est pas un problème pour vous.Dans ce cas, imputez comme vous le souhaitez.
Re : Script pour interpoler les données météorologiques de séries chronologiques manquantes ?La solution la plus simple pourrait être d'utiliser la plateforme Fit-Y-By-X si les données manquantes sont occasionnelles. Si vous mettez votre colonne de temps en tant que X (doit être numérique continu) et les variables météorologiques en tant que Y. Vous pouvez ensuite ajuster une spline à partir du menu hotspot (vous devrez expérimenter avec la valeur de Change Lambda à utiliser).
À partir du point chaud de la spline, sélectionnez la sauvegarde prévue. Ces nouvelles colonnes contiendront les valeurs manquantes sur lesquelles vous pourrez effectuer vos calculs (ou vous pouvez faire un peu de script pour utiliser la nouvelle valeur uniquement là où les originaux sont manquants). Étant donné que les données météorologiques sont souvent un changement graduel, cela devrait donner une imputation raisonnable.
Re : Script pour interpoler les données météorologiques de séries chronologiques manquantes ?Concernant la suggestion de Ron ci-dessus, je voulais juste indiquer que 'RandomIndex()' supprimera l'incertitude sur le nombre de valeurs décimées. Ainsi les premières lignes deviennent :
dt = Ouvrir ( "$SAMPLE_DATA/Séries temporelles/CO2.jmp" ) ;
// Définir n valeurs de CO2 comme manquantes
n = 25 ;
dt : CO2 [ IndexAléatoire ( NRanges ( dt ) , n )] = . ;
Concernant la méthode en général, alors s'il vous plaît voir aussi: https://community.jmp.com/message/217292#217292
Re : Script pour interpoler les données météorologiques de séries chronologiques manquantes ?Salut jthornton1 ,
dans le passé, j'ai fait quelque chose de similaire à ce que vous mentionnez. ce n'est ni le plus rapide ni le plus simple mais il pourrait faire l'affaire.
une fois que vous avez une colonne de durée et une colonne de différence (et le temps que vous aviez de la source), vous pouvez compliquer la formule d'imputation autant que vous le souhaitez.
Noms par défaut ici ( 1 ) ;
// ouvre l'ensemble de données d'origine
dt = Ouvrir ( "$SAMPLE_DATA/Séries temporelles/CO2.jmp" ) ;
// supprime environ 25 lignes aléatoires
Pour ( je = 1 , je <= 25 , je ++,
X = Entier aléatoire ( 161 ) ;
dt : co2 [ X ] = . ;
) ;
// à ce stade, vous avez juste une donnée avec des valeurs manquantes.
// ajouter une colonne pour le temps - si vous en avez une, vous n'en avez pas besoin.
dt << Nouvelle colonne ( "t" ) ;
Pour chaque ligne ( : t = Ligne () ) ;
// c'est ici que vous commencez
// crée un sous-ensemble de la table d'origine et supprime les lignes avec des valeurs manquantes.
dtSub = dt << Sous-ensemble ( Toutes les lignes , Colonnes ( : CO2 , : t ) ) ;
dtSub << supprimer des lignes ( dtSub << obtenir des lignes où ( Est manquant ( : co2 ) ) ) ;
// introduire la colonne de durée
dtSub << Nouvelle colonne ( "Durée" ) ;
Pour chaque ligne ( : Durée = Décalage ( : t , - 1 ) - : t ) ;
// introduire le changement de co2 d'une ligne à l'autre.
dtSub << Nouvelle colonne ( "changement de co2" ) ;
Pour chaque ligne ( : Nom ( "changement de co2" ) = Décalage ( : Nom ( "co2" ) , - 1 ) - : Nom ( "co2" ) ) ;
// met à jour la durée et la différence avec la table d'origine ;
dt << mise à jour ( avec ( dtSub ) , Faire correspondre les colonnes ( : t = : t ) ) ;
// ferme la table des sous-ensembles
Fermer ( dtSub , pas de sauvegarde ) ;
// remplir les lignes manquantes - besoin pour l'étape suivante
Pour chaque ligne ( : Durée = Si ( Est manquant ( : Durée ) , Décalage ( : Durée , 1 ) , : Durée ) ) ;
Pour chaque ligne ( : Nom ( "changement de co2" ) = Si ( Est manquant ( : Nom ( "changement de co2" ) ) , Décalage ( : Nom ( "changement de co2" ) , 1 ) , : Nom ( "changement de co2" ) ) ) ;
// vous pouvez maintenant remplir les valeurs manquantes avec une formule dans une nouvelle colonne ou dans celle existante
dt << Nouvelle colonne ( "plein de co2" ) ;
Pour chaque ligne (
: Nom ( "plein de co2" ) = Si (
Ligne () == 1 , : CO2 ,
: Durée == 1 , : CO2 ,
: Durée > 1 , Décalage ( : Nom ( "plein de co2" ) , 1 ) + ( : Nom ( "changement de co2" ) / : Durée )
)
) ;
Re : Script pour interpoler les données météorologiques de séries chronologiques manquantes ?Salut, jthornton1 !
Je commence généralement à m'inquiéter lorsque ma logique semble simple !
Votre idée d'interpolation semblerait souffrir d'un biais extrême si 24 heures consécutives manquaient dans une journée.Je suppose que votre interpolation de la température de minuit à minuit, par exemple, passerait à côté des effets de réchauffement du soleil pendant la journée.Même avec seulement quelques points manquants, la méthode que vous proposez (appelée imputation unique) ne reflète pas correctement l'incertitude sur les prédictions des valeurs manquantes inconnues, et les variances des estimations des paramètres de toute analyse de ces données seront incorrectement biaisées vers zéro.C'est un problème même si vous utilisez des statistiques (moyenne, médiane, etc.) pour chaque période de données complètes.
Je pense que l'état de l'art actuel pour une approche pour traiter votre problème est l'imputation multiple.Au lieu de remplir une seule valeur pour chaque donnée manquante, l'imputation multiple remplace chaque valeur manquante par un ensemble de valeurs plausibles qui représentent l'incertitude sur la valeur correcte à imputer. Les ensembles de données imputés sont chacun analysés à l'aide de procédures standard pour des données complètes et les résultats de ces analyses sont ensuite combinés.L'imputation multiple ne tente pas d'estimer chaque valeur manquante en elle-même, mais plutôt de représenter un échantillon aléatoire de valeurs manquantes plausibles. Ce processus aboutit à des inférences statistiques qui reflètent plus correctement l'incertitude due aux valeurs manquantes.Par exemple, vous pouvez obtenir des intervalles de confiance légitimement valides pour les paramètres.
SAS a des procédures qui implémentent l'imputation multiple de manière très efficace.JMP s'intègre bien avec SAS.Bonne chance!