Scripting per interpolare i dati meteorologici delle serie temporali mancanti?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Con i dati meteorologici a intervalli orari ci sono punti dati mancanti occasionali (letture perse).Vorrei interpolare i punti dati mancanti: la temperatura, l'umidità e la pressione barometrica in genere cambiano gradualmente durante il giorno.Vorrei interpolare tra l'ultimo e il successivo valore della serie temporale in una colonna per ottenere i valori mancanti per pulire i dati.L'imputazione utilizzando "Esplora valori mancanti" fornisce risultati privi di significato guardando tra le righe, ho bisogno di un modo semplice per riempire i punti mancanti nelle colonne da utilizzare con altri calcoli come i giorni dei gradi di riscaldamento, i giorni dei gradi di raffreddamento, ecc.
Concettualmente la logica sembra semplice: quando si incontra un valore mancante nella riga successiva di una colonna, contare quanti punti dati mancanti fino al valore successivo, quindi interpolare in base al numero di punti dati mancanti.La logica sembra essere: controllare una colonna per i dati mancanti, con i dati mancanti quindi contare gli intervalli mancanti, quindi compilare gli intervalli mancanti con (valore successivo - ultimo valore/numero di intervalli mancanti) aggiunto all'ultimo valore.
Qualcuno con una migliore esperienza di scripting di me ha una soluzione?
Questo è già stato risolto?O ci sono funzioni già integrate in JMP?
Ri: Scripting per interpolare i dati meteorologici delle serie temporali mancanti?Molti commenti sembrano aver ignorato il fatto che tu disponga di dati di serie temporali. Presumendo che i tuoi dati mostrino l'autocorrelazione, puoi utilizzare la funzione JSL INTERPOLATE. O SPLINE SMOOTH se hai bisogno di un'interpolazione non lineare.

