¿Secuencias de comandos para interpolar datos meteorológicos de series temporales que faltan?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Con los datos meteorológicos de intervalo por hora, hay puntos de datos faltantes ocasionales (lecturas perdidas).Me gustaría interpolar los puntos de datos faltantes: la temperatura, la humedad y la presión barométrica suelen cambiar gradualmente durante el día.Me gustaría interpolar entre el último y el siguiente valor de la serie temporal en una columna para obtener los valores que faltan para limpiar los datos.La imputación usando "Explorar valores faltantes" proporciona resultados sin sentido al mirar a través de las filas, necesito una forma simple de completar los puntos faltantes en las columnas para usar con otros cálculos como grados día de calefacción, grados día de enfriamiento, etc.
Conceptualmente, la lógica parece sencilla: cuando encuentre un valor faltante en la siguiente fila de una columna, cuente cuántos puntos de datos faltan hasta el siguiente valor, luego interpole en función de la cantidad de puntos de datos faltantes.La lógica parece ser: verifique una columna en busca de datos faltantes, con datos faltantes, luego cuente los intervalos faltantes, luego complete los intervalos faltantes con (siguiente valor - último valor / número de intervalos faltantes) agregado al último valor.
¿Alguien con mejor experiencia en secuencias de comandos que yo tiene una solución?
¿Esto ya se solucionó?¿O ya hay funciones integradas en JMP?
Re: ¿Secuencias de comandos para interpolar datos meteorológicos de series temporales que faltan?Muchos de los comentarios parecen haber ignorado que tiene datos de series temporales. Suponiendo que sus datos muestren autocorrelación, puede usar la función JSL INTERPOLATE. O SPLINE SMOOTH si necesita una interpolación no lineal.

