una caja de herramientas de Python para el aprendizaje automático en series de tiempo parcialmente observadas
⦿ Motivation : debido a todo tipo de razones como la falla de los sensores de recolección, el error de comunicación y el mal funcionamiento inesperado, los valores faltantes son comunes para ver en las series temporales del entorno del mundo real. Esto hace que las series de tiempo parcialmente observadas (POT) sean un problema generalizado en el modelado del mundo abierto y evita el análisis de datos avanzados. Aunque este problema es importante, el área de aprendizaje automático en macetas todavía carece de un kit de herramientas dedicado. Pypots se crea para llenar este espacio en blanco.
⦿ Mission : Pypots (pronunciadas "macetas") nace para convertirse en una caja de herramientas útil que hará que el aprendizaje automático en macetas sea fácil en lugar de tedioso, para ayudar a los ingenieros e investigadores a enfocarse más en los problemas centrales en sus manos en lugar de cómo lidiar con las partes faltantes en sus datos. Pypots seguirá integrando los algoritmos de aprendizaje automático clásico y último de última generación para series de tiempo multivariadas parcialmente observadas. Sin duda, además de varios algoritmos, Pypots tendrá API unificadas junto con documentación detallada y ejemplos interactivos en los algoritmos como tutoriales.
? Estrata este repositorio para ayudar a otros a notar Pypots si cree que es un kit de herramientas útil. Por favor , cite a Pypots en sus publicaciones si ayuda con su investigación. Esto realmente significa mucho para nuestra investigación de código abierto. ¡Gracias!
El resto de este archivo ReadMe se organiza de la siguiente manera: ❖ Algoritmos disponibles , ❖ Ecosistema de Pypots , ❖ Instalación , ❖ Uso , ❖ Citando Pypots , ❖ Contribución , ❖ Comunidad .
Pypots admite la imputación, la clasificación, la agrupación, el pronóstico y las tareas de detección de anomalías en series de tiempo multivariadas parcialmente observadas con valores faltantes. La siguiente tabla muestra la disponibilidad de cada algoritmo (ordenado por año) en Pypots para diferentes tareas. El símbolo ✅ indica que el algoritmo está disponible para la tarea correspondiente (tenga en cuenta que los modelos se actualizarán continuamente en el futuro para manejar tareas que no se admiten actualmente. Estén atentos❗️).
? Desde V0.2 , todos los modelos de red neuronal en Pypots tienen soporte de óptimización de hiperparameter. Esta funcionalidad se implementa con el marco Microsoft NNI. Es posible que desee consultar nuestra encuesta de imputación de series de tiempo Repo Awesome_Imputation para ver cómo configurar y ajustar los hiperparámetros.
Tenga en cuenta que todos los modelos cuyo nombre ?? En la tabla (por ejemplo, transformador, Itransformer, Informer, etc.) no se proponen originalmente como algoritmos para los datos de POTS en sus documentos, y no pueden aceptar directamente series de tiempo con valores faltantes como entrada, y mucho menos imputación. Para hacerlos aplicables a los datos de POTS, aplicamos específicamente el enfoque de estrategia y capacitación de incrustación (ORT+MIT) lo mismo que en el documento SAITS 1 .
Los tipos de tareas se abrevian de la siguiente manera: IMPU : Imputación; FORE : pronóstico; CLAS : Clasificación; CLUS : agrupación; ANOD : detección de anomalías. Las referencias y enlaces en papel se enumeran en la parte inferior de este archivo.
| Tipo | Algo | Imput | DELANTERO | Triunfo | Clú | Anod | Año - Lugar |
|---|---|---|---|---|---|---|---|
| LLM | Series de tiempo.ai 2 | ✅ | ✅ | ✅ | ✅ | ✅ | Later in 2024 |
| Red neuronal | Tefn? ? 3 | ✅ | 2024 - arXiv | ||||
| Red neuronal | Ajuste? ? 4 | ✅ | 2024 - ICLR | ||||
| Red neuronal | Timemixer 5 | ✅ | 2024 - ICLR | ||||
| Red neuronal | itransformer? ? 6 | ✅ | 2024 - ICLR | ||||
| Red neuronal | Moderntcn 7 | ✅ | 2024 - ICLR | ||||
| Red neuronal | Imputeformer? ? 8 | ✅ | 2024 - KDD | ||||
| Red neuronal | Saits 1 | ✅ | 2023 - ESWA | ||||
| Red neuronal | Trastes? ? 9 | ✅ | 2023 - NeurIPS | ||||
| Red neuronal | Koopa? 10 | ✅ | 2023 - NeurIPS | ||||
| Red neuronal | Crossformer? ? 11 | ✅ | 2023 - ICLR | ||||
| Red neuronal | Timesnet 12 | ✅ | 2023 - ICLR | ||||
| Red neuronal | Patchtst? ? 13 | ✅ | 2023 - ICLR | ||||
| Red neuronal | ¿Etsformer? ? 14 | ✅ | 2023 - ICLR | ||||
| Red neuronal | Micn? ? 15 | ✅ | 2023 - ICLR | ||||
| Red neuronal | Dlinear? ? 16 | ✅ | 2023 - AAAI | ||||
| Red neuronal | ¿Marea? 17 | ✅ | 2023 - TMLR | ||||
| Red neuronal | CSAI 18 | ✅ | ✅ | 2023 - arXiv | |||
| Red neuronal | ¿Segrnn? ? 19 | ✅ | 2023 - arXiv | ||||
| Red neuronal | Scinet? ? 20 | ✅ | 2022 - NeurIPS | ||||
| Red neuronal | No estacionaria tr.? 21 | ✅ | 2022 - NeurIPS | ||||
| Red neuronal | ¿Película? 22 | ✅ | 2022 - NeurIPS | ||||
| Red neuronal | Revin_scinet? ? 23 | ✅ | 2022 - ICLR | ||||
| Red neuronal | Pyraformer? ? 24 | ✅ | 2022 - ICLR | ||||
| Red neuronal | Gota de lluvia 25 | ✅ | 2022 - ICLR | ||||
| Red neuronal | FedFormer? ? 26 | ✅ | 2022 - ICML | ||||
| Red neuronal | Autoformador? ? 27 | ✅ | 2021 - NeurIPS | ||||
| Red neuronal | CSDI 28 | ✅ | ✅ | 2021 - NeurIPS | |||
| Red neuronal | ¿Informador? 29 | ✅ | 2021 - AAAI | ||||
| Red neuronal | US-Gan 30 | ✅ | 2021 - AAAI | ||||
| Red neuronal | CRLI 31 | ✅ | 2021 - AAAI | ||||
| Probabilístico | BTTF 32 | ✅ | 2021 - TPAMI | ||||
| Red neuronal | Stemgnn? ? 33 | ✅ | 2020 - NeurIPS | ||||
| Red neuronal | ¿Reformador? 34 | ✅ | 2020 - ICLR | ||||
| Red neuronal | GP-VAE 35 | ✅ | 2020 - AISTATS | ||||
| Red neuronal | Vader 36 | ✅ | 2019 - GigaSci. | ||||
| Red neuronal | M-RNN 37 | ✅ | 2019 - TBME | ||||
| Red neuronal | Britos 38 | ✅ | ✅ | 2018 - NeurIPS | |||
| Red neuronal | Gru-D 39 | ✅ | ✅ | 2018 - Sci. Rep. | |||
| Red neuronal | Tcn? ? 40 | ✅ | 2018 - arXiv | ||||
| Red neuronal | ¿Transformador? 41 | ✅ | 2017 - NeurIPS | ||||
| Ingenuo | Lerp 42 | ✅ | |||||
| Ingenuo | Locf/nocb | ✅ | |||||
| Ingenuo | Significar | ✅ | |||||
| Ingenuo | Mediana | ✅ |
? ¡Contribuya a su modelo ahora mismo para aumentar su impacto de investigación! Las descargas de Pypots están aumentando rápidamente ( 300k+ en total y 1k+ diariamente en PYPI hasta ahora ), y su trabajo será ampliamente utilizado y citado por la comunidad. Consulte la Guía de contribución para ver cómo incluir su modelo en Pypots.
En Pypots, las cosas están relacionadas con el café, con lo que estamos familiarizados. ¡Sí, este es un universo de café! Como puede ver, hay una cafetera en el logotipo de Pypots. ¿Y qué más? Por favor, siga leyendo ;-)
? Los conjuntos de datos de la serie temporal se toman como granos de café en Pypots, y los conjuntos de datos de botes son granos de café incompletos con piezas faltantes que tienen sus propios significados. Para que varios conjuntos de datos de series de tiempo públicas estén fácilmente disponibles para los usuarios, se crea granos de datos de series de tiempo (TSDB) para que los conjuntos de datos de la serie de tiempo de carga sean muy fáciles. Visite TSDB ahora mismo para saber más sobre esta práctica herramienta, y ahora admite un total de 172 conjuntos de datos de código abierto.
Para simular los frijoles de datos del mundo real con falta, se crea el Pygrinder de la biblioteca del ecosistema, un kit de herramientas que ayuda a moler los granos de café en otros incompletos. Los patrones faltantes se dividen en tres categorías de acuerdo con la teoría 43 de Robin: MCAR (faltante completamente al azar), Mar (faltante al azar) y MNAR (que no está al azar). Pygrinder los apoya a todos y funcionalidades adicionales relacionadas con la falta de falta. Con Pygrinder, puede introducir valores faltantes sintéticos en sus conjuntos de datos con una sola línea de código.
? Para evaluar bastante el rendimiento de los algoritmos de Pypots, se crea los contenedores de contenido benchpots de la suite de evaluación comparativa, que proporciona tuberías estándar y unificadas de depresión de datos para preparar conjuntos de datos para medir el rendimiento de los diferentes algoritmos de POTS en diversas tareas.
Ahora los frijoles, el molinillo y la olla están listos, por favor tome un asiento en el banco y pensemos en cómo prepararnos una taza de café. ¡Los tutoriales son necesarios! Teniendo en cuenta la futura carga de trabajo, los tutoriales de Pypots se lanzan en un solo repositorio, y puede encontrarlos en Brewpots. ¡Míralo ahora y aprende a preparar los conjuntos de datos de tus botes!
☕️ Bienvenido al Universo de Pypots. ¡Disfrútalo y diviértete!
Puede consultar la instrucción de instalación en la documentación de Pypots para obtener una guía con más detalles.
Pypots está disponible en Pypi y Anaconda. Puede instalar Pypots como a continuación y TSDB, Pygrinder, Benchpots y AI4TS:
# via pip
pip install pypots # the first time installation
pip install pypots --upgrade # update pypots to the latest version
# install from the latest source code with the latest features but may be not officially released yet
pip install https://github.com/WenjieDu/PyPOTS/archive/main.zip
# via conda
conda install conda-forge::pypots # the first time installation
conda update conda-forge::pypots # update pypots to the latest version Además de Brewpots, también puede encontrar un cuaderno tutorial simple y de inicio rápido en Google Colab. Si tiene más preguntas, consulte Pypots Documentation Docs.pypots.com. También puede plantear un problema o preguntar en nuestra comunidad.
Le presentamos un ejemplo de uso de imputación de valores faltantes en las series de tiempo con Pypots a continuación, puede hacer clic para verlo.
# Data preprocessing. Tedious, but PyPOTS can help.
import numpy as np
from sklearn . preprocessing import StandardScaler
from pygrinder import mcar
from pypots . data import load_specific_dataset
data = load_specific_dataset ( 'physionet_2012' ) # PyPOTS will automatically download and extract it.
X = data [ 'X' ]
num_samples = len ( X [ 'RecordID' ]. unique ())
X = X . drop ([ 'RecordID' , 'Time' ], axis = 1 )
X = StandardScaler (). fit_transform ( X . to_numpy ())
X = X . reshape ( num_samples , 48 , - 1 )
X_ori = X # keep X_ori for validation
X = mcar ( X , 0.1 ) # randomly hold out 10% observed values as ground truth
dataset = { "X" : X } # X for model input
print ( X . shape ) # (11988, 48, 37), 11988 samples and each sample has 48 time steps, 37 features
# Model training. This is PyPOTS showtime.
from pypots . imputation import SAITS
from pypots . utils . metrics import calc_mae
saits = SAITS ( n_steps = 48 , n_features = 37 , n_layers = 2 , d_model = 256 , n_heads = 4 , d_k = 64 , d_v = 64 , d_ffn = 128 , dropout = 0.1 , epochs = 10 )
# Here I use the whole dataset as the training set because ground truth is not visible to the model, you can also split it into train/val/test sets
saits . fit ( dataset ) # train the model on the dataset
imputation = saits . impute ( dataset ) # impute the originally-missing values and artificially-missing values
indicating_mask = np . isnan ( X ) ^ np . isnan ( X_ori ) # indicating mask for imputation error calculation
mae = calc_mae ( imputation , np . nan_to_num ( X_ori ), indicating_mask ) # calculate mean absolute error on the ground truth (artificially-missing values)
saits . save ( "save_it_here/saits_physionet2012.pypots" ) # save the model for future use
saits . load ( "save_it_here/saits_physionet2012.pypots" ) # reload the serialized model file for following imputation or training Consejo
[Actualizaciones en junio de 2024] ? El primer documento integral de referencia de imputación de seres de tiempo TSI Bench: Benchmarking Time Series Imputation ahora está disponible pública. El código es de código abierto en el repo awesome_imputation. Con casi 35,000 experimentos, proporcionamos un estudio de evaluación comparativa integral sobre 28 métodos de imputación, 3 patrones faltantes (puntos, secuencias, bloques), varias tasas faltantes y 8 conjuntos de datos del mundo real.
[Actualizaciones en febrero de 2024] ? Nuestro documento de encuesta de aprendizaje profundo para la imputación de series temporales multivariadas: se ha publicado una encuesta en ARXIV. Revisamos integralmente la literatura de los métodos de imputación de aprendizaje profundo de última generación para las series de tiempo, les brindamos una taxonomía y discutimos los desafíos y las direcciones futuras en este campo.
El documento que presenta Pypots está disponible en ARXIV, y una versión breve es aceptada por el 9º Taller Internacional Sigkdd sobre minería y aprendizaje de series de tiempo (Milets'23)). Además , Pypots se ha incluido como un proyecto del ecosistema de Pytorch. Estamos buscando publicarlo en prestigiosos lugares académicos, por ejemplo, JMLR (Track for Machine Learning Software de código abierto). Si usa Pypots en su trabajo, cíquelo como a continuación y establezca este repositorio para que otros noten esta biblioteca. ?
Existen proyectos de investigación científica que usan Pypots y se refieren en sus documentos. Aquí hay una lista incompleta de ellos.
@article { du2023pypots ,
title = { {PyPOTS: a Python toolbox for data mining on Partially-Observed Time Series} } ,
author = { Wenjie Du } ,
journal = { arXiv preprint arXiv:2305.18811 } ,
year = { 2023 } ,
}o
Wenjie du. Pypots: una caja de herramientas de Python para minería de datos en series de tiempo parcialmente observadas. ARXIV, ABS/2305.18811, 2023.
¡Eres bienvenido a contribuir a este emocionante proyecto!
Al cometer su código,
template en cada paquete de tareas (por ejemplo, pypots/imputación/plantilla) para comenzar rápidamente;¿También puede contribuir a Pypots simplemente mirando? Este repositorio para ayudar a más personas a notarlo. ¡Tu estrella es tu reconocimiento a Pypots, y es importante!
? ¡Consulte una lista completa de las afiliaciones de nuestros usuarios en el sitio web de Pypots aquí!
Nos preocupamos por los comentarios de nuestros usuarios, por lo que estamos construyendo la comunidad de Pypots en
Si tiene alguna sugerencia o desea contribuir con ideas o compartir documentos relacionados con la serie de tiempo, únase a nosotros y cuente. La comunidad de Pypots es abierta, transparente y seguramente amiga. ¡Trabajemos juntos para construir y mejorar los pypots!
Du, W., Cote, D. y Liu, Y. (2023). Saits: imputación basada en la autoeficiencia para series de tiempo. Sistemas expertos con aplicaciones . ↩ ↩ 2
Project Gungnir, el World 1st LLM para el modelado multitarea de series de tiempo, se reunirá pronto. ¿Los valores faltantes y las longitudes variables en sus conjuntos de datos? ¿Es difícil realizar aprendizaje multitarea con su serie de tiempo? Ya no hay problemas. Abriremos la aplicación para la prueba beta pública recientemente ;-) ¡síganos y estén atentos! Series de tiempo.ai ↩
Zhan, T., He, Y., Deng, Y., Li, Z., Du, W. y Wen, Q. (2024). Red de fusión de evidencia de tiempo: vista de múltiples fuentes en el pronóstico de series de tiempo a largo plazo. ARXIV 2024 . ↩
Xu, Z., Zeng, A. y Xu, Q. (2024). Ajuste: series de tiempo de modelado con 10k parámetros. ICLR 2024 . ↩
Wang, S., Wu, H., Shi, X., Hu, T., Luo, H., Ma, L., ... y Zhou, J. (2024). Timemixer: mezcla multiescala descomponible para el pronóstico de series de tiempo. ICLR 2024 . ↩
Liu, Y., Hu, T., Zhang, H., Wu, H., Wang, S., Ma, L. y Long, M. (2024). ITransformer: los transformadores invertidos son efectivos para el pronóstico de series de tiempo. ICLR 2024 . ↩
Luo, D. y Wang X. (2024). Moderntcn: una estructura moderna de convolución pura para el análisis general de series de tiempo. ICLR 2024 . ↩
Nie, T., Qin, G., Mei, Y. y Sun, J. (2024). Imputformer: transformadores inducidos por bajos rances para la imputación espacializable espacio-temporal. KDD 2024 . ↩
Yi, K., Zhang, Q., Fan, W., Wang, S., Wang, P., He, H., An, N., Lian, D., Cao, L. y Niu, Z. (2023). Los MLP de dominio de frecuencia son alumnos más efectivos en el pronóstico de series de tiempo. Neurips 2023 . ↩
Liu, Y., Li, C., Wang, J. y Long, M. (2023). Koopa: aprendizaje de la dinámica de la serie temporal no estacionaria con los predictores de Koopman. Neurips 2023 . ↩
Zhang, Y. y Yan, J. (2023). Crossformer: Transformador utilizando dependencia de la dimensión cruzada para el pronóstico de series temporales multivariadas. ICLR 2023 . ↩
Wu, H., Hu, T., Liu, Y., Zhou, H., Wang, J. y Long, M. (2023). TimesNet: modelado temporal de variación 2D para análisis de series de tiempo generales. ICLR 2023 ↩
Nie, Y., Nguyen, NH, Sinthong, P. y Kalagnanam, J. (2023). Una serie de tiempo vale 64 palabras: pronóstico a largo plazo con transformadores. ICLR 2023 ↩
Woo, G., Liu, C., Sahoo, D., Kumar, A. y Hoi, S. (2023). Etsformer: transformadores de suavizado exponencial para el pronóstico de la serie de tiempo. ICLR 2023 ↩
Wang, H., Peng, J., Huang, F., Wang, J., Chen, J. y Xiao, Y. (2023). MICN: Modelado de contexto local y global de varias escasas para el pronóstico de series a largo plazo. ICLR 2023 . ↩
Zeng, A., Chen, M., Zhang, L. y Xu, Q. (2023). ¿Son efectivos los transformadores para el pronóstico de series de tiempo? AAAI 2023 ↩
Das, A., Kong, W., Leach, A., Mathur, S., Sen, R. y Yu, R. (2023). Pronóstico a largo plazo con marea: codificador denso de series de tiempo. TMLR 2023 . ↩
Qian, L., Ibrahim, Z., Ellis, HL, Zhang, A., Zhang, Y., Wang, T. y Dobson, R. (2023). Conocimiento La imputación condicional mejorada para la serie de tiempo de atención médica. ARXIV 2023 . ↩
Lin, S., Lin, W., Wu, W., Zhao, F., Mo, R. y Zhang, H. (2023). SEGRNN: Red neuronal recurrente del segmento para el pronóstico de series temporales a largo plazo. ARXIV 2023 . ↩
Liu, M., Zeng, A., Chen, M., Xu, Z., Lai, Q., Ma, L. y Xu, Q. (2022). Scinet: modelado y pronóstico de series temporales con convolución e interacción de muestra. Neurips 2022 . ↩
Liu, Y., Wu, H., Wang, J. y Long, M. (2022). Transformadores no estacionarios: explorando el pronóstico de la estacionariedad en las series de tiempo. Neurips 2022 . ↩
Zhou, T., Ma, Z., Wen, Q., Sun, L., Yao, T., Yin, W. y Jin, R. (2022). Película: Modelo de memoria de Legendre mejorado para la frecuencia para el pronóstico de series de tiempo a largo plazo. Neurips 2022 . ↩
Kim, T., Kim, J., Tae, Y., Park, C., Choi, JH y Choo, J. (2022). Normalización de la instancia reversible para el pronóstico de series de tiempo precisa contra el cambio de distribución. ICLR 2022 . ↩
Liu, S., Yu, H., Liao, C., Li, J., Lin, W., Liu, Axe y Dustdar, S. (2022). Pyraformer: atención piramidal de baja complejidad para modelado y pronóstico de series de tiempo de largo alcance. ICLR 2022 . ↩
Zhang, X., Zeman, M., Tsiligkaridis, T. y Zitnik, M. (2022). Red guiada por gráficos para series temporales multivariadas de muestreo irregular. ICLR 2022 . ↩
Zhou, T., Ma, Z., Wen, Q., Wang, X., Sun, L. y Jin, R. (2022). FedFormer: transformador descompuesto mejorado de frecuencia para el pronóstico de series a largo plazo. ICML 2022 . ↩
Wu, H., Xu, J., Wang, J. y Long, M. (2021). Autoformador: transformadores de descomposición con auto-correlación para el pronóstico de series a largo plazo. Neurips 2021 . ↩
Tashiro, Y., Song, J., Song, Y., y Ermon, S. (2021). CSDI: modelos de difusión basados en puntajes condicionales para la imputación de series de tiempo probabilísticas. Neurips 2021 . ↩
Zhou, H., Zhang, S., Peng, J., Zhang, S., Li, J., Xiong, H. y Zhang, W. (2021). Informador: más allá del transformador eficiente para el pronóstico de series de tiempo de secuencia larga. AAAI 2021 . ↩
Miao, X., Wu, Y., Wang, J., Gao, Y., Mao, X. y Yin, J. (2021). Aprendizaje semi-supervisado generativo para la imputación de series de tiempo multivariadas. AAAI 2021 . ↩
Ma, Q., Chen, C., Li, S. y Cottrell, GW (2021). Representaciones de aprendizaje para la agrupación de series de tiempo incompletas. AAAI 2021 . ↩
Chen, X. y Sun, L. (2021). Factorización temporal bayesiana para la predicción de series de tiempo multidimensionales. Transacciones IEEE en análisis de patrones e inteligencia de máquinas . ↩
Cao, D., Wang, Y., Duan, J., Zhang, C., Zhu, X., Huang, C., Tong, Y., Xu, B., Bai, J., Tong, J. y Zhang, Q. (2020). Red neuronal del gráfico temporal espectral para pronósticos multivariados de series temporales. Neurips 2020 . ↩
Kitaev, N., Kaiser, ł., Y Levskaya, A. (2020). Reformador: el transformador eficiente. ICLR 2020 . ↩
Fortuin, V., Baranchuk, D., Raetsch, G. y Mandt, S. (2020). GP-VAE: imputación de series de tiempo probabilísticas profundas. Aistats 2020 . ↩
Jong, Jd, Emon, MA, Wu, P., Karki, R., Sood, M., Godard, P., Ahmad, A., Vrooman, Ha, Hofmann-Apitius, M. y Fröhlich, H. (2019). Aprendizaje profundo para la agrupación de trayectorias clínicas de pacientes multivariadas con valores faltantes. Gigasciencia . ↩
Yoon, J., Zame, WR y van der Schaar, M. (2019). Estimación de datos faltantes en flujos de datos temporales utilizando redes neuronales recurrentes multidireccionales. Transacciones IEEE en Ingeniería Biomédica . ↩
Cao, W., Wang, D., Li, J., Zhou, H., Li, L. y Li, Y. (2018). Britos: imputación recurrente bidireccional para series de tiempo. Neurips 2018 . ↩
Che, Z., Purushotham, S., Cho, K., Sontag, Da y Liu, Y. (2018). Redes neuronales recurrentes para series temporales multivariadas con valores faltantes. Informes científicos . ↩
Bai, S., Kolter, Jz y Koltun, V. (2018). Una evaluación empírica de redes convolucionales y recurrentes genéricas para el modelado de secuencias. ARXIV 2018 . ↩
Vaswani, A., Shazeer, NM, Parmar, N., Uszkoreit, J., Jones, L., Gómez, An, Kaiser, L. y Polosukhin, I. (2017). La atención es todo lo que necesitas. Neurips 2017 . ↩
Wikipedia: interpolación lineal ↩
Rubin, DB (1976). Inferencia y datos faltantes. Biometrika . ↩