Ri: Scripting per interpolare i dati meteorologici delle serie temporali mancanti?.... che ne dici di scrivere lo script per l'adattamento della spline?
G
Ri: Scripting per interpolare i dati meteorologici delle serie temporali mancanti?Solo perché tu Potere fare qualcosa non significa te Dovrebbe !
Non è ancora chiaro esattamente quali informazioni desideri ottenere dai tuoi dati, ma se esegui qualsiasi inferenza (test di ipotesi, intervalli di confidenza, ecc.) sui dati con le singole imputazioni, dovresti essere consapevole che hai distorto tutte le varianze di il parametro stima verso lo zero, influenzando la qualità di eventuali inferenze successivamente eseguite sui dati.
Forse non verrà mai fatta alcuna inferenza su questi dati e non è un problema per te.In tal caso, imputa come preferisci.
Ri: Scripting per interpolare i dati meteorologici delle serie temporali mancanti?La soluzione più semplice potrebbe essere quella di utilizzare la piattaforma Fit-Y-By-X se i dati mancanti sono occasionali. Se metti la colonna del tempo come X (deve essere numerico continuo) e le variabili meteorologiche come Y. È quindi possibile adattare una spline dal menu dell'hotspot (dovrai sperimentare il valore di Change Lambda da utilizzare).
Dall'hotspot della spline seleziona il salvataggio previsto. Queste nuove colonne avranno i valori mancanti riempiti in cui puoi eseguire i tuoi calcoli (o potresti fare un po 'di scripting per utilizzare il nuovo valore solo dove mancano gli originali). Poiché i dati meteorologici sono spesso un cambiamento graduale, ciò dovrebbe fornire un'imputazione ragionevole.
Ri: Scripting per interpolare i dati meteorologici delle serie temporali mancanti?Per quanto riguarda il suggerimento di Ron sopra, volevo solo sottolineare che "RandomIndex ()" rimuoverà l'incertezza su quanti valori sono stati decimati. Quindi le prime righe diventano:
dt = Aprire ( "$SAMPLE_DATA/Serie storiche/CO2.jmp" ) ;
// Imposta n valori di CO2 come mancanti
N = 25 ;
dt : CO2 [ Indice casuale ( NRighe ( dt ) , N )] = . ;
Per quanto riguarda il metodo in generale, si veda anche: https://community.jmp.com/message/217292#217292
Ri: Scripting per interpolare i dati meteorologici delle serie temporali mancanti?CIAO jthornton1 ,
in passato ho fatto qualcosa di simile a quello che dici. non è il più veloce o il più semplice ma potrebbe fare il lavoro.
una volta che hai una colonna di durata e una colonna di differenza (e il tempo che hai avuto dalla fonte) puoi complicare la formula di imputazione quanto vuoi.
I nomi predefiniti sono qui ( 1 ) ;
// apre il set di dati originale
dt = Aprire ( "$SAMPLE_DATA/Serie storiche/CO2.jmp" ) ;
// elimina circa 25 righe casuali
Per ( io = 1 , io <= 25 , io ++,
X = Intero casuale ( 161 ) ;
dt : co2 [ X ] = . ;
) ;
// a questo punto hai solo un dato con valori mancanti.
// aggiungi una colonna per il tempo - se ne hai una non ti serve.
dt << Nuova Colonna ( "T" ) ;
Per ogni riga ( : T = Riga () ) ;
// qui è dove inizi
// crea un sottoinsieme della tabella originale ed elimina le righe con valori mancanti.
dtSub = dt << Sottoinsieme ( Tutte le righe , colonne ( : CO2 , : T ) ) ;
dtSub << eliminare le righe ( dtSub << ottenere righe dove ( Manca ( : co2 ) ) ) ;
// introduce la colonna della durata
dtSub << Nuova Colonna ( "Durata" ) ;
Per ogni riga ( : Durata = Ritardo ( : T , - 1 ) - : T ) ;
// introduce la variazione di CO2 da riga a riga.
dtSub << Nuova Colonna ( "cambio CO2" ) ;
Per ogni riga ( : Nome ( "cambio CO2" ) = Ritardo ( : Nome ( "co2" ) , - 1 ) - : Nome ( "co2" ) ) ;
// aggiorna la durata e la differenza rispetto alla tabella originale;
dt << aggiornamento ( con ( dtSub ) , Corrispondenza colonne ( : T = : T ) ) ;
// chiude la tabella del sottoinsieme
Vicino ( dtSub , nessun salvataggio ) ;
// riempire le righe mancanti - necessario per il passaggio successivo
Per ogni riga ( : Durata = Se ( Manca ( : Durata ) , Ritardo ( : Durata , 1 ) , : Durata ) ) ;
Per ogni riga ( : Nome ( "cambio CO2" ) = Se ( Manca ( : Nome ( "cambio CO2" ) ) , Ritardo ( : Nome ( "cambio CO2" ) , 1 ) , : Nome ( "cambio CO2" ) ) ) ;
// ora puoi inserire i valori mancanti con una formula in una nuova colonna o in quella esistente
dt << Nuova Colonna ( "co2 pieno" ) ;
Per ogni riga (
: Nome ( "co2 pieno" ) = Se (
Riga () == 1 , : CO2 ,
: Durata == 1 , : CO2 ,
: Durata > 1 , Ritardo ( : Nome ( "co2 pieno" ) , 1 ) + ( : Nome ( "cambio CO2" ) / : Durata )
)
) ;
Ri: Scripting per interpolare i dati meteorologici delle serie temporali mancanti?Ciao jthornton1!
Di solito comincio a preoccuparmi quando la mia logica sembra semplice!
La tua idea di interpolazione sembrerebbe subire un pregiudizio estremo se in un giorno mancassero 24 ore consecutive.Presumo che la tua interpolazione della temperatura da mezzanotte a mezzanotte, ad esempio, mancherebbe gli effetti di riscaldamento del sole durante il giorno.Anche con solo pochi punti mancanti, il metodo che proponi (chiamato Single Imputation) non riflette adeguatamente l'incertezza sulle previsioni dei valori mancanti sconosciuti e le varianze delle stime dei parametri da qualsiasi analisi di tali dati saranno distorte in modo errato verso lo zero.Questo è un problema anche se si utilizzano alcune statistiche (media, mediana, ecc.) da ogni periodo di tempo dei dati che sono completi.
Penso che l'attuale stato dell'arte per un approccio per affrontare il tuo problema sia l'imputazione multipla.Invece di inserire un singolo valore per ogni dato mancante, l'imputazione multipla sostituisce ogni valore mancante con un insieme di valori plausibili che rappresentano l'incertezza sul valore corretto da imputare. Ciascun set di dati imputati viene analizzato utilizzando procedure standard per dati completi e i risultati di queste analisi vengono successivamente combinati.L'imputazione multipla non tenta di stimare ogni valore mancante in sé e per sé, ma tenta invece di rappresentare un campione casuale di valori mancanti plausibili. Questo processo si traduce in inferenze statistiche che riflettono più correttamente l'incertezza dovuta a valori mancanti.Ad esempio, è possibile ottenere intervalli di confidenza giustificatamente validi per i parametri.
SAS dispone di alcune procedure che implementano l'imputazione multipla in modo molto efficace.JMP si integra bene con SAS.Buona fortuna!