Re: ¿Secuencias de comandos para interpolar datos meteorológicos de series temporales que faltan?....¿Qué hay de secuencias de comandos del ajuste spline?
GRAMO
Re: ¿Secuencias de comandos para interpolar datos meteorológicos de series temporales que faltan?solo porque tu poder hacer algo no significa que debería !
Todavía no está claro exactamente qué información desea obtener de sus datos, pero si realiza alguna inferencia (prueba de hipótesis, intervalos de confianza, etc.) sobre los datos con las imputaciones individuales, debe tener en cuenta que ha sesgado todas las varianzas de el parámetro se estima hacia cero, lo que afecta la calidad de cualquier inferencia realizada posteriormente sobre los datos.
Quizás nunca se haga ninguna inferencia sobre estos datos y no sea un problema para usted.En ese caso, imputa como quieras.
Re: ¿Secuencias de comandos para interpolar datos meteorológicos de series temporales que faltan?La solución más sencilla podría ser utilizar la plataforma Fit-Y-By-X si los datos que faltan son ocasionales. Si coloca su columna de tiempo como X (debe ser numérico continuo) y las variables meteorológicas como Y. Luego puede ajustar una spline desde el menú del punto de acceso (tendrá que experimentar con el valor de Change Lambda para usar).
Desde el punto de acceso de spline, elija guardar previsto. Estas nuevas columnas tendrán los valores faltantes completados en los que puede hacer sus cálculos (o podría hacer un poco de secuencias de comandos para usar el nuevo valor solo donde faltan los originales). Dado que los datos meteorológicos suelen ser un cambio gradual, esto debería dar una imputación razonable.
Re: ¿Secuencias de comandos para interpolar datos meteorológicos de series temporales que faltan?Con respecto a la sugerencia anterior de Ron, solo quería señalar que 'RandomIndex()' eliminará la incertidumbre sobre cuántos valores han sido diezmados. Así que las primeras líneas se convierten en:
dt = Abierto ( "$SAMPLE_DATA/Serie temporal/CO2.jmp" ) ;
// Establecer n valores de CO2 como faltantes
norte = 25 ;
dt : CO2 [ Índice aleatorio ( NFilas ( dt ) , norte )] = . ;
Con respecto al método en general, consulte también: https://community.jmp.com/message/217292#217292
Re: ¿Secuencias de comandos para interpolar datos meteorológicos de series temporales que faltan?Hola jthornton1 ,
en el pasado hice algo similar a lo que mencionas. no es el más rápido ni el más simple, pero podría hacer el trabajo.
una vez que tenga una columna de duración y una columna de diferencia (y el tiempo que tenía de la fuente) puede complicar la fórmula de imputación tanto como desee.
Nombres predeterminados hasta aquí ( 1 ) ;
// abre el conjunto de datos original
dt = Abierto ( "$SAMPLE_DATA/Serie temporal/CO2.jmp" ) ;
// elimina unas 25 filas aleatorias
Para ( i = 1 , i <= 25 , i ++,
X = Entero aleatorio ( 161 ) ;
dt : co2 [ X ] = . ;
) ;
// en este punto solo tiene datos con valores faltantes.
// agregue una columna para el tiempo; si tiene una, no la necesita.
dt << Nueva columna ( "t" ) ;
Por cada fila ( : t = Fila () ) ;
// aquí es donde empiezas
// crear subconjuntos de la tabla original y eliminar las filas con valores faltantes.
dtsub = dt << Subconjunto ( todas las filas , columnas ( : CO2 , : t ) ) ;
dtsub << eliminar filas ( dtsub << obtener filas donde ( Está perdido ( : co2 ) ) ) ;
// introduce la columna de duración
dtsub << Nueva columna ( "Duración" ) ;
Por cada fila ( : Duración = Retraso ( : t , - 1 ) - : t ) ;
// introduce el cambio en co2 de fila a fila.
dtsub << Nueva columna ( "cambio de co2" ) ;
Por cada fila ( : Nombre ( "cambio de co2" ) = Retraso ( : Nombre ( "co2" ) , - 1 ) - : Nombre ( "co2" ) ) ;
// actualiza la duración y la diferencia con la tabla original;
dt << actualizar ( con ( dtsub ) , Coincidencia de columnas ( : t = : t ) ) ;
// cerrar la tabla de subconjuntos
Cerca ( dtsub , sin guardar ) ;
// llenar las filas que faltan - necesidad del siguiente paso
Por cada fila ( : Duración = Si ( Está perdido ( : Duración ) , Retraso ( : Duración , 1 ) , : Duración ) ) ;
Por cada fila ( : Nombre ( "cambio de co2" ) = Si ( Está perdido ( : Nombre ( "cambio de co2" ) ) , Retraso ( : Nombre ( "cambio de co2" ) , 1 ) , : Nombre ( "cambio de co2" ) ) ) ;
// ahora puede completar los valores faltantes con una fórmula en una nueva columna o en la existente
dt << Nueva columna ( "co2 lleno" ) ;
Por cada fila (
: Nombre ( "co2 lleno" ) = Si (
Fila () == 1 , : CO2 ,
: Duración == 1 , : CO2 ,
: Duración > 1 , Retraso ( : Nombre ( "co2 lleno" ) , 1 ) + ( : Nombre ( "cambio de co2" ) / : Duración )
)
) ;
Re: ¿Secuencias de comandos para interpolar datos meteorológicos de series temporales que faltan?¡Hola, jthornton1!
¡Por lo general empiezo a preocuparme cuando mi lógica parece sencilla!
Su idea de interpolación parecería sufrir un sesgo extremo si faltaran 24 horas seguidas en un día.Supongo que su interpolación de temperatura de medianoche a medianoche, por ejemplo, perdería los efectos de calentamiento del Sol durante el día.Incluso si solo faltan unos pocos puntos, el método que propone (llamado Imputación única) no refleja adecuadamente la incertidumbre sobre las predicciones de los valores faltantes desconocidos, y las variaciones de las estimaciones de los parámetros de cualquier análisis de esos datos estarán incorrectamente sesgadas. hacia cero.Esto es un problema incluso si usa alguna estadística (media, mediana, etc.) de cada período de tiempo de los datos que están completos.
Creo que el estado actual de la técnica para abordar su problema es la imputación múltiple.En lugar de completar un solo valor para cada dato faltante, la imputación múltiple reemplaza cada valor faltante con un conjunto de valores plausibles que representan la incertidumbre sobre el valor correcto a imputar. Cada uno de los conjuntos de datos imputados se analiza utilizando procedimientos estándar para obtener datos completos y los resultados de estos análisis se combinan posteriormente.La imputación múltiple no intenta estimar cada valor faltante en sí mismo, sino que intenta representar una muestra aleatoria de valores faltantes plausibles. Este proceso da como resultado inferencias estadísticas que reflejan de manera más adecuada la incertidumbre debida a los valores faltantes.Por ejemplo, puede obtener intervalos de confianza justificadamente válidos para los parámetros.
SAS tiene algunos procedimientos que implementan la Imputación Múltiple de manera muy efectiva.JMP se integra bien con SAS.¡Buena suerte!