Regresión Avanzada 2024 - TP Final
Jorge Nicolau
- Detección de
exoplanetas y sus caracterĆsticas
- El problema
- Antecedentes
- El dataset de expolanetas detectados con el telescopio espacial Kepler
- Preprocesamiento de datos
- AnƔlisis exploratorio de datos
- AnƔlisis los parƔmetros numƩricos del dataset
- Detención de valores faltantes
- Buscando correlaciones
- Detección de valores atĆpicos (outliers) en las predictoras
- Analisis de regresión
- Posibles mejoras para futuros anƔlisis
- Conclusiones
- Referencias
Detección de exoplanetas y sus caracterĆsticas
El problema
Durante casi tres dĆ©cadas de investigación, la NASA ha confirmado la existencia de mĆ”s de 5,600 exoplanetas en 4,151 sistemas planetarios. Estos mundos, conocidos como exoplanetas o planetas extrasolares, orbitan estrellas distintas al Sol. Aunque los astrónomos los imaginaron durante milenios, no fue hasta mediados de la dĆ©cada de 1990 cuando comenzaron a aparecer en los registros cientĆficos.
Aproximadamente dos tercios de los exoplanetas descubiertos hasta ahora provienen del telescopio espacial Kepler, mientras que cientos mĆ”s han sido identificados gracias a la misión TESS y otros observatorios terrestres. Estas misiones han generado una enorme cantidad de datos, con cerca de 10,000 posibles exoplanetas aĆŗn pendientes de confirmación. Un nĆŗmero impresionante si consideramos que hasta principios de los aƱos noventa no se conocĆa ninguno, pero diminuto en comparación con los cientos de miles de millones que podrĆan existir solo en la VĆa LĆ”ctea.
Para detectar estos mundos, los astrónomos emplean diversas tĆ©cnicas, muchas de ellas llevadas al lĆmite de la tecnologĆa disponible en los observatorios espaciales (Nardi, Luca, n.d.): astrometrĆa o detección a travĆ©s del movimiento estelar (Wu, Dong-Hong, n.d.), velocidades radiales o detección a travĆ©s del efecto Doppler (MarĆn, Daniel, n.d.b), mĆ©todo del trĆ”nsito o detección a travĆ©s de la sombra planetaria (Alonso Sobrino, Roi, n.d.), microlente gravitacional o detección a travĆ©s de la curvatura del espacio-tiempo (MarĆn, Daniel, n.d.a), observación directa o fotografĆa en medio del brillo estelar (NASA, Equipo de redacción de Ciencia, n.d.) y detección por cómo afectan la rotación de pĆŗlsares (Wolszczan, Aleksander & Frail, D. A., n.d.).
El anĆ”lisis de exoplanetas presenta varios desafĆos en la modelización de datos. La multicolinealidad es un problema comĆŗn, ya que muchas variables orbitales, estelares y planetarias estĆ”n altamente correlacionadas debido a su origen fĆsico comĆŗn, como la relación entre el perĆodo orbital y el semieje mayor, descrita por la Ley de Kepler. AdemĆ”s, el ruido y la variabilidad en los datos pueden afectar la precisión de las predicciones, ya que las mediciones suelen presentar incertidumbre, especialmente en la estimación de masas y radios planetarios, lo que refleja la diversidad natural de los sistemas estelares. Otro aspecto clave es la no linealidad en las relaciones entre propiedades estelares, orbitales y planetarias, como la dependencia cĆŗbica entre el semieje mayor y el perĆodo orbital segĆŗn la Ley de Kepler. Finalmente, la alta dimensionalidad de los datos, generada por la gran cantidad de sensores y metodologĆas para detectar exoplanetas, puede introducir variables irrelevantes o redundantes, aumentando innecesariamente la complejidad del modelo, por lo que es fundamental aplicar tĆ©cnicas de selección de variables para mejorar la eficiencia del anĆ”lisis.
Antecedentes
La detección de exoplanetas es un campo de investigación en constante evolución, con nuevos descubrimientos y tĆ©cnicas emergentes que amplĆan nuestro conocimiento del universo. La ciencia de datos juega un papel fundamental en este proceso, permitiendo a los astrónomos analizar grandes volĆŗmenes de datos y extraer información relevante sobre los exoplanetas y sus caracterĆsticas.
Incluso NASA anima a la detección amateur de exoplanetas a travĆ©s de su sitio Exoplanet Watch donde ofrece una guĆa detallada sobre cómo analizar observaciones de trĆ”nsitos de exoplanetas para generar curvas de luz, que representan las variaciones en el brillo de una estrella cuando un planeta pasa frente a ella (brachman-2024?)
Trabajos relacionados
Hay varios antecedentes del uso de aprendizaje automĆ”tico y mĆ©todos estadĆsticos para la detección de exoplanetas.
En (Malik, A., Moster, B. P., & Obermeier, C., n.d.) se presenta una nueva tĆ©cnica basada en machine learning para detectar exoplanetas mediante el mĆ©todo de trĆ”nsito. Se empleó la biblioteca TSFresh para extraer 789 caracterĆsticas de curvas de luz y entrenar un clasificador de gradient boosting con LightGBM.
En (Hadrien Cambazard, Nicolas Catusse, Antoine Chomez, Anne-Marie Lagrange, n.d.) se trata la problemĆ”tica de detección de imagen directa de exoplanetas y cómo separar el ruido de fondo de las seƱales planetarias. Los mĆ©todos estadĆsticos recientes evitan la auto sustracción de seƱales de interĆ©s, a diferencia del enfoque inicial basado en imĆ”genes diferenciales angulares (ADI). Sin embargo, estos mĆ©todos pueden generar muchos falsos positivos si no se establecen umbrales conservadores, lo que a su vez puede hacer que se pierdan exoplanetas dĆ©biles. Este estudio extiende un marco estadĆstico incorporando una regresión logĆstica para filtrar candidatos, utilizando caracterĆsticas ópticas en dos longitudes de onda. Se aplica detección de bordes y algoritmos de clustering para procesar sub-imĆ”genes.
En (Cardenas, Christian & Lozano, David & Marquez, Cristian & Torres, Edilberto & Delgado-Correal, Camilo, n.d.) se desarrolla un ensamblado de software autónomo para detectar trÔnsitos planetarios en curvas de luz estelares, utilizando un clasificador de lógica difusa y evitando la búsqueda manual de trÔnsitos en grandes volúmenes de datos.
En (venkata-2023?) se presenta una tĆ©cnica para detectar exoplanetas usando el mĆ©todo de trĆ”nsito. El objetivo es mejorar las tĆ©cnicas tradicionales en astronomĆa con el uso de algoritmos de aprendizaje automĆ”tico. Para ello, utilizan seis modelos diferentes de aprendizaje automĆ”tico: Random Forest, Decision Tree, Support Vector Classifier, K-Nearest Neighbor y Multi-Layer Perceptron. Al comparar las precisiones concluye que combinando cuatro de esos modelos (Support Vector Classifier, K-Nearest Neighbor, Random Forest y Multi-Layer Perceptron) usando bagging, se lograba una mayor precisión.
En (Pimentel, J., Amorim, J. & Rudzicz, F., n.d.) se centra en detectar posibles planetas utilizando el mĆ©todo de trĆ”nsito con un enfoque novedoso al clasificar estrellas mediante un conjunto de caracterĆsticas extraĆdas de series temporales en tres dominios: temporal, estadĆstico y espectral. Estas caracterĆsticas se utilizan para entrenar y evaluar modelos con datos del telescopio Kepler, y los resultados superan algunos enfoques existentes. AdemĆ”s, el proceso de validación cruzada se emplea para eliminar sesgos y evaluar mejor los modelos.
InspirÔndose en estos antecedentes, este trabajo busca utilizar la regresión parÔmetros faltantes de los exoplanetas asà como predecir su habitabilidad.
#AnƔlisis Exploratorio
En (tuckey-1977?) se explica que el anĆ”lisis exploratorio de datos (EDA) se enfoca en descubrir patrones, anomalĆas y relaciones dentro de los datos, utilizando mĆ©todos visuales y estadĆsticos. En su base, implica abordar la incertidumbre y la diversidad de estructuras posibles en los datos, evitando asumir un Ćŗnico modelo probabilĆstico como absoluto. El EDA enfatiza la exploración sobre la inferencia estricta, buscando mĆ©todos robustos y flexibles que funcionen en diversas circunstancias, con el objetivo de proporcionar una comprensión preliminar y preparar el terreno para anĆ”lisis mĆ”s profundos.
El dataset de expolanetas detectados con el telescopio espacial Kepler
El Archivo de Exoplanetas de la NASA es un catĆ”logo astronómico en lĆnea y un servicio de datos que recopila, correlaciona y organiza información sobre exoplanetas y sus estrellas anfitrionas. AdemĆ”s, proporciona herramientas para trabajar con estos datos. Este archivo estĆ” dedicado a la recopilación y difusión de conjuntos de datos pĆŗblicos claves utilizados en la bĆŗsqueda y caracterización de planetas extrasolares y sus estrellas (IPAC, n.d.a).
Este archivo estÔ dedicado a la recopilación y difusión de conjuntos de datos públicos clave utilizados en la búsqueda y caracterización de planetas extrasolares y sus estrellas (IPAC, n.d.b). Entre los datos disponibles se incluyen:
- ParƔmetros estelares: posiciones, magnitudes y
temperaturas de las estrellas anfitrionas.
- ParĆ”metros de exoplanetas: masas, caracterĆsticas
orbitales y otros datos fundamentales.
- Datos de descubrimiento y caracterización: curvas de velocidad radial publicadas, curvas de luz fotométricas, imÔgenes y espectros.
Esta base de datos es una herramienta esencial para la investigación en el campo de la astronomĆa de exoplanetas y ha sido utilizada en numerosos estudios cientĆficos y proyectos de investigación. Se encuentra disponible en lĆnea y es de libre acceso para la comunidad cientĆfica y el pĆŗblico en general en el sitio del IPAC del Caltech. El IPAC (Infrared Processing and Analysis Center) es un centro de investigación y procesamiento de datos astronómicos ubicado en el Instituto de TecnologĆa de California (Caltech). Se especializa en la gestión y anĆ”lisis de datos de misiones espaciales y telescopios astronómicos, en colaboración con agencias como la NASA, la Fundación Nacional de Ciencias (NSF) y el Laboratorio de Propulsión a Chorro (JPL) (IPAC, n.d.c).
Al momento de la extracción (14 de enero de 2025) el dataset de exoplanetas contiene información sobre 28.217 exoplanetas (entre confirmados, propuestos y en estudio) y sus caracterĆsticas. La base de datos de IPAC contiene información sobre los exoplanetas detectados por la misión Kepler y otros telescopios, pero para este trabajo se utilizarĆ” solo la información de los exoplanetas detectados por la misión Kepler (Cermak, A. & Cermak, A., n.d.).
Se cargarĆ”n los datos, se filtrarĆ”n las filas de los explonetas confirmados, las columnas relevantes, se eliminarĆ”n los valores faltantes y se realizarĆ” un anĆ”lisis exploratorio de los datos para luego realizar la regresión lineal y logĆstica.
Preprocesamiento de datos
Se cargan los datos del dataset de exoplanetas de la misión Kepler
del archivo keplerexoplanets.csv. El mismo
se obtuvo de la pƔgina del IPAC del Caltech (IPAC, n.d.a). La consulta usada
para producir
el dataset fue la siguiente:
# This file was produced by the NASA Exoplanet Archive http://exoplanetarchive.ipac.caltech.edu
# Tue Jan 14 15:20:53 2025
#
# User preference: *
#
# CONSTRAINT: where (disc_facility like '%Kepler%')
#
# COLUMN pl_name: Planet Name
# COLUMN hostname: Host Name
# COLUMN pl_letter: Planet Letter
# COLUMN hd_name: HD ID
# COLUMN hip_name: HIP ID
# COLUMN tic_id: TIC ID
# COLUMN gaia_id: GAIA ID
# COLUMN default_flag: Default Parameter Set
# COLUMN sy_snum: Number of Stars
# COLUMN sy_pnum: Number of Planets
# COLUMN sy_mnum: Number of Moons
# COLUMN cb_flag: Circumbinary Flag
# COLUMN discoverymethod: Discovery Method
# COLUMN disc_year: Discovery Year
# COLUMN disc_refname: Discovery Reference
# COLUMN disc_pubdate: Discovery Publication Date
# COLUMN disc_locale: Discovery Locale
# COLUMN disc_facility: Discovery Facility
# COLUMN disc_telescope: Discovery Telescope
# COLUMN disc_instrument: Discovery Instrument
# COLUMN rv_flag: Detected by Radial Velocity Variations
# COLUMN pul_flag: Detected by Pulsar Timing Variations
# COLUMN ptv_flag: Detected by Pulsation Timing Variations
# COLUMN tran_flag: Detected by Transits
# COLUMN ast_flag: Detected by Astrometric Variations
# COLUMN obm_flag: Detected by Orbital Brightness Modulations
# COLUMN micro_flag: Detected by Microlensing
# COLUMN etv_flag: Detected by Eclipse Timing Variations
# COLUMN ima_flag: Detected by Imaging
# COLUMN dkin_flag: Detected by Disk Kinematics
# COLUMN soltype: Solution Type
# COLUMN pl_controv_flag: Controversial Flag
# COLUMN pl_refname: Planetary Parameter Reference
# COLUMN pl_orbper: Orbital Period [days]
# COLUMN pl_orbsmax: Orbit Semi-Major Axis [au]
# COLUMN pl_rade: Planet Radius [Earth Radius]
# COLUMN pl_radj: Planet Radius [Jupiter Radius]
# COLUMN pl_masse: Planet Mass [Earth Mass]
# COLUMN pl_massj: Planet Mass [Jupiter Mass]
# COLUMN pl_msinie: Planet Mass*sin(i) [Earth Mass]
# COLUMN pl_msinij: Planet Mass*sin(i) [Jupiter Mass]
# COLUMN pl_cmasse: Planet Mass*sin(i)/sin(i) [Earth Mass]
# COLUMN pl_cmassj: Planet Mass*sin(i)/sin(i) [Jupiter Mass]
# COLUMN pl_bmasse: Planet Mass or Mass*sin(i) [Earth Mass]
# COLUMN pl_bmassj: Planet Mass or Mass*sin(i) [Jupiter Mass]
# COLUMN pl_bmassprov: Planet Mass or Mass*sin(i) Provenance
# COLUMN pl_dens: Planet Density [g/cm**3]
# COLUMN pl_orbeccen: Eccentricity
# COLUMN pl_insol: Insolation Flux [Earth Flux]
# COLUMN pl_eqt: Equilibrium Temperature [K]
# COLUMN pl_orbincl: Inclination [deg]
# COLUMN pl_tranmid: Transit Midpoint [days]
# COLUMN pl_tsystemref: Time Reference Frame and Standard
# COLUMN ttv_flag: Data show Transit Timing Variations
# COLUMN pl_imppar: Impact Parameter
# COLUMN pl_trandep: Transit Depth [%]
# COLUMN pl_trandur: Transit Duration [hours]
# COLUMN pl_ratdor: Ratio of Semi-Major Axis to Stellar Radius
# COLUMN pl_ratror: Ratio of Planet to Stellar Radius
# COLUMN pl_occdep: Occultation Depth [%]
# COLUMN pl_orbtper: Epoch of Periastron [days]
# COLUMN pl_orblper: Argument of Periastron [deg]
# COLUMN pl_rvamp: Radial Velocity Amplitude [m/s]
# COLUMN pl_projobliq: Projected Obliquity [deg]
# COLUMN pl_trueobliq: True Obliquity [deg]
# COLUMN st_refname: Stellar Parameter Reference
# COLUMN st_spectype: Spectral Type
# COLUMN st_teff: Stellar Effective Temperature [K]
# COLUMN st_rad: Stellar Radius [Solar Radius]
# COLUMN st_mass: Stellar Mass [Solar mass]
# COLUMN st_met: Stellar Metallicity [dex]
# COLUMN st_metratio: Stellar Metallicity Ratio
# COLUMN st_lum: Stellar Luminosity [log(Solar)]
# COLUMN st_logg: Stellar Surface Gravity [log10(cm/s**2)]
# COLUMN st_age: Stellar Age [Gyr]
# COLUMN st_dens: Stellar Density [g/cm**3]
# COLUMN st_vsin: Stellar Rotational Velocity [km/s]
# COLUMN st_rotp: Stellar Rotational Period [days]
# COLUMN st_radv: Systemic Radial Velocity [km/s]
# COLUMN sy_refname: System Parameter Reference
# COLUMN rastr: RA [sexagesimal]
# COLUMN ra: RA [deg]
# COLUMN decstr: Dec [sexagesimal]
# COLUMN dec: Dec [deg]
# COLUMN glat: Galactic Latitude [deg]
# COLUMN glon: Galactic Longitude [deg]
# COLUMN elat: Ecliptic Latitude [deg]
# COLUMN elon: Ecliptic Longitude [deg]
# COLUMN sy_pm: Total Proper Motion [mas/yr]
# COLUMN sy_pmra: Proper Motion (RA) [mas/yr]
# COLUMN sy_pmdec: Proper Motion (Dec) [mas/yr]
# COLUMN sy_dist: Distance [pc]
# COLUMN sy_plx: Parallax [mas]
# COLUMN sy_bmag: B (Johnson) Magnitude
# COLUMN sy_vmag: V (Johnson) Magnitude
# COLUMN sy_jmag: J (2MASS) Magnitude
# COLUMN sy_hmag: H (2MASS) Magnitude
# COLUMN sy_kmag: Ks (2MASS) Magnitude
# COLUMN sy_umag: u (Sloan) Magnitude
# COLUMN sy_gmag: g (Sloan) Magnitude
# COLUMN sy_rmag: r (Sloan) Magnitude
# COLUMN sy_imag: i (Sloan) Magnitude
# COLUMN sy_zmag: z (Sloan) Magnitude
# COLUMN sy_w1mag: W1 (WISE) Magnitude
# COLUMN sy_w2mag: W2 (WISE) Magnitude
# COLUMN sy_w3mag: W3 (WISE) Magnitude
# COLUMN sy_w4mag: W4 (WISE) Magnitude
# COLUMN sy_gaiamag: Gaia Magnitude
# COLUMN sy_icmag: I (Cousins) Magnitude
# COLUMN sy_tmag: TESS Magnitude
# COLUMN sy_kepmag: Kepler Magnitude
# COLUMN rowupdate: Date of Last Update
# COLUMN pl_pubdate: Planetary Parameter Reference Publication Date
# COLUMN releasedate: Release Date
# COLUMN pl_nnotes: Number of Notes
# COLUMN st_nphot: Number of Photometry Time Series
# COLUMN st_nrvc: Number of Radial Velocity Time Series
# COLUMN st_nspec: Number of Stellar Spectra Measurements
# COLUMN pl_nespec: Number of Eclipse Spectra
# COLUMN pl_ntranspec: Number of Transmission Spectra
# COLUMN pl_ndispec: Number of Direct Imaging Spectra
#
El encabezado mĆ”s arriba estaba incluĆdo en el archivo .CSV generado y se incluye aquĆ para reproducir la consulta. El dataset contiene información sobre los sistemas exoplanetarios detectados por la misión Kepler y el diccionario de datos se encuentra en lĆnea (IPAC, n.d.d) explicando en mĆ”s profundidad la semĆ”ntica de las variables.
Todos los archivos necesarios para este trabajo se encuentran en el
repositorio de GitHub del autor (Nicolau, Jorge,
n.d.) y se pueden descargar desde allĆ para reproducir este
anƔlisis, incluyendo el dataset
keplerexoplanets.csv que a continuación se
carga.
library(readr)
# Cargar los datos del archivo CSV
kepler_data <- read_csv("keplerexoplanets.csv")
Estructura de los Datos
library(knitr)
# Capturar la salida de str() como texto
str_output <- capture.output(str(kepler_data, list.len = Inf, give.attr=FALSE))
# Convertir la salida en un data frame para formatearla como tabla
str_df <- data.frame(
Details = str_output,
stringsAsFactors = FALSE
)
# Mostrar la salida en formato de tabla con kable
kable(str_df, col.names = c("Tipo de datos y previsualización"), align = "l")
| Tipo de datos y previsualización |
|---|
| spc_tbl_ [28,217 Ć 121] (S3: spec_tbl_df/tbl_df/tbl/data.frame) |
| $ pl_name : chr [1:28217] ā2MASS J19383260+4603591 bā ā2MASS J19383260+4603591 bā āKIC 10001893 bā āKIC 10001893 cā ⦠|
| $ hostname : chr [1:28217] ā2MASS J19383260+4603591ā ā2MASS J19383260+4603591ā āKIC 10001893ā āKIC 10001893ā ⦠|
| $ pl_letter : chr [1:28217] ābā ābā ābā ācā ⦠|
| $ hd_name : logi [1:28217] NA NA NA NA NA NA ⦠|
| $ hip_name : chr [1:28217] NA NA NA NA ⦠|
| $ tic_id : chr [1:28217] āTIC 271164763ā āTIC 271164763ā āTIC 158488181ā āTIC 158488181ā ⦠|
| $ gaia_id : chr [1:28217] āGaia DR2 2080063931448749824ā āGaia DR2 2080063931448749824ā āGaia DR2 2130473176626619136ā āGaia DR2 2130473176626619136ā ⦠|
| $ default_flag : num [1:28217] 1 0 1 1 1 1 1 1 0 0 ⦠|
| $ sy_snum : num [1:28217] 2 2 1 1 1 1 1 1 1 1 ⦠|
| $ sy_pnum : num [1:28217] 3 3 3 3 3 1 1 1 2 2 ⦠|
| $ sy_mnum : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
| $ cb_flag : num [1:28217] 1 1 0 0 0 0 0 0 0 0 ⦠|
| $ discoverymethod: chr [1:28217] āEclipse Timing Variationsā āEclipse Timing Variationsā āOrbital Brightness Modulationā āOrbital Brightness Modulationā ⦠|
| $ disc_year : num [1:28217] 2015 2015 2014 2014 2014 ⦠|
| $ disc_refname : chr [1:28217] āBaraā| truncated āBaraā| truncated āSā| truncated āSā| truncated ⦠|
| $ disc_pubdate : chr [1:28217] ā2015-05ā ā2015-05ā ā2014-10ā ā2014-10ā ⦠|
| $ disc_locale : chr [1:28217] āSpaceā āSpaceā āSpaceā āSpaceā ⦠|
| $ disc_facility : chr [1:28217] āKeplerā āKeplerā āKeplerā āKeplerā ⦠|
| $ disc_telescope : chr [1:28217] ā0.95 m Kepler Telescopeā ā0.95 m Kepler Telescopeā ā0.95 m Kepler Telescopeā ā0.95 m Kepler Telescopeā ⦠|
| $ disc_instrument: chr [1:28217] āKepler CCD Arrayā āKepler CCD Arrayā āKepler CCD Arrayā āKepler CCD Arrayā ⦠|
| $ rv_flag : num [1:28217] 0 0 0 0 0 1 0 0 0 0 ⦠|
| $ pul_flag : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
| $ ptv_flag : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
| $ tran_flag : num [1:28217] 0 0 0 0 0 0 1 1 1 1 ⦠|
| $ ast_flag : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
| $ obm_flag : num [1:28217] 0 0 1 1 1 1 0 0 0 0 ⦠|
| $ micro_flag : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
| $ etv_flag : num [1:28217] 1 1 0 0 0 0 0 0 0 0 ⦠|
| $ ima_flag : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
| $ dkin_flag : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
| $ soltype : chr [1:28217] āPublished Confirmedā āPublished Confirmedā āPublished Confirmedā āPublished Confirmedā ⦠|
| $ pl_controv_flag: num [1:28217] 0 0 1 1 1 0 0 0 0 0 ⦠|
| $ pl_refname : chr [1:28217] āEsmeā| truncated āBaraā| truncated āSā| truncated āSā| truncated ⦠|
| $ pl_orbper : num [1:28217] 406 416 0.22 0.325 0.812 ⦠|
| $ pl_orbsmax : num [1:28217] NA 0.92 NA NA NA ⦠|
| $ pl_rade : num [1:28217] NA NA NA NA NA NA 5.5 6.9 7.23 6.7 ⦠|
| $ pl_radj : num [1:28217] NA NA NA NA NA NA 0.491 0.616 0.645 0.598 ⦠|
| $ pl_masse : num [1:28217] NA 604 NA NA NA ⦠|
| $ pl_massj : num [1:28217] NA 1.9 NA NA NA NA NA NA NA NA ⦠|
| $ pl_msinie : num [1:28217] 591 NA NA NA NA ⦠|
| $ pl_msinij : num [1:28217] 1.86 NA NA NA NA 2 NA NA NA NA ⦠|
| $ pl_cmasse : logi [1:28217] NA NA NA NA NA NA ⦠|
| $ pl_cmassj : logi [1:28217] NA NA NA NA NA NA ⦠|
| $ pl_bmasse : num [1:28217] 591 604 NA NA NA ⦠|
| $ pl_bmassj : num [1:28217] 1.86 1.9 NA NA NA 2 NA NA NA NA ⦠|
| $ pl_bmassprov : chr [1:28217] āMsiniā āMassā NA NA ⦠|
| $ pl_dens : num [1:28217] NA NA NA NA NA NA NA NA NA NA ⦠|
| $ pl_orbeccen : num [1:28217] 0.33 NA NA NA NA NA NA NA 0 0 ⦠|
| $ pl_insol : num [1:28217] NA NA NA NA NA NA NA NA 2.14 2.14 ⦠|
| $ pl_eqt : num [1:28217] NA NA NA NA NA NA NA NA 308 308 ⦠|
| $ pl_orbincl : num [1:28217] NA NA NA NA NA ⦠|
| $ pl_tranmid : num [1:28217] NA NA NA NA NA ⦠|
| $ pl_tsystemref : chr [1:28217] āBJD-TDBā NA NA NA ⦠|
| $ ttv_flag : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
| $ pl_imppar : num [1:28217] NA NA NA NA NA NA NA NA 0.424 0.212 ⦠|
| $ pl_trandep : num [1:28217] NA NA NA NA NA ⦠|
| $ pl_trandur : num [1:28217] NA NA NA NA NA ⦠|
| $ pl_ratdor : num [1:28217] NA NA NA NA NA ⦠|
| $ pl_ratror : num [1:28217] NA NA NA NA NA ⦠|
| $ pl_occdep : logi [1:28217] NA NA NA NA NA NA ⦠|
| $ pl_orbtper : num [1:28217] 2455131 NA NA NA NA ⦠|
| $ pl_orblper : num [1:28217] 302 NA NA NA NA NA NA NA NA NA ⦠|
| $ pl_rvamp : num [1:28217] NA NA NA NA NA ⦠|
| $ pl_projobliq : num [1:28217] NA NA NA NA NA NA NA NA NA NA ⦠|
| $ pl_trueobliq : logi [1:28217] NA NA NA NA NA NA ⦠|
| $ st_refname : chr [1:28217] āEsmeā| truncated āBaraā| truncated āSā| truncated āSā| truncated ⦠|
| $ st_spectype : chr [1:28217] NA NA NA NA ⦠|
| $ st_teff : num [1:28217] 29564 NA 27500 27500 27500 ⦠|
| $ st_rad : num [1:28217] 0.2 NA NA NA NA 1.57 1.01 1.01 1.39 1.39 ⦠|
| $ st_mass : num [1:28217] 0.48 0.48 NA NA NA 1.22 1.01 0.98 1.03 1.03 ⦠|
| $ st_met : num [1:28217] NA NA NA NA NA 0.01 -0.04 -0.42 -0.38 -0.38 ⦠|
| $ st_metratio : chr [1:28217] NA NA NA NA ⦠|
| $ st_lum : num [1:28217] NA NA NA NA NA NA NA NA NA NA ⦠|
| $ st_logg : num [1:28217] 5.51 NA 5.35 5.35 5.35 4.09 4.42 4.44 4.16 4.16 ⦠|
| $ st_age : num [1:28217] NA NA NA NA NA NA NA NA NA NA ⦠|
| $ st_dens : num [1:28217] NA NA NA NA NA ⦠|
| $ st_vsin : num [1:28217] NA NA NA NA NA NA NA NA NA NA ⦠|
| $ st_rotp : num [1:28217] NA NA NA NA NA NA NA NA NA NA ⦠|
| $ st_radv : num [1:28217] NA NA 25 25 25 NA NA NA NA NA ⦠|
| $ sy_refname : chr [1:28217] āTICv8ā āTICv8ā āTICv8ā āTICv8ā ⦠|
| $ rastr : chr [1:28217] ā19h38m32.62sā ā19h38m32.62sā ā19h09m33.42sā ā19h09m33.42sā ⦠|
| $ ra : num [1:28217] 295 295 287 287 287 ⦠|
| $ decstr : chr [1:28217] ā+46d03m59.07sā ā+46d03m59.07sā ā+46d59m04.02sā ā+46d59m04.02sā ⦠|
| $ dec : num [1:28217] 46.1 46.1 47 47 47 ⦠|
| $ glat : num [1:28217] 11.7 11.7 16.6 16.6 16.6 ⦠|
| $ glon : num [1:28217] 79 79 77.7 77.7 77.7 ⦠|
| $ elat : num [1:28217] 65.7 65.7 68.4 68.4 68.4 ⦠|
| $ elon : num [1:28217] 315 315 304 304 304 ⦠|
| $ sy_pm : num [1:28217] 6.97 6.97 6.01 6.01 6.01 ⦠|
| $ sy_pmra : num [1:28217] 5.2 5.2 1.32 1.32 1.32 ⦠|
| $ sy_pmdec : num [1:28217] -4.64 -4.64 -5.86 -5.86 -5.86 ⦠|
| $ sy_dist : num [1:28217] 396 396 1673 1673 1673 ⦠|
| $ sy_plx : num [1:28217] 2.495 2.495 0.569 0.569 0.569 ⦠|
| $ sy_bmag : num [1:28217] 12.1 12.1 15.1 15.1 15.1 ⦠|
| $ sy_vmag : num [1:28217] 12.7 12.7 15.8 15.8 15.8 ⦠|
| $ sy_jmag : num [1:28217] 12.8 12.8 16.4 16.4 16.4 ⦠|
| $ sy_hmag : num [1:28217] 12.9 12.9 15.7 15.7 15.7 ⦠|
| $ sy_kmag : num [1:28217] 13 13 16.6 16.6 16.6 ⦠|
| $ sy_umag : num [1:28217] NA NA NA NA NA NA NA NA NA NA ⦠|
| $ sy_gmag : num [1:28217] NA NA NA NA NA NA NA NA NA NA ⦠|
| $ sy_rmag : num [1:28217] NA NA NA NA NA NA NA NA NA NA ⦠|
| $ sy_imag : num [1:28217] NA NA NA NA NA NA NA NA NA NA ⦠|
| $ sy_zmag : num [1:28217] NA NA NA NA NA NA NA NA NA NA ⦠|
| $ sy_w1mag : num [1:28217] 12.9 12.9 NA NA NA ⦠|
| $ sy_w2mag : num [1:28217] 12.9 12.9 NA NA NA ⦠|
| $ sy_w3mag : num [1:28217] 12.7 12.7 NA NA NA ⦠|
| $ sy_w4mag : num [1:28217] 9.2 9.2 NA NA NA ⦠|
| $ sy_gaiamag : num [1:28217] 12.1 12.1 15.7 15.7 15.7 ⦠|
| $ sy_icmag : logi [1:28217] NA NA NA NA NA NA ⦠|
| $ sy_tmag : num [1:28217] 12.5 12.5 16 16 16 ⦠|
| $ sy_kepmag : num [1:28217] 12.3 12.3 15.8 15.8 15.8 ⦠|
| $ rowupdate : Date[1:28217], format: ā2022-04-19ā ā2015-06-04ā ⦠|
| $ pl_pubdate : chr [1:28217] ā2022-04ā ā2015-05ā ā2014-10ā ā2014-10ā ⦠|
| $ releasedate : Date[1:28217], format: ā2022-04-19ā ā2015-06-04ā ⦠|
| $ pl_nnotes : num [1:28217] 1 1 1 1 1 1 2 1 2 2 ⦠|
| $ st_nphot : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
| $ st_nrvc : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
| $ st_nspec : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
| $ pl_nespec : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
| $ pl_ntranspec : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
| $ pl_ndispec : num [1:28217] 0 0 0 0 0 0 0 0 0 0 ⦠|
Para el anƔlisis se considerarƔn solo los exoplanetas confirmados y se eliminarƔn las columnas no relevantes para el anƔlisis.
Para reducir la dimensionalidad del problema, a continuación se eliminan las columnas con referencias a sitios web no relevantes para el anĆ”lisis. TambiĆ©n se eliminan los datos de referencia de los planetas, estrellas y sistemas no relevantes para el anĆ”lisis tales como referencias a catĆ”logos externos de estrellas y sistemas, información de publicación del descubrimiento, información de detección, información de fotometrĆa, banderas de organización interna del dataset, información del sistema planetario y detalles tĆ©cnicos de la detección.
Para reducir la cantidad de registros del dataset y como se busca
predecir la habitabilidad de los exoplanetas en sistemas similares al
Solar, se filtran los sistemas con estrellas de tamaƱo similar al Sol
(0.9 a 1.1 radios solares). Hay muchas entradas con valores faltantes en
las columnas de tipo espectral de las estrellas (la mayorĆa) que serĆa
un mejor indicador para determinarl la zona habitable, por eso se toma
como criterio de filtro el tamaƱo de las estrellas. AdemƔs se
consideraran para la muesta solo los exoplanetas publicados en la
literatura cientĆfica, por lo que se filtra por āPublished Confirmedā en
la columna soltype.
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# PARTE 1 - FILTRO DE DATOS
# Seleccionar los sistemas con estrellas de tamaƱo
# similar al Sol (0.9 a 1.1 radios solares)
kepler_data <- filter(kepler_data, st_rad >= 0.9 & st_rad <= 1.1)
# Seleccionar solo los exoplanetas publicados en la literatura cientĆfica
kepler_data <- filter(kepler_data, soltype == "Published Confirmed")
# PARTE 2 - REDUCCION DE LA DIMENSIONALIDAD
# Eliminar columnas de referencias a sitios web
kepler_data <- subset(kepler_data, select = c(-disc_refname, -pl_refname, -st_refname, -sy_refname))
# Eliminar columnas de id de catalogos externos de estrellas y sistemas
kepler_data <- subset(kepler_data, select = c(-tic_id, -gaia_id))
# Eliminar información referente a la publicación del descubrimiento
# asà como la información del instrumento utilizado, para todos es Kepler
kepler_data <- subset(kepler_data, select = c(-disc_year, -disc_pubdate, -disc_locale, -disc_facility, -disc_telescope, -disc_instrument, -rowupdate, -pl_pubdate, -releasedate))
# Eliminar columnas con información referente a la detección
kepler_data <- subset(kepler_data, select = c(-rv_flag, -pul_flag, -ptv_flag, -tran_flag, -ast_flag, -obm_flag, -micro_flag, -etv_flag, -ima_flag, -dkin_flag))
# Eliminar columnas con información de fotometria
kepler_data <- subset(kepler_data, select = c(-sy_bmag, -sy_vmag, -sy_jmag, -sy_hmag, -sy_kmag, -sy_umag, -sy_gmag, -sy_rmag, -sy_imag, -sy_zmag, -sy_w1mag, -sy_w2mag, -sy_w3mag, -sy_w4mag, -sy_gaiamag, -sy_icmag, -sy_tmag, -sy_kepmag))
# Eliminar banderas de organización interna del dataset
kepler_data <- subset(kepler_data, select = c(-pl_nnotes, -pl_controv_flag, -default_flag))
# Eliminar columnas con información del sistema planetario
# y detalles técnicos de la detección
kepler_data <- subset(kepler_data, select = c(-sy_mnum, -pl_ndispec))
# Eliminar columnas con información adicional de fotometria
kepler_data <- subset( kepler_data, select = c(-st_nphot, -st_nrvc, -st_nspec, -pl_nespec, -pl_ntranspec))
El dataset resultante se guarda en un archivo CSV llamado
keplerfiltered.csv. El dataset resultante
contiene 2547 registros y 68 columnas.
Las columnas en el dataset filtrado, y su descripción extraĆda del diccionario de datos (IPAC, n.d.d), son las siguientes:
library(dplyr)
library(knitr)
# Ordenar las columnas alfabƩticamente
kepler_data <- kepler_data[, order(names(kepler_data))]
# Copiar el nombre de las columnas a un data frame
column_names <- data.frame(
Column = names(kepler_data),
stringsAsFactors = FALSE
)
# Agregar una columna con la descripción de la variable
# Fuente: https://exoplanetarchive.ipac.caltech.edu/docs/API_PS_columns.html
column_names <- column_names %>%
mutate(Description = c(
"cb_flag: Flag de circumbinario (el planeta orbita un sistema binario)",
"dec: Declinación de la estrella (en grados decimales)",
"decstr: Declinación de la estrella (en grados sexagesimales)",
"discoverymethod: MƩtodo de descubrimiento del planeta",
"elat: Latitud eclĆptica de la estrella (en grados decimales)",
"elon: Longitud eclĆptica de la estrella (en grados decimales)",
"glat: Latitud galƔctica de la estrella (en grados decimales)",
"glon: Longitud galƔctica de la estrella (en grados decimales)",
"hd_name: Nombre del sistema estelar en el catƔlogo Henry Draper",
"hip_name: Nombre del sistema estelar en el catƔlogo Hipparcos",
"hostname: Nombre del sistema estelar utilizado en la literatura",
"pl_bmasse: Mejor estimación de la masa del planeta (en masas terrestres)",
"pl_bmassj: Mejor estimación de la masa del planeta (en masas jovianas)",
"pl_bmassprov: Proveedor de la mejor estimación de la masa del planeta (mĆnima o proyectada)",
"pl_cmasse: Masa mĆnima proyectada (en masas terrestres)",
"pl_cmassj: Masa mĆnima proyectada (en masas jovianas)",
"pl_dens: Densidad del planeta (en g/cm³)",
"pl_eqt: Temperatura de equilibrio del planeta considero como un cuerpo oscur (en grados K)",
"pl_imppar: ParƔmetro de impacto del planeta como distancia proyectada del centro del planeta al centro de la estrella (en radios estelares)",
"pl_insol: Insolación del planeta en terminos la insolación de la tierra (en W/m²)",
"pl_letter: Letra del planeta en el sistema (primer planeta es b)",
"pl_masse: Masa del planeta (en masas terrestres)",
"pl_massj: Masa del planeta (en masas jovianas)",
"pl_msinie: MĆnimo de masa medida por el mĆ©todo de velocidad radial (en masas terrestres)",
"pl_msinij: MĆnimo de masa medida por el mĆ©todo de velocidad radial (en masas jovianas)",
"pl_occdep: Profundidad del eclipse del planeta en terminos de el flujo relativo decreciente frente a su estrella (en %)",
"pl_orbeccen: Excentricidad orbital del planeta",
"pl_orbincl: Inclinación orbital del planeta respecto de la lĆnea de visión desde la Tierra (en grados)",
"pl_orblper: El argumento del periastro del planeta (en grados)",
"pl_orbper: Periodo orbital del planeta (en dĆas)",
"pl_orbsmax: Distancia orbital semieje mayor (en UA)",
"pl_orbtper: El momento del paso del planeta por el periastro (en grados)",
"pl_projobliq: Inclinación proyectada del planeta respecto de la lĆnea de visión desde la Tierra (en grados)",
"pl_rade: Radio del planeta (en radios terrestres)",
"pl_radj: Radio del planeta (en radios jovianos)",
"pl_ratdor: cociente del semieje orbital mayor sobre el radio estelar",
"pl_ratror: cociente del radio del planeta sobre el radio estelar",
"pl_rvamp: Amplitud de la velocidad radial del planeta (en m/s)",
"pl_trandep: Profundidad del trƔnsito del planeta en terminos de el flujo relativo decreciente frente a su estrella (en %)",
"pl_trandur: Duración del trÔnsito del planeta (en horas)",
"pl_tranmid: Tiempo de trĆ”nsito medio del planeta respecto de su estrella (en dĆas)",
"pl_trueobliq: Inclinación verdadera del planeta respecto de la lĆnea de visión desde la Tierra (en grados)",
"pl_tsystemref: Sistema de Tiempo de Referencia del sistema planetario",
"ra: Ascensión recta de la estrella (en grados decimales)",
"rastr: Ascensión recta de la estrella (en grados sexagesimales)",
"soltype: Disposición del planeta según el conjunto de parÔmetros planetarios dado",
"st_age: Edad de la estrella (en Ga, gigaaƱos, o miles de millones de aƱos)",
"st_dens: Densidad de la estrella (en g/cm³)",
"st_logg: Gravedad superficial de la estrella (en logaritmo en base 10 de cm/s²)",
"st_lum: Luminosidad de la estrella (en logartima en base 10 de unidades solares)",
"st_mass: Masa de la estrella (en masas solares)",
"st_met: Medición del contenido de metales en la fotosfera de la estrella en comparación con el contenido de hidrógeno",
"st_metratio: Relación de metalicidad de la estrella",
"st_rad: Radio de la estrella (en radios solares)",
"st_radv: Velocidad radial de la estrella (en km/s)",
"st_rotp: Periodo de rotación de la estrella (en dĆas)",
"st_spectype: Tipo espectral de la estrella segĆŗn el sistema Morgan-Keenan",
"st_teff: Temperatura efectiva de la estrella (en grados K)",
"st_vsin: Velocidad de rotación de la estrella (en km/s)",
"sy_dist: Distancia del sistema (en parsecs)",
"sy_plx: Paralaje del sistema (en miliarcosegundos)",
"sy_pm: Movimiento propio del sistema (en miliarcosegundos/aƱo)",
"sy_pmdec: Movimiento propio del sistema en declinación (en miliarcosegundos/año)",
"sy_pmra: Movimiento propio del sistema en ascensión recta (en miliarcosegundos/año)",
"sy_pnum: NĆŗmero de planetas en el sistema",
"sy_snum: NĆŗmero de estrellas en el sistema",
"ttv_flag: Flag de trƔnsito de tiempo variante",
"pl_name: Nombre del planeta"))
# Eliminar de la columna Description el prefijo de la variable
column_names$Description <- gsub("^.*: ", "", column_names$Description)
# Elimina la columna con el numero de fila
rownames(column_names) <- NULL
kable(column_names, col.names = c("Variable", "Descripción"), align = "l")
| Variable | Descripción |
|---|---|
| cb_flag | Flag de circumbinario (el planeta orbita un sistema binario) |
| dec | Declinación de la estrella (en grados decimales) |
| decstr | Declinación de la estrella (en grados sexagesimales) |
| discoverymethod | MƩtodo de descubrimiento del planeta |
| elat | Latitud eclĆptica de la estrella (en grados decimales) |
| elon | Longitud eclĆptica de la estrella (en grados decimales) |
| glat | Latitud galƔctica de la estrella (en grados decimales) |
| glon | Longitud galƔctica de la estrella (en grados decimales) |
| hd_name | Nombre del sistema estelar en el catƔlogo Henry Draper |
| hip_name | Nombre del sistema estelar en el catƔlogo Hipparcos |
| hostname | Nombre del sistema estelar utilizado en la literatura |
| pl_bmasse | Mejor estimación de la masa del planeta (en masas terrestres) |
| pl_bmassj | Mejor estimación de la masa del planeta (en masas jovianas) |
| pl_bmassprov | Proveedor de la mejor estimación de la masa del planeta (mĆnima o proyectada) |
| pl_cmasse | Masa mĆnima proyectada (en masas terrestres) |
| pl_cmassj | Masa mĆnima proyectada (en masas jovianas) |
| pl_dens | Densidad del planeta (en g/cm³) |
| pl_eqt | Temperatura de equilibrio del planeta considero como un cuerpo oscur (en grados K) |
| pl_imppar | ParƔmetro de impacto del planeta como distancia proyectada del centro del planeta al centro de la estrella (en radios estelares) |
| pl_insol | Insolación del planeta en terminos la insolación de la tierra (en W/m²) |
| pl_letter | Letra del planeta en el sistema (primer planeta es b) |
| pl_masse | Masa del planeta (en masas terrestres) |
| pl_massj | Masa del planeta (en masas jovianas) |
| pl_msinie | MĆnimo de masa medida por el mĆ©todo de velocidad radial (en masas terrestres) |
| pl_msinij | MĆnimo de masa medida por el mĆ©todo de velocidad radial (en masas jovianas) |
| pl_name | Profundidad del eclipse del planeta en terminos de el flujo relativo decreciente frente a su estrella (en %) |
| pl_occdep | Excentricidad orbital del planeta |
| pl_orbeccen | Inclinación orbital del planeta respecto de la lĆnea de visión desde la Tierra (en grados) |
| pl_orbincl | El argumento del periastro del planeta (en grados) |
| pl_orblper | Periodo orbital del planeta (en dĆas) |
| pl_orbper | Distancia orbital semieje mayor (en UA) |
| pl_orbsmax | El momento del paso del planeta por el periastro (en grados) |
| pl_orbtper | Inclinación proyectada del planeta respecto de la lĆnea de visión desde la Tierra (en grados) |
| pl_projobliq | Radio del planeta (en radios terrestres) |
| pl_rade | Radio del planeta (en radios jovianos) |
| pl_radj | cociente del semieje orbital mayor sobre el radio estelar |
| pl_ratdor | cociente del radio del planeta sobre el radio estelar |
| pl_ratror | Amplitud de la velocidad radial del planeta (en m/s) |
| pl_rvamp | Profundidad del trƔnsito del planeta en terminos de el flujo relativo decreciente frente a su estrella (en %) |
| pl_trandep | Duración del trÔnsito del planeta (en horas) |
| pl_trandur | Tiempo de trĆ”nsito medio del planeta respecto de su estrella (en dĆas) |
| pl_tranmid | Inclinación verdadera del planeta respecto de la lĆnea de visión desde la Tierra (en grados) |
| pl_trueobliq | Sistema de Tiempo de Referencia del sistema planetario |
| pl_tsystemref | Ascensión recta de la estrella (en grados decimales) |
| ra | Ascensión recta de la estrella (en grados sexagesimales) |
| rastr | Disposición del planeta según el conjunto de parÔmetros planetarios dado |
| soltype | Edad de la estrella (en Ga, gigaaƱos, o miles de millones de aƱos) |
| st_age | Densidad de la estrella (en g/cm³) |
| st_dens | Gravedad superficial de la estrella (en logaritmo en base 10 de cm/s²) |
| st_logg | Luminosidad de la estrella (en logartima en base 10 de unidades solares) |
| st_lum | Masa de la estrella (en masas solares) |
| st_mass | Medición del contenido de metales en la fotosfera de la estrella en comparación con el contenido de hidrógeno |
| st_met | Relación de metalicidad de la estrella |
| st_metratio | Radio de la estrella (en radios solares) |
| st_rad | Velocidad radial de la estrella (en km/s) |
| st_radv | Periodo de rotación de la estrella (en dĆas) |
| st_rotp | Tipo espectral de la estrella segĆŗn el sistema Morgan-Keenan |
| st_spectype | Temperatura efectiva de la estrella (en grados K) |
| st_teff | Velocidad de rotación de la estrella (en km/s) |
| st_vsin | Distancia del sistema (en parsecs) |
| sy_dist | Paralaje del sistema (en miliarcosegundos) |
| sy_plx | Movimiento propio del sistema (en miliarcosegundos/aƱo) |
| sy_pm | Movimiento propio del sistema en declinación (en miliarcosegundos/año) |
| sy_pmdec | Movimiento propio del sistema en ascensión recta (en miliarcosegundos/año) |
| sy_pmra | NĆŗmero de planetas en el sistema |
| sy_pnum | NĆŗmero de estrellas en el sistema |
| sy_snum | Flag de trƔnsito de tiempo variante |
| ttv_flag | Nombre del planeta |
# Guardar los datos filtrados en un archivo CSV
write_csv(kepler_data, "keplerfiltered.csv")
# Guardar la estructura de las columnas en un archivo CSV
write_csv(column_names, "keplerdatadictionary.csv")
AnƔlisis exploratorio de datos
Para realizar un anƔlisis exploratorio de los datos, se cargan el
nuevo dataset (puede comenzarse el anƔlisis en este punto porque el
dataset preprocesado estĆ” almacenado en el archivo
keplerfiltered.csv) y se realizan algunas
visualizaciones y cƔlculos descriptivos.
library(ggplot2)
library(dplyr)
library(readr)
library(skimr)
library(knitr)
# Leer los datos completos
kepler_data <- read_csv("keplerfiltered.csv")
# Resumen de los datos con skimr solo variables numƩricas
kepler_data_num <- kepler_data %>%
select_if(is.numeric)
# Generar resumen con skimr
resumen <- skim(kepler_data_num)
# Ordenar por nombre de variable
resumen <- resumen[order(resumen$skim_variable), ]
# Filtrar columnas relevantes
resumen <- subset(resumen, select = c(
skim_variable, numeric.mean, numeric.sd, numeric.p0, numeric.p25,
numeric.p50, numeric.p75, numeric.p100, numeric.hist))
# Mostrar tabla formateada
kable(resumen, format = "markdown", digits = 4,
col.names = c("Variable", "Media", "Des.Est.", "MĆn.", "P25", "Mediana", "P75", "MĆ”x.","Hist.")
)
| Variable | Media | Des.Est. | MĆn. | P25 | Mediana | P75 | MĆ”x. | Hist. |
|---|---|---|---|---|---|---|---|---|
| cb_flag | 0.0024 | 0.0485 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 1.0000 | āāāāā |
| dec | 44.2366 | 3.6695 | 36.5773 | 41.3738 | 44.3155 | 47.1127 | 52.1491 | ā āāāā |
| elat | 64.7746 | 3.6360 | 57.6374 | 61.8480 | 64.7690 | 67.5246 | 72.4913 | ā āāāā |
| elon | 307.9950 | 8.0410 | 288.7515 | 302.3200 | 308.2267 | 314.3187 | 323.9048 | āā āāā |
| glat | 12.9778 | 3.4193 | 5.9607 | 10.4051 | 12.6586 | 15.7959 | 21.1430 | āāāā ā |
| glon | 76.3718 | 3.6938 | 68.2330 | 73.3769 | 76.4011 | 79.3326 | 84.3822 | āāāāā |
| pl_bmasse | 328.4638 | 1965.7298 | 0.7600 | 6.0133 | 18.4000 | 95.1000 | 25426.4000 | āāāāā |
| pl_bmassj | 1.0335 | 6.1849 | 0.0024 | 0.0190 | 0.0580 | 0.2992 | 80.0000 | āāāāā |
| pl_dens | 4.2419 | 8.2500 | 0.0300 | 0.6950 | 2.1300 | 5.5250 | 77.7000 | āāāāā |
| pl_eqt | 938.0333 | 564.4973 | 251.0000 | 438.7500 | 861.5000 | 1146.5000 | 2188.0000 | āāāāā |
| pl_imppar | 0.3940 | 0.2883 | 0.0000 | 0.1500 | 0.3300 | 0.6200 | 1.4830 | āā āāā |
| pl_insol | 299.3455 | 598.0846 | 0.5900 | 26.9900 | 96.9450 | 304.9000 | 4849.2600 | āāāāā |
| pl_masse | 328.4638 | 1965.7298 | 0.7600 | 6.0133 | 18.4000 | 95.1000 | 25426.4000 | āāāāā |
| pl_massj | 1.0335 | 6.1849 | 0.0024 | 0.0190 | 0.0580 | 0.2992 | 80.0000 | āāāāā |
| pl_msinie | 47.8000 | NA | 47.8000 | 47.8000 | 47.8000 | 47.8000 | 47.8000 | āāāāā |
| pl_msinij | 0.1500 | NA | 0.1500 | 0.1500 | 0.1500 | 0.1500 | 0.1500 | āāāāā |
| pl_orbeccen | 0.1177 | 0.1778 | 0.0000 | 0.0105 | 0.0420 | 0.1350 | 0.8380 | āāāāā |
| pl_orbincl | 88.6474 | 1.7458 | 82.2140 | 87.8060 | 89.1855 | 89.7905 | 93.1500 | āāāāā |
| pl_orblper | 146.9116 | 142.8866 | -163.0000 | 49.2755 | 154.7000 | 261.6000 | 357.0300 | āā āā ā |
| pl_orbper | 31.4997 | 62.6948 | 0.5383 | 5.6992 | 13.0314 | 33.6013 | 1322.3000 | āāāāā |
| pl_orbsmax | 0.1834 | 0.2236 | 0.0168 | 0.0655 | 0.1091 | 0.2170 | 2.4200 | āāāāā |
| pl_orbtper | 2455003.7584 | 106.5838 | 2454935.8000 | 2454950.2605 | 2454958.2168 | 2455011.7148 | 2455162.8000 | āāāāā |
| pl_projobliq | -35.1429 | 60.4109 | -135.0000 | -61.5000 | 0.0000 | 4.0000 | 4.0000 | āāāāā |
| pl_rade | 2.9323 | 2.4308 | 0.4000 | 1.6230 | 2.3700 | 3.0240 | 30.8000 | āāāāā |
| pl_radj | 0.2616 | 0.2169 | 0.0360 | 0.1450 | 0.2110 | 0.2700 | 2.7480 | āāāāā |
| pl_ratdor | 60.9640 | 83.9114 | 3.1000 | 11.5600 | 30.3000 | 78.3000 | 576.7000 | āāāāā |
| pl_ratror | 0.0288 | 0.0263 | 0.0056 | 0.0147 | 0.0213 | 0.0286 | 0.2873 | āāāāā |
| pl_rvamp | 47.4204 | 88.2590 | 0.2800 | 2.1000 | 3.7200 | 71.9000 | 419.5000 | āāāāā |
| pl_trandep | 0.1813 | 0.3624 | 0.0060 | 0.0481 | 0.0705 | 0.1063 | 2.2620 | āāāāā |
| pl_trandur | 4.3811 | 2.2576 | 0.8244 | 2.8100 | 3.8212 | 5.4291 | 18.8860 | āā āāā |
| pl_tranmid | 2455003.7508 | 121.7668 | 2454832.9010 | 2454967.1167 | 2454973.9640 | 2455004.6853 | 2457959.9661 | āāāāā |
| ra | 291.3112 | 4.6829 | 280.2066 | 287.6980 | 291.4314 | 295.0027 | 301.5430 | āāāāā |
| st_age | 4.5799 | 1.7720 | 0.1050 | 3.8000 | 4.2700 | 4.7900 | 11.9000 | āāāāā |
| st_dens | 1.6002 | 1.3618 | 0.0044 | 1.2072 | 1.4497 | 1.6696 | 19.9316 | āāāāā |
| st_logg | 4.4442 | 0.0556 | 4.2100 | 4.4100 | 4.4500 | 4.4800 | 5.0000 | āāāāā |
| st_lum | -0.0616 | 0.1126 | -0.4090 | -0.1360 | -0.0630 | 0.0280 | 0.2200 | āāāāā |
| st_mass | 0.9901 | 0.0642 | 0.6900 | 0.9500 | 0.9900 | 1.0300 | 1.2500 | āāāāā |
| st_met | 0.0199 | 0.1570 | -0.8160 | -0.0400 | 0.0200 | 0.1000 | 0.4800 | āāāāā |
| st_rad | 0.9922 | 0.0619 | 0.9000 | 0.9400 | 0.9900 | 1.0500 | 1.1000 | āā ā ā ā |
| st_radv | -34.3600 | 29.8608 | -98.9300 | -57.1600 | -24.7600 | -20.9300 | 9.9600 | āāāāā |
| st_rotp | 12.2225 | 5.6116 | 4.6900 | 10.1775 | 11.8900 | 14.3225 | 22.0500 | āāāāā |
| st_teff | 5684.9878 | 236.0809 | 4388.3900 | 5549.5000 | 5688.0000 | 5833.5000 | 6484.0000 | āāāāā |
| st_vsin | 2.2671 | 1.9863 | 0.3000 | 0.5000 | 2.0000 | 3.0000 | 10.4000 | āāāāā |
| sy_dist | 875.6348 | 389.0261 | 68.1730 | 625.3390 | 860.3910 | 1101.1000 | 2879.8300 | āāāāā |
| sy_plx | 1.4880 | 1.2326 | 0.3269 | 0.8774 | 1.1298 | 1.5694 | 14.6396 | āāāāā |
| sy_pm | 10.9292 | 9.0598 | 0.1586 | 4.5898 | 8.4847 | 14.5826 | 77.6183 | āāāāā |
| sy_pmdec | -3.2419 | 11.7992 | -66.6869 | -9.1002 | -3.1269 | 2.5670 | 48.3025 | āāāāā |
| sy_pmra | -0.3364 | 7.1920 | -49.3144 | -3.5431 | -0.4287 | 3.0154 | 32.8344 | āāāāā |
| sy_pnum | 2.0628 | 1.2462 | 1.0000 | 1.0000 | 2.0000 | 3.0000 | 6.0000 | āāāāā |
| sy_snum | 1.0271 | 0.1624 | 1.0000 | 1.0000 | 1.0000 | 1.0000 | 2.0000 | āāāāā |
| ttv_flag | 0.1496 | 0.3567 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 1.0000 | āāāāā |
AnƔlisis los parƔmetros numƩricos del dataset
En este anĆ”lisis preliminar se observan varias caracterĆsticas en los parĆ”metros del conjunto de datos.
Las variables cb_flag y
ttv_flag son binarias y presentan valores
mayoritariamente en 0, ya que su media es baja (~0.0024
y ~0.1496, respectivamente). Esto indica un fuerte desbalance en
los datos. AdemƔs, la variable
sy_snum casi siempre toma el valor de
1, lo que sugiere que la mayorĆa de los sistemas tienen
una sola estrella.
En cuanto a los parƔmetros de coordenadas celestes, las variables
dec y ra
(declinación y ascensión recta), asà como
elat, elon, glat y
glon (latitudes y longitudes eclĆpticas y
galƔcticas), muestran distribuciones relativamente centradas.
elon tiene un rango amplio (288-323),
mientras que glat y
glon presentan valores bien concentrados
en torno a la media, lo que sugiere la observación de un cúmulo estelar.
La longitud eclĆptica elon (288° a 324°)
corresponde a la región de las constelaciones de Capricornio y
Acuario, extendiƩndose hacia Piscis, mientras
que la latitud eclĆptica elat (57° a 72°)
es alta, indicando que estos objetos estƔn lejos del plano de la
eclĆptica y ubicados en el hemisferio norte
eclĆptico.
Dado que elat presenta valores elevados
(muy por encima del plano de la eclĆptica), esto indica que los objetos
en el conjunto de datos no estƔn alineados con el disco
principal del Sistema Solar, sino que se encuentran en una
región mÔs inclinada del cielo. Esta Ôrea corresponde en parte a la
región del Polo Norte EclĆptico, en la dirección de la
constelación del Dragón (Draco).
Las variables pl_bmasse y
pl_masse (masa en unidades terrestres),
asĆ como pl_bmassj y
pl_massj (masa en unidades jovianas),
muestran distribuciones sesgadas a la derecha, con
valores mƔximos extremadamente grandes (hasta 25,426 masas
terrestres). Hay una gran cantidad de valores pequeƱos y
algunos valores atĆpicos muy altos. De manera similar,
pl_rade (radio en radios terrestres) y
pl_radj (radio en radios jovianos)
presentan una distribución sesgada, con pocos valores
grandes. La mediana de pl_rade es
2.37, lo que indica que la mayorĆa de los exoplanetas
en el conjunto tienen mƔs del doble del tamaƱo de la
Tierra.
En cuanto a la excentricidad orbital,
pl_orbeccen es mayoritariamente cercana a
0, lo que sugiere que la mayorĆa de los exoplanetas
tienen órbitas casi circulares. La inclinación orbital,
representada por pl_orbincl, muestra una
alta concentración en valores cercanos a 90°, lo que
indica que la mayorĆa de los planetas tienen órbitas casi
perpendiculares a la lĆnea de visión. Esto es consistente con
el método de detección predominante, el método de
trƔnsito, que es mƔs efectivo para planetas que pasan frente a
su estrella.
El perĆodo orbital
(pl_orbper) presenta una mediana de
~13 dĆas, aunque existen valores extremos de hasta
1,322 dĆas, lo que indica una gran variabilidad en la
duración de las órbitas. Por otro lado, la temperatura
planetaria de equilibrio (pl_eqt)
tiene una media de 938 K, con una distribución amplia
(mĆnimo: 251 K, mĆ”ximo: 2,188 K), lo
que sugiere una mezcla de planetas frĆos y extremadamente
calientes.
Respecto a la densidad planetaria
(pl_dens), la mediana es 2.13
g/cm³, con una gran variabilidad, lo que refleja una diversidad
en la composición de los exoplanetas.
En cuanto a las caracterĆsticas estelares, las variables
st_mass y
st_rad muestran que la mayorĆa de las
estrellas en el conjunto tienen masas y radios similares al Sol
(~1.0), lo que es coherente con el filtro aplicado en el
preprocesamiento. La temperatura estelar efectiva
(st_teff) tiene una media de 5,685
K, lo que es consistente con estrellas tipo G
(similares al Sol). Si bien esto puede deberse al filtro
aplicado, también estÔ relacionado con la composición y edad de las
estrellas.
La variable st_logg (logaritmo en base
10 de la gravedad estelar superficial) se concentra en valores cercanos
a 4.45, lo que es caracterĆstico de estrellas
en la secuencia principal dentro del ciclo de vida estelar. Por
su parte, la luminosidad estelar
(st_lum) tiene una distribución centrada
alrededor de 0 en escala logarĆtmica, lo que indica que
muchas de estas estrellas tienen luminosidades similares a la
del Sol.
El parƔmetro sy_dist (distancia en
parsecs del sistema estelar) varĆa considerablemente, con valores entre
68 pc y 2,879 pc. La mediana es ~860
pc, lo que indica que la mayorĆa de estos sistemas
estƔn relativamente lejos (mƔs de 2,804 aƱos luz).
En cuanto al movimiento propio de las estrellas, las variables
sy_pm, sy_pmra y
sy_pmdec (movimiento propio del sistema
estelar en milisegundos de arco por aƱo) estƔn centradas en
0, aunque algunas estrellas presentan movimientos mƔs
rƔpidos.
El nĆŗmero de planetas por sistema
(sy_pnum) tiene una mediana de
2, aunque algunos sistemas alcanzan hasta 6
planetas detectados.
Las variables pl_trandep y
pl_trandur (profundidad y duración del
trÔnsito) muestran una distribución sesgada, con la
mayorĆa de los valores en el extremo inferior. Esto es esperable, ya que
la mayorĆa de los trĆ”nsitos son poco profundos y de corta
duración.
Por otro lado, la oblicuidad del eje de rotación del
planeta (pl_projobliq) tiene una
mediana en 0° (indicando que la mayorĆa de los planetas
tienen un eje de rotación perpendicular a la eclĆptica de su sistema),
aunque se observan valores extremos de hasta -135°.
En general, muchas distribuciones en el conjunto de datos estĆ”n sesgadas, con valores extremos que podrĆan representar atĆpicos (outliers) o simplemente reflejar la diversidad de los exoplanetas. Los datos sobre masa y radio indican que la mayorĆa de los exoplanetas son relativamente pequeƱos, aunque existen algunos extremadamente grandes. La temperatura de los planetas varĆa ampliamente, lo que sugiere una gran diversidad en los tipos de exoplanetas.
Por Ćŗltimo, en cuanto a las estrellas, la mayorĆa son similares al Sol, aunque presentan algunas diferencias en edad y metalicidad, lo cual es esperable debido al filtro aplicado en el preprocesamiento.
Detención de valores faltantes
Se analiza la cantidad de valores faltantes en el dataset para identificar posibles problemas de calidad de datos.
library(tidyr)
# Calcular la cantidad de valores faltantes por columna
missing_values <- kepler_data %>%
summarise_all(~sum(is.na(.))) %>%
gather() %>%
arrange(desc(value))
# Eliminar las columnas sin valores faltantes
missing_values <- missing_values %>%
filter(value > 0)
# Total de columnas
total_rows <- nrow(missing_values)
# Calcular el punto medio
midpoint <- ceiling(total_rows / 2)
Valores Faltantes por Columna
ggplot(missing_values[1:midpoint,], aes(x = reorder(key, value), y = value)) +
geom_bar(stat = "identity", fill = "skyblue", color = "darkblue", width = 0.5) + # Reducir ancho de las barras
geom_text(aes(label = value), hjust = -0.2, size = 3) + # AƱadir valores al final de las barras
coord_flip() +
scale_y_continuous(expand = expansion(mult = c(0.01, 0.1))) + # AƱadir margen extra en el eje y
labs(title = "",
x = "Columna",
y = "") +
theme_minimal() +
theme(
axis.text.y = element_text(size = 10), # Ajustar tamaƱo de texto en eje Y
plot.title = element_text(hjust = 0.5) # Centrar el tĆtulo
)
# Crear un grƔfico de barras con los valores faltantes que no sean cero
# con la segunda mitad de las filas
ggplot(missing_values[(midpoint+1):total_rows,], aes(x = reorder(key, value), y = value)) +
geom_bar(stat = "identity", fill = "skyblue", color = "darkblue", width = 0.5) + # Reducir ancho de las barras
geom_text(aes(label = value), hjust = -0.2, size = 3) + # AƱadir valores al final de las barras
coord_flip() +
scale_y_continuous(expand = expansion(mult = c(0.01, 0.1))) + # AƱadir margen extra en el eje y
labs(title = "",
x = "",
y = "Cantidad de Valores Faltantes") +
theme_minimal() +
theme(
axis.text.y = element_text(size = 10), # Ajustar tamaƱo de texto en eje Y
plot.title = element_text(hjust = 0.5) # Centrar el tĆtulo
)
En el anĆ”lisis del dataset, se detectó una gran cantidad de valores faltantes en varias columnas, lo que probablemente se deba a la falta de estimaciones o mediciones para ciertos exoplanetas. SegĆŗn los prefijos utilizados en las columnas del dataset, las variables pueden clasificarse en tres categorĆas principales: parĆ”metros del planeta (con prefijo pl_), parĆ”metros de la estrella (con prefijo st_) y parĆ”metros del sistema (prefijo sy_).
Como parte del proceso, se analizarƔn las variables conocidas
de los exoplanetas para identificar aquellas que puedan actuar
como predictoras de las variables con valores
faltantes. Por ejemplo, en el caso del radio del
exoplaneta (representado por
pl_radj en radios jovianos y
pl_rade en radios terrestres), que
presenta 886 valores faltantes, es posible estimarlo
utilizando otras variables disponibles en el dataset. Algunas de estas
incluyen el perĆodo orbital en dĆas
(pl_orbper, con 450 valores
faltantes), el tiempo de conjunción
(pl_tranmid, con 675 valores
faltantes) y el logaritmo en base 10 de la gravedad
superficial de la estrella del sistema planetario
(st_logg, con 554 valores
faltantes).
Para determinar cuÔles de estas variables tienen un mayor potencial como predictoras, se utilizarÔ la matriz de correlación, que permitirÔ identificar las relaciones mÔs significativas entre las variables numéricas del dataset. De esta manera, se seleccionarÔn aquellas que presenten una correlación positiva o negativa mÔs fuerte con la variable faltante, lo que facilitarÔ su estimación con un mayor grado de precisión.
Buscando correlaciones
Para elegir la mejor variable para realizar una regresión lineal se utiliza la correlación lineal simple (Pearson) para medir la relación lineal entre cada variable independiente y la dependiente. Se utilizar porque es posible que entre los parĆ”metros planetarios haya una relación lineal simple. La limitación con esta metodologĆa es que ignora la multicolinealidad y no considera relaciones no lineales. Se analiza la correlación entre las variables numĆ©ricas del dataset para identificar posibles relaciones entre ellas utilizando los mĆ©todos de Pearson (detección de correlaciones lineales). A travĆ©s de esta matriz, se pueden detectar tanto correlaciones positivas (cuando un aumento en una variable estĆ” asociado con un aumento en otra) como correlaciones negativas (cuando un aumento en una variable estĆ” relacionado con una disminución en otra). Estas relaciones pueden ser Ćŗtiles para entender patrones en los datos y seleccionar las mejores variables predictoras para modelos de estimación.
library(corrplot)
## corrplot 0.92 loaded
# Calcular la matriz de correlación
correlation_matrix_pearson <- cor(kepler_data_num, use="pairwise.complete.obs" , method = "pearson")
## Warning in cor(kepler_data_num, use = "pairwise.complete.obs", method =
## "pearson"): the standard deviation is zero
# Ordenar la matriz por nombre de columnas
correlation_matrix_pearson <- correlation_matrix_pearson[order(rownames(correlation_matrix_pearson)), order(colnames(correlation_matrix_pearson))]
# NĆŗmero de variables
n_vars <- ncol(correlation_matrix_pearson)
half <- ceiling(n_vars / 2)
Matriz de Correlación 1/3 (Pearson Cuadrante Superior)
# Parte 1: Primera mitad (diagonal superior)
correlation_matrix_pearson_sup <- correlation_matrix_pearson[1:half, 1:half]
corrplot(
correlation_matrix_pearson_sup,
method = "color",
type = "upper",
addCoef.col = "black",
number.cex = 0.4,
tl.cex = 0.5,
tl.col = "black",
col = colorRampPalette(c("indianred", "white", "steelblue"))(20),
title = ""
)
Matriz de Correlación 2/3 (Pearson Cruce)
# Parte 2: Cruce entre la primera y segunda mitad
correlation_matrix_pearson_cross <- correlation_matrix_pearson[1:half, (half + 1):n_vars]
corrplot(
correlation_matrix_pearson_cross,
method = "color",
type = "full", # Mostrar todas las correlaciones en esta sección
addCoef.col = "black",
number.cex = 0.4,
tl.cex = 0.5,
tl.col = "black",
col = colorRampPalette(c("indianred", "white", "steelblue"))(20),
title = ""
)
Matriz de Correlación 3/3 (Pearson Cuadrante Inferior)
# Parte 3: Segunda mitad (diagonal inferior)
correlation_matrix_pearson_inf <- correlation_matrix_pearson[(half + 1):n_vars, (half + 1):n_vars]
corrplot(
correlation_matrix_pearson_inf,
method = "color",
type = "upper",
addCoef.col = "black",
number.cex = 0.4,
tl.cex = 0.5,
tl.col = "black",
col = colorRampPalette(c("indianred", "white", "steelblue"))(20),
title = ""
)
La matriz de correlación es una herramienta fundamental en el anÔlisis de datos, ya que permite identificar relaciones lineales entre las variables numéricas del dataset. A través de esta matriz, se pueden detectar tanto correlaciones positivas (cuando un aumento en una variable estÔ asociado con un aumento en otra) como correlaciones negativas (cuando un aumento en una variable estÔ relacionado con una disminución en otra). Estas relaciones pueden ser útiles para entender patrones en los datos y seleccionar las mejores variables predictoras para modelos de estimación.
Un ejemplo de estas correlaciones se observa en la relación entre el
cociente del semieje orbital mayor y el perĆodo orbital
(pl_ratdor), el cual muestra una
correlación positiva con el perĆodo
orbital (pl_orbper). Esto sugiere
que a medida que el perĆodo orbital aumenta, tambiĆ©n lo hace este
cociente. En contraste, pl_ratdor presenta
una correlación negativa con la temperatura de
equilibrio del exoplaneta
(pl_eqt), lo que indica que los
exoplanetas con perĆodos orbitales largos tienden a tener temperaturas
mƔs bajas, lo cual es esperable, ya que suelen estar mƔs alejados de su
estrella anfitriona.
En cuanto a la variable que se seleccionó como variable
objetivo en el anƔlisis previo, el radio del
exoplaneta (pl_radj), se observan
relaciones significativas con otras variables. EspecĆficamente, tiene
una correlación positiva con la profundidad del
trƔnsito (pl_trandep), lo que
indica que los exoplanetas mÔs grandes generan una mayor disminución en
el brillo de su estrella al pasar frente a ella. Por otro lado,
pl_radj muestra una correlación
negativa con la gravedad superficial de la estrella
anfitriona (st_logg), lo que
sugiere que los exoplanetas mƔs grandes tienden a encontrarse en
sistemas con estrellas de menor gravedad superficial, posiblemente
porque estos sistemas albergan planetas de mayor tamaƱo.
Para visualizar mejor estas relaciones y seleccionar las mejores variables predictoras, se realiza un pair plot con las variables que presentan una correlación significativa, estableciendo un umbral del 50% en valor absoluto. Este grĆ”fico permite examinar cómo se distribuyen los datos y cómo se relacionan las variables entre sĆ, facilitando la identificación de tendencias y posibles patrones Ćŗtiles para la estimación de valores faltantes y la construcción de modelos de predicción.
# Seleccionar de la matriz de correlación las variables con correlacion mayor o
# igual a 0.3 en valor absoluto con la variable faltante
correlated_vars <- names(which(abs(correlation_matrix_pearson["pl_radj", ]) >= 0.5))
# Se genera un dataframe con la correlacion entre las variables seleccionadas
# en correlated_vars y la variable faltante tomando de la matriz de correlacion
# solo las filas y columnas correspondientes a las variables seleccionadas
correlation_df <- data.frame(
Variable = names(correlation_matrix_pearson[correlated_vars, "pl_radj"]),
Correlacion = correlation_matrix_pearson[correlated_vars, "pl_radj"]
)
# Agregar una columna con la cantidad de valores faltantes
correlation_df$Faltantes <- sapply(correlation_df$Variable, function(x) sum(is.na(kepler_data[[x]])))
# Escribo a correlated_vars las variables seleccionadas
correlated_vars <- correlation_df$Variable
# Ordenar el dataframe por cantidad de faltantes ascendente
# y por valor absoluto de correlación descendente
correlation_df <- correlation_df[order(correlation_df$Faltantes, -abs(correlation_df$Correlacion)), ]
# Eliminar la columna de indice
rownames(correlation_df) <- NULL
# Mostrar tabla formateada
kable(correlation_df, columns = c("Variable","Correlación","Faltantes"), align = "l")
| Variable | Correlacion | Faltantes |
|---|---|---|
| pl_radj | 1.0000000 | 886 |
| pl_rade | 0.9999990 | 886 |
| pl_ratror | 0.9962260 | 1740 |
| pl_trandep | 0.9696465 | 2078 |
| pl_rvamp | 0.7326113 | 2474 |
| st_rotp | 0.5860330 | 2539 |
panel.hist <- function(x, ...) {
usr <- par("usr"); on.exit(par(usr))
par(usr = c(usr[1:2], 0, 1.5))
hist(x, col = "indianred", border = "white", probability = TRUE, add = TRUE)
}
pairs(kepler_data_num[, correlated_vars],
diag.panel = panel.hist, # Histogramas en la diagonal
col = "steelblue", pch = 19, cex = 1.2)
MĆ”s allĆ” de la relación lineal evidente entre las medidas del radio del exoplaneta en diferentes unidades āes decir, radios jovianos y radios terrestresā, el anĆ”lisis de correlación revela la presencia de otras relaciones lineales significativas entre el radio del exoplaneta y otras variables del conjunto de datos. Estas relaciones se ordenan en función de su fuerza de correlación en orden descendente, destacando tres principales variables:
La primera variable con una fuerte correlación es el cociente
del radio del planeta sobre el radio de su estrella anfitriona
(pl_ratror). Esta relación tiene sentido
desde un punto de vista fĆsico, ya que el tamaƱo relativo del exoplaneta
respecto a su estrella afecta directamente la observación de fenómenos
como el trƔnsito. Cuanto mayor sea este cociente, mayor serƔ el tamaƱo
aparente del exoplaneta durante el trƔnsito.
La segunda variable con alta correlación es la profundidad
del trƔnsito (pl_trandep). Este
valor mide la disminución en el brillo de la estrella cuando el planeta
pasa frente a ella. Dado que planetas mƔs grandes bloquean una mayor
parte de la luz estelar durante un trÔnsito, es lógico que exista una
relación lineal positiva entre el radio del planeta y la profundidad del
trƔnsito observado.
La tercera variable significativa es la amplitud de la
velocidad radial del planeta
(pl_rvamp). Esta mide el desplazamiento de
la estrella debido al tirón gravitacional del exoplaneta en su órbita.
Los exoplanetas de mayor tamaƱo tienden a ejercer una fuerza
gravitacional mƔs intensa sobre la estrella, generando mayores
variaciones en la velocidad radial detectada mediante el efecto Doppler,
lo que explica esta relación.
Con base en estos resultados, se seleccionan estas tres variables como variables predictoras para el radio del exoplaneta, ya que presentan una alta correlación lineal, positiva o negativa, con la variable faltante. Estas relaciones proporcionan información clave para realizar estimaciones mÔs precisas del radio del exoplaneta mediante técnicas de regresión, basÔndose en patrones consistentes en los datos.
Detección de valores atĆpicos (outliers) en las predictoras
Para las variables predictoras seleccionadas
(pl_ratdor,pl_trandep,pl_rvamp),
se detectan valores atĆpicos en el dataset que puedan afectar el
anÔlisis y la predicción de la variable faltante
(pl_radj).
# Seleccionar las variables predictoras
predictor_vars <- c("pl_ratdor", "pl_trandep", "pl_rvamp")
# Crear un data frame con las variables predictoras
predictor_data <- kepler_data_num[predictor_vars]
# Normalizar los datos
predictor_data <- scale(predictor_data)
library(ggplot2)
library(tidyr)
predictor_data <- as.data.frame(predictor_data)
# Convertir a formato largo para ggplot2
data_long <- pivot_longer(predictor_data, cols = everything(), names_to = "Variable", values_to = "Valores")
# Graficar los valores atĆpicos con un boxplot horizontal
# Se muestra el numero total de valores atĆpicos
ggplot(data_long, aes(x = Valores, y = Variable)) +
geom_boxplot(fill = "skyblue", color = "darkblue") +
geom_jitter(aes(color = abs(Valores) > 3), width = 0.1) +
scale_color_manual(values = c("black", "red")) +
labs(title = "Detección de Valores AtĆpicos en Variables Predictoras",
x = "Valores Normalizados",
y = "Variable") +
theme_minimal()
El boxplot revela la presencia de valores atĆpicos en las variables predictoras seleccionadas, lo que puede influir significativamente en el anĆ”lisis y en la precisión de la estimación de la variable faltante. Estos outliers pueden sesgar los resultados y reducir la eficacia de los modelos de predicción, especialmente si se utilizan tĆ©cnicas sensibles a valores extremos, como la regresión lineal estĆ”ndar.
Llama particularmente la atención la dispersión y la presencia de
valores extremos en la variable
pl_trandep, que representa la profundidad
del trƔnsito del planeta, es decir, quƩ tanto disminuye el flujo de luz
de la estrella cuando el planeta pasa por delante de ella. BƔsicamente,
cuƔnta luz bloquea el planeta durante el trƔnsito, en porcentaje. La
dispersión de valore nos da algunas pistas. En primer lugar los valores
cercanos a cero (la gran mayorĆa): indican que el planeta bloquea muy
poca luz durante el trƔnsito. Esto es normal para planetas pequeƱos o
lejanos. Por otra parte la columna larga de puntos a la derecha
(outliers en rojo): esos son casos donde la disminución del flujo es
mucho mayor, indicando que el planeta: o es muy grande en comparación
con su estrella, o la estrella es pequeña, asà que cualquier planeta
genera un gran bloqueo de luz pero tambiƩn posiblemente que haya
problemas en la medición o errores sistemÔticos.
La gran cantidad de valores extremos en
pl_trandep puede sugerir una distribución
naturalmente sesgada; es decir esta variable puede seguir una
distribución fuertemente asimĆ©trica dado quye la mayorĆa de los planetas
apenas bloquean luz pero unos pocos bloquean bastante (ej: JĆŗpiteres
calientes frente a enanas rojas). Es comĆŗn en astronomĆa: pocos eventos
extremos, muchos valores pequeƱos. Pero tambiƩn puede significar errores
o ruido instrumental: algunos outliers podrĆan ser artefactos de
medición, donde el modelo de trÔnsito interpretó mal la curva de luz.
Por último no debe descartarse que puede haber errores de reducción de
datos en el telescopio Kepler. Si no es un problema del telescopio,
puede ser un sistema mal clasificado: Algunos objetos pueden no ser
planetas, sino estrellas binarias eclipsantes, que generan una bajada de
flujo mucho mayor al de un planeta.
Para abordar este problema, es recomendable emplear mĆ©todos de regresión robustos, diseƱados para minimizar el impacto de valores atĆpicos en el ajuste del modelo. Un ejemplo de este enfoque es la regresión de Huber, que combina las ventajas de la regresión lineal y la regresión por mĆnimos cuadrados, pero con un mecanismo que reduce la influencia de outliers al asignarles un menor peso en el cĆ”lculo de los coeficientes.
Otra alternativa es utilizar tĆ©cnicas como la regresión de Tukey biweight o la regresión de cuantiles, que modelan la relación entre variables sin verse afectadas por la distribución de los datos extremos. Adicionalmente, se pueden aplicar mĆ©todos de detección y tratamiento de outliers, como el recorte de datos (trimming), que elimina valores extremos por encima o por debajo de un umbral especĆfico, o la transformación de variables, como el uso de logaritmos o escalado robusto, para reducir el impacto de valores extremos en el anĆ”lisis.
Analisis de regresión
Para explorar la relación entre las caracterĆsticas conocidas de los
exoplanetas, se lleva a cabo un anÔlisis de regresión
lineal. El objetivo es predecir el radio del exoplaneta
(pl_radj) utilizando tres variables que podrĆan
estar estrechamente relacionadas con su tamaƱo:
pl_ratdor: el cociente entre el radio del exoplaneta y el radio de su estrella, que proporciona una medida relativa del tamaƱo del planeta.
pl_trandep: la profundidad del trƔnsito, que indica cuƔnto disminuye el brillo de la estrella cuando el exoplaneta pasa frente a ella, lo que estƔ directamente relacionado con su radio.
pl_rvamp: la amplitud de la velocidad radial del planeta, que refleja su efecto gravitacional sobre la estrella y puede aportar información sobre su masa y, en combinación con otras variables, su tamaño.
A través de este anÔlisis, se busca comprender mejor cómo estas
variables influyen en el tamaƱo de los exoplanetas y determinar cuƔl de
ellas tiene un mayor impacto en la predicción de
pl_radj.
Regresión lineal univariada
Las variablies de caracterĆsticas de los sistemas exoplanetarios tales como periodo orbital, radio planetario, temperatura de la estrella central del sistema y masa del planeta pueden inferirse indirectamente a partir de otras variables como excentricidad orbital, distancia a la estrella, caracteristicas de la estrella y otras. Se explorar un anĆ”lisis de regresión lineal univariada con varias variables independientes evaluando la capacidad de predicción de cada modelo planteado.
Se realiza un anÔlisis de regresión lineal univariada para predecir
el radio del exoplaneta (pl_radj)
consecutivamente a partir de las variables independientes
seleccionadas.
Regresión lineal: radio del exoplaneta según ratio del radio sobre
el radio estelar (pl_ratdor)
# Regresion de pl_radj con pl_ratdor
model_pl_ratdor <- lm(pl_radj ~ pl_ratdor, data = kepler_data_num)
model_pl_ratdor_summary <- summary(model_pl_ratdor)
model_pl_ratdor_summary
##
## Call:
## lm(formula = pl_radj ~ pl_ratdor, data = kepler_data_num)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.3749 -0.2695 -0.2125 0.3126 1.2264
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.4086542 0.0535610 7.630 0.0000000000489 ***
## pl_ratdor 0.0007341 0.0005069 1.448 0.152
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3872 on 78 degrees of freedom
## (2467 observations deleted due to missingness)
## Multiple R-squared: 0.02618, Adjusted R-squared: 0.0137
## F-statistic: 2.097 on 1 and 78 DF, p-value: 0.1516
# Scatter plot de pl_radj vs pl_ratdor con la recta de regresión en rojo
# y los margenes de confianza en gris
ggplot(kepler_data_num, aes(x = pl_ratdor, y = pl_radj)) +
geom_point(color = "steelblue") +
geom_smooth(method = "lm", color = "indianred", fill = "grey", alpha = 0.2) +
labs(title = "Regresión Lineal: Radio del Exoplaneta segun Ratio sobre el Radio Estelar",
x = "Ratio sobre Radio Estelar",
y = "Radio del Exoplaneta (JĆŗpiter)") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Para el modelo de regresión planteado:
\[ pl\_radj = \beta_0 + \beta_1 \cdot pl\_ratdor + \varepsilon \]
El anÔlisis de regresión sugiere que la variable
pl_ratdor no es un buen predictor del
radio del exoplaneta (pl_radj). SegĆŗn los
resultados, por cada aumento de 1 unidad en
pl_ratdor, se espera un incremento de
apenas 0.0007341 en
pl_radj. Sin embargo, el valor p asociado
a esta relación (Pr(>|t|) = 0.152) es mayor que
0.05, lo que significa que no hay suficiente
evidencia estadĆstica para afirmar que
pl_ratdor influye significativamente en
pl_radj. Esto sugiere que el modelo
planteado no es el mƔs adecuado para estimar el radio del exoplaneta en
función del cociente entre su radio y el radio de su estrella.
Este resultado se refuerza al revisar las estadĆsticas de ajuste del
modelo. El Error EstƔndar Residual
(0.3872) indica que los valores predichos se desvĆan
bastante de los valores reales, lo que evidencia un ajuste impreciso.
AdemÔs, el R² múltiple (0.02618)
muestra que solo el 2.6% de la variabilidad en
pl_radj es explicada por
pl_ratdor, lo que indica un modelo con muy
poca capacidad predictiva. De manera similar, el R²
ajustado (0.0137), que corrige por el nĆŗmero
de predictores, sigue siendo muy bajo, reforzando la idea de que
pl_ratdor no contribuye significativamente
a la predicción del radio del exoplaneta.
Por otro lado, el F-statistic (2.097) y su valor p (0.1516) confirman que el modelo, en su conjunto, no es estadĆsticamente significativo, lo que significa que no es capaz de explicar de manera fiable la relación entre estas variables.
A pesar de estos resultados, se realiza un anÔlisis de los residuos del modelo para verificar si cumplen con los supuestos de la regresión lineal, con el objetivo de entender mejor las limitaciones del modelo y explorar posibles ajustes o alternativas.
# Obtener los residuos y valores ajustados
res_pl_ratdor <- residuals(model_pl_ratdor)
# Estimar los valores ajustados
fit_val_pl_ratdor <- fitted(model_pl_ratdor)
# Crear un data frame con los residuos y valores ajustados
res_pl_ratdor_df <- data.frame(Fitted_Values = fit_val_pl_ratdor, Residuals = res_pl_ratdor)
# Scatter plot de residuos vs valores ajustados
ggplot(res_pl_ratdor_df, aes(x = Fitted_Values, y = Residuals)) +
geom_point(color = "steelblue") +
geom_hline(yintercept = 0, color = "indianred", linetype = "dashed") +
labs(title = "Residuos vs Valores Ajustados",
x = "Valores Ajustados",
y = "Residuos") +
theme_minimal()
El anƔlisis de los residuos muestra que estos tienden a concentrarse
en los valores ajustados mƔs bajos, aproximadamente entre 0.4 y
0.5. A medida que los valores ajustados aumentan, la dispersión
de los residuos tambiƩn parece incrementar ligeramente.
Sin embargo, no se observa un patrón claro en forma de parÔbola o curva,
lo que sugiere que la relación entre la variable independiente
(pl_ratdor) y la dependiente
(pl_radj) podrĆa ser
aproximadamente lineal.
En general, la mayorĆa de los residuos se encuentran relativamente
cerca de 0, aunque hay algunos valores positivos
elevados (mayores a 0.5), lo que indica que el modelo
tiende a subestimar ciertos valores de
pl_radj. Por otro lado, hay pocos residuos
negativos extremos, lo que sugiere que el modelo no estĆ”
sobreestimando significativamente los valores del radio del
exoplaneta.
Se detecta una leve heterocedasticidad, ya que la dispersión de los residuos parece mayor en los valores ajustados mĆ”s altos. Esto implica que el error no es completamente uniforme a lo largo de la distribución de valores ajustados, lo que podrĆa afectar la confiabilidad de las predicciones. En un modelo ideal que cumpliera con la suposición de homocedasticidad (es decir, varianza constante de los errores), los residuos deberĆan distribuirse de manera mĆ”s uniforme alrededor de la lĆnea de referencia (residuo = 0).
Dado que el modelo tiene un R² muy bajo (~2.6%), era
esperable encontrar una dispersión alta en los residuos, lo que confirma
que pl_ratdor no es un buen predictor de
pl_radj. AdemƔs, la presencia de residuos elevados
sugiere que existen otras variables no consideradas que
podrĆan explicar mejor la variabilidad en el radio del exoplaneta.
# Crear un grƔfico Q-Q de los residuos
qqnorm(res_pl_ratdor, main = "GrƔfico Q-Q de los Residuos", col = "indianred")
Para que los residuos sigan una distribución normal, los puntos en la grĆ”fica deberĆan alinearse con una lĆnea diagonal imaginaria. Sin embargo, se observan desviaciones en los extremos, es decir, en los cuantiles mĆ”s bajos y mĆ”s altos, donde los puntos se alejan de la lĆnea teórica. Esto indica la presencia de colas mĆ”s pesadas de lo esperado en una distribución normal, lo que sugiere que existen valores atĆpicos o que los residuos no siguen completamente una distribución normal.
AdemĆ”s, se nota una ligera curvatura en la parte central del grĆ”fico. Aunque la mayorĆa de los puntos se alinean con la lĆnea teórica en esta región, la curvatura sugiere que los residuos no son perfectamente normales, lo que podrĆa afectar la validez de algunas inferencias estadĆsticas.
La regresión lineal asume que los residuos deben seguir una distribución normal para garantizar la validez de los intervalos de confianza y de los valores p. En este caso, la curvatura y las colas pesadas plantean dudas sobre el cumplimiento de esta suposición. Si los residuos no son normales, la inferencia estadĆstica del modelo podrĆa verse afectada, aunque la estimación de los coeficientes seguirĆa siendo vĆ”lida.
Para abordar este problema, una posible solución es aplicar
transformaciones en la variable dependiente
(pl_radj), como logaritmos o
raĆces cuadradas, para mejorar la normalidad de los residuos.
Para confirmar estas observaciones, se realizan pruebas de
normalidad y homocedasticidad, con el fin de evaluar si los
residuos siguen efectivamente una distribución normal y si la
varianza de los errores se mantiene constante a lo
largo de los valores ajustados.
# Prueba de normalidad de Shapiro-Wilk
shapiro_test_pl_ratdor <- shapiro.test(res_pl_ratdor)
shapiro_test_pl_ratdor
##
## Shapiro-Wilk normality test
##
## data: res_pl_ratdor
## W = 0.81534, p-value = 0.00000001313
La prueba de Shapiro-Wilk es una herramienta estadĆstica utilizada para determinar si un conjunto de datos sigue una distribución normal. En este anĆ”lisis, se aplicó a los residuos del modelo para evaluar si cumplen con esta suposición fundamental en la regresión lineal.
Esta prueba parte de la hipótesis nula (Hā), que establece que los residuos siguen una distribución normal. Si el resultado muestra un p-valor muy bajo, se rechaza esta hipótesis, indicando que los datos no se ajustan a una distribución normal.
El resultado de la prueba arrojó un estadĆstico W de 0.81534, lo que sugiere una desviación considerable de la normalidad, ya que un valor cercano a 1 indicarĆa que los datos se distribuyen de manera normal. AdemĆ”s, el p-valor obtenido fue aproximadamente 0.00000001313, lo que es significativamente menor a 0.05. Esto proporciona suficiente evidencia para rechazar la hipótesis nula con un alto nivel de confianza, confirmando que los residuos no siguen una distribución normal.
Este resultado es relevante porque la falta de normalidad en los residuos puede afectar la validez de los intervalos de confianza y los valores p en la regresión. Para corregir este problema, podrĆa ser necesario aplicar transformaciones a los datos o considerar el uso de mĆ©todos estadĆsticos mĆ”s robustos que no dependan estrictamente de la normalidad de los residuos.
# Prueba de homocedasticidad de Breusch-Pagan
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
# Prueba de Breusch-Pagan
bp_test_pl_ratdor <- bptest(model_pl_ratdor)
bp_test_pl_ratdor
##
## studentized Breusch-Pagan test
##
## data: model_pl_ratdor
## BP = 1.1306, df = 1, p-value = 0.2876
El test de Breusch-Pagan es una prueba estadĆstica utilizada para evaluar si los residuos del modelo presentan homocedasticidad (varianza constante) o heterocedasticidad (varianza no constante). La prueba parte de la hipótesis nula, que asume que los residuos tienen una varianza constante. Si se encuentra suficiente evidencia para rechazar esta hipótesis, se concluye que existe heterocedasticidad en el modelo.
En este anĆ”lisis, el estadĆstico de la prueba (BP) obtuvo un valor de 1.1306, el cual es relativamente bajo. Un valor alto de este estadĆstico indicarĆa la presencia de heterocedasticidad, pero en este caso no se observa una seƱal clara de ello. Dado que solo se utiliza un predictor, la prueba se basa en un grado de libertad (df = 1). AdemĆ”s, el p-valor obtenido fue de 0.2876, lo que es superior al umbral de 0.05. Esto significa que no hay suficiente evidencia estadĆstica para rechazar la hipótesis nula, lo que sugiere que no se detecta heterocedasticidad significativa en los residuos.
A pesar de esto, el modelo no parece ajustarse bien a los datos, ya que se observa una gran dispersión en los residuos y la posible presencia de heterocedasticidad en ciertos rangos de los valores ajustados. Para mejorar el modelo, se exploran posibles transformaciones en la variable dependiente, como la aplicación de logaritmos. AdemĆ”s, se analiza si una transformación logarĆtmica en las variables predictoras podrĆa mejorar la capacidad predictiva del modelo, utilizando para ello la prueba de Box-Cox, que permite determinar la mejor transformación para estabilizar la varianza y mejorar el ajuste del modelo.
# Prueba de Box-Cox para transformar la variable st_rad
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
# Prueba de Box-Cox
boxcox_pl_ratdor <- boxcox(model_pl_ratdor, lambda = seq(-2, 2, by = 0.1))
La transformación de Box-Cox es una técnica utilizada en modelos de regresión para encontrar la mejor manera de transformar la variable dependiente, con el fin de mejorar la normalidad de los residuos y garantizar una varianza constante (homocedasticidad).
La grĆ”fica generada en este anĆ”lisis muestra cómo varĆa la log-verosimilitud en función del parĆ”metro lambda, el cual determina la forma de la transformación aplicada a la variable dependiente Y. Dependiendo del valor de lambda, la transformación puede ser una raĆz cuadrada, un logaritmo, una inversa, entre otras, ayudando a estabilizar la varianza y mejorar el ajuste del modelo.
\[ Y' = \begin{cases} \frac{Y^\lambda - 1}{\lambda}, & \lambda \neq 0 \\ \log(Y), & \lambda = 0 \end{cases} \]
# Obtener el lambda óptimo
lambda_optimal <- boxcox_pl_ratdor$x[which.max(boxcox_pl_ratdor$y)]
lambda_optimal
## [1] -0.02020202
El valor óptimo del parÔmetro lambda obtenido en la
transformación de Box-Cox es -0.0202,
lo que indica que la mejor transformación para la variable
pl_ratdor es cercana a 0.
Dado que un lambda de 0 corresponde a una
transformación logarĆtmica, aplicar el logaritmo a esta
variable podrĆa mejorar la capacidad predictiva del modelo de regresión
lineal.
Para verificar si esta transformación realmente mejora el ajuste del
modelo, se lleva a cabo una nueva regresión lineal utilizando la
variable transformada. Luego, se evalúa el desempeño del modelo
actualizado, analizando métricas como el R², los
residuos y la significancia de los
coeficientes para determinar si la predicción de
pl_radj mejora con la nueva
transformación.
# Regresión de pl_radj con log(pl_ratdor)
model_pl_ratdor_log <- lm(pl_radj ~ log(pl_ratdor), data = kepler_data_num)
model_pl_ratdor_log_summary <- summary(model_pl_ratdor_log)
model_pl_ratdor_log_summary
##
## Call:
## lm(formula = pl_radj ~ log(pl_ratdor), data = kepler_data_num)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.3776 -0.2720 -0.2215 0.2916 1.2130
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.29440 0.12286 2.396 0.019 *
## log(pl_ratdor) 0.04726 0.03397 1.391 0.168
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3876 on 78 degrees of freedom
## (2467 observations deleted due to missingness)
## Multiple R-squared: 0.02421, Adjusted R-squared: 0.0117
## F-statistic: 1.935 on 1 and 78 DF, p-value: 0.1681
# Scatter plot de pl_radj vs log(pl_ratdor) con la recta de regresión en rojo
# y los margenes de confianza en gris
ggplot(kepler_data_num, aes(x = log(pl_ratdor), y = pl_radj)) +
geom_point(color = "steelblue") +
geom_smooth(method = "lm", color = "indianred", fill = "grey", alpha = 0.2) +
labs(title = "Regresión Lineal: Radio del Exoplaneta segun Logaritmo del Ratio sobre el Radio Estelar",
x = "Logaritmo del Ratio sobre Radio Estelar",
y = "Radio del Exoplaneta (JĆŗpiter)") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
El modelo ajustado con la transformación logarĆtmica de
pl_ratdor muestra resultados muy similares
al modelo original, lo que indica que la transformación no
mejoró significativamente la capacidad predictiva. El
error estƔndar de los residuos es
0.3876, prƔcticamente idƩntico al del modelo sin
transformación (0.3872), lo que sugiere que la
variabilidad de los residuos sigue siendo la misma.
El coeficiente de determinación R² múltiple es
0.02421 (2.4%), lo que significa que solo un
2.4% de la variabilidad de pl_radj es
explicada por log(pl_ratdor), un valor
extremadamente bajo. Incluso al ajustar por el nĆŗmero de predictores, el
R² ajustado apenas mejora, quedando en
1.2%, lo que refuerza la idea de que el modelo sigue
sin capturar bien la relación entre las variables.
El estadĆstico F, con un valor de
1.935 y un p-valor de 0.1681, indica
que no hay suficiente evidencia estadĆstica para afirmar que la
transformación logarĆtmica de pl_ratdor
mejora significativamente el modelo.
En conclusión, el modelo sigue sin ser adecuado para predecir
pl_radj a partir de
pl_ratdor, incluso despuƩs de aplicar la
transformación logarĆtmica. Ante estos resultados, se procede a probar
con otras variables predictoras o combinaciones de
variables para mejorar la capacidad de ajuste del modelo.
Regresión lineal: radio del exoplaneta según la profundidad del
trƔnsito (pl_trandep)
# Regresion del radio del exploplaneta (pl_radj)
# con la profundidad del trƔnsito del planeta (pl_trandep)
# como predictor
model_pl_trandep <- lm(pl_radj ~ pl_trandep, data = kepler_data_num)
model_pl_trandep_summary <- summary(model_pl_trandep)
model_pl_trandep_summary
##
## Call:
## lm(formula = pl_radj ~ pl_trandep, data = kepler_data_num)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.203530 -0.056704 0.002386 0.056979 0.150580
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.22308 0.01590 14.03 <0.0000000000000002 ***
## pl_trandep 0.61058 0.02434 25.08 <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.08315 on 40 degrees of freedom
## (2505 observations deleted due to missingness)
## Multiple R-squared: 0.9402, Adjusted R-squared: 0.9387
## F-statistic: 629.1 on 1 and 40 DF, p-value: < 0.00000000000000022
# Scatter plot de pl_radj vs pl_trandep con la recta de regresión en rojo
# y los margenes de confianza en gris
ggplot(kepler_data_num, aes(x = pl_trandep, y = pl_radj)) +
geom_point(color = "steelblue") +
geom_smooth(method = "lm", color = "indianred", fill = "grey", alpha = 0.2) +
labs(title = "Regresión Lineal: Radio del Exoplaneta vs Profundidad del TrÔnsito",
x = "Profundidad del TrƔnsito (%)",
y = "Radio del Exoplaneta (JĆŗpiter)") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
En el modelo:
\[ pl\_radj = \beta_0 + \beta_1 \cdot pl\_trandep + \varepsilon \]
Cada aumento unitario en pl_trandep se
asocia con un incremento de 0.61058 en
pl_radj. AdemƔs es altamente significativo
(con p-value < 0.00000000000000022), lo que indica una fuerte
relación entre pl_trandep y
pl_radj. AdemÔs: El modelo de regresión
planteado para predecir pl_radj en función
de pl_trandep muestra una relación clara y
significativa entre ambas variables. En este caso, por cada
aumento unitario en pl_trandep, se observa un
incremento de 0.61058 en pl_radj. AdemƔs,
esta relación es altamente significativa, con un p-valor
extremadamente bajo (< 2.2 Ć 10ā»Ā¹ā¶), lo que indica que hay
una fuerte conexión entre ambas variables.
El modelo presenta un error estƔndar de los residuos de
0.08315, lo que sugiere que la variabilidad en las predicciones
es muy baja y, por lo tanto, el ajuste del modelo es bastante preciso.
AdemÔs, el coeficiente de determinación R² alcanza un
94.02%, lo que significa que el modelo explica
casi toda la variabilidad de
pl_radj. Incluso el R²
ajustado, que corrige por el nĆŗmero de predictores, sigue
siendo muy alto (93.87%), lo que confirma la solidez
del ajuste.
La prueba de significancia global del modelo, evaluada con el estadĆstico F, arroja un valor de 629.1 con un p-valor extremadamente bajo, lo que refuerza la validez del modelo y su capacidad para explicar la relación entre las variables.
En comparación con los modelos anteriores
(pl_radj ~ pl_ratdor y
pl_radj ~ log(pl_ratdor)), este nuevo
modelo muestra una mejora drƔstica en el ajuste, con
una capacidad explicativa mucho mayor. La relación entre
pl_trandep y
pl_radj no solo es fuerte, sino que
tambiĆ©n es estadĆsticamente muy significativa, lo que
indica que pl_trandep es un excelente
predictor del radio del exoplaneta.
# Obtener los residuos y valores ajustados
res_pl_trandep <- residuals(model_pl_trandep)
# Calcular los valores ajustados
fit_val_pl_trandep <- fitted(model_pl_trandep)
# Crear un data frame con los residuos y valores ajustados
res_pl_trandep_df <- data.frame(
Residuals = res_pl_trandep,
Fitted_Values = fit_val_pl_trandep
)
# Scatter plot de residuos vs valores ajustados
ggplot(res_pl_trandep_df, aes(x = Fitted_Values, y = Residuals)) +
geom_point(color = "steelblue") +
geom_hline(yintercept = 0, color = "indianred", linetype = "dashed") +
labs(title = "Residuos vs Valores Ajustados",
x = "Valores Ajustados",
y = "Residuos") +
theme_minimal()
El grÔfico de residuos vs valores ajustados revela un patrón en la dispersión de los residuos. Para valores ajustados bajos, los residuos tienden a agruparse cerca de 0, lo que indica una menor variabilidad en esta región. Sin embargo, a medida que los valores ajustados aumentan, los residuos se dispersan mÔs, sugiriendo que el error del modelo no es uniforme en todo el rango de predicciones.
Este comportamiento sugiere la presencia de heterocedasticidad, ya que la dispersión de los residuos parece seguir un patrón de parĆ”bola invertida, con una mayor variabilidad en los valores ajustados mĆ”s altos. La heterocedasticidad ocurre cuando la varianza de los errores no es constante, lo que puede afectar la fiabilidad de las inferencias estadĆsticas del modelo. Para confirmar si este problema estĆ” presente, se puede realizar el test de Breusch-Pagan, que evalĆŗa si la varianza de los residuos cambia sistemĆ”ticamente con los valores ajustados.
En un modelo bien especificado, los residuos deberĆan distribuirse
de manera aleatoria alrededor de la lĆnea de referencia
(y=0), sin mostrar patrones claros. Sin embargo, en
este caso, se observa una mayor concentración de puntos en la parte
izquierda del grĆ”fico, lo que sugiere que el modelo podrĆa no estar
captando completamente la relación entre
pl_radj y
pl_trandep. Este comportamiento indica que
el modelo podrĆa beneficiarse de una revisión, como la inclusión de
nuevas variables explicativas o la aplicación de transformaciones para
mejorar la estabilidad de la varianza de los errores.
# Crear un grƔfico Q-Q de los residuos
qqnorm(res_pl_trandep, main = "GrƔfico Q-Q de los Residuos", col="indianred")
El grĆ”fico Q-Q (Quantile-Quantile) de los residuos permite evaluar si estos siguen una distribución normal comparando sus cuantiles con los de una distribución normal teórica. En este caso, los puntos del grĆ”fico se alinean bastante bien con la lĆnea diagonal, lo que indica que, en general, los residuos siguen un comportamiento cercano a la normalidad.
Sin embargo, se observan pequeƱas desviaciones en los extremos, tanto en los valores mĆ”s negativos como en los mĆ”s positivos. Esto sugiere la presencia de colas mĆ”s pesadas en la distribución de los residuos o la existencia de algunos valores atĆpicos leves. A pesar de estas desviaciones, no parecen ser lo suficientemente grandes como para indicar una violación grave de la normalidad.
Para complementar este anĆ”lisis y confirmar si los residuos cumplen con los supuestos de normalidad y homocedasticidad, se realizan pruebas estadĆsticas especĆficas. Estas pruebas permiten verificar con mayor precisión si los residuos siguen efectivamente una distribución normal y si la varianza de los errores es constante en todo el rango de valores ajustados. Si se detectan problemas significativos, podrĆan ser necesarias transformaciones en los datos o el uso de modelos mĆ”s robustos para mejorar la validez del anĆ”lisis.
# Prueba de normalidad de Shapiro-Wilk
shapiro_test_pl_trandep <- shapiro.test(res_pl_trandep)
shapiro_test_pl_trandep
##
## Shapiro-Wilk normality test
##
## data: res_pl_trandep
## W = 0.98715, p-value = 0.9115
La prueba de Shapiro-Wilk se utilizó para evaluar si los residuos del modelo siguen una distribución normal. El resultado arrojó un estadĆstico W de 0.98715, un valor cercano a 1, lo que indica que los datos se ajustan bien a una distribución normal. AdemĆ”s, el p-valor obtenido fue de 0.9115, lo que, al ser mayor que 0.05, significa que no hay suficiente evidencia estadĆstica para rechazar la hipótesis nula. En otras palabras, los residuos no presentan desviaciones significativas de la normalidad.
Este resultado confirma que el supuesto de normalidad de los residuos se cumple, lo que hace que el modelo sea estadĆsticamente vĆ”lido para realizar inferencias. AdemĆ”s, es coherente con la observación del grĆ”fico Q-Q, que ya sugerĆa una buena alineación de los residuos con la distribución normal. Esto refuerza la confianza en la fiabilidad del modelo y en la precisión de sus estimaciones.
# Prueba de homocedasticidad de Breusch-Pagan
library(lmtest)
# Prueba de Breusch-Pagan
bp_test_pl_trandep <- bptest(model_pl_trandep)
bp_test_pl_trandep
##
## studentized Breusch-Pagan test
##
## data: model_pl_trandep
## BP = 6.2822, df = 1, p-value = 0.0122
El test de homocedasticidad de Breusch-Pagan se utilizó para evaluar si la varianza de los errores en el modelo es constante. Los resultados muestran un estadĆstico BP de 6.2822, lo que sugiere una mayor evidencia de heterocedasticidad. Dado que solo se incluye un predictor en el modelo, la prueba se basa en un grado de libertad. AdemĆ”s, el p-valor obtenido fue de 0.0122, lo que, al ser menor que 0.05, indica que se debe rechazar la hipótesis nula y concluir que los residuos presentan heterocedasticidad significativa. En otras palabras, la varianza de los errores no es constante en todo el rango de valores ajustados.
Esta violación de la suposición de homocedasticidad puede afectar la precisión de las estimaciones y pruebas de hipótesis, haciendo que los intervalos de confianza y valores p sean menos confiables debido a la variabilidad desigual en los errores del modelo.
Dado que esta condición puede comprometer la validez de los
resultados, es importante considerar estrategias para corregir la
heterocedasticidad. Una opción es aplicar una transformación en
la variable dependiente, como el logaritmo
(log(Y)) o la raĆz cuadrada
(sqrt(Y)), para estabilizar la varianza de los
errores. Otra alternativa es utilizar una regresión robusta con
errores estƔndar de White, que ajusta los errores para hacerlos
menos sensibles a la heterocedasticidad. TambiƩn puede aplicarse una
regresión ponderada (WLS, Weighted Least Squares), en
la que se asignan pesos a las observaciones para compensar la
variabilidad desigual en los errores, especialmente si la
heterocedasticidad estĆ” relacionada con una variable especĆfica.
Como primer intento de corrección, se aplicarÔ una
transformación a la variable dependiente
pl_radj, con el objetivo de reducir la
heterocedasticidad y mejorar la estabilidad del modelo.
# Prueba de Box-Cox para transformar la variable pl_trandep
library(MASS)
# Prueba de Box-Cox
boxcox_pl_trandep <- boxcox(model_pl_trandep, lambda = seq(-2, 2, by = 0.1))
El anĆ”lisis de la transformación de Box-Cox muestra que el pico de la curva ocurre aproximadamente en lambda ā 2, lo que indica que la mejor transformación para la variable dependiente se encuentra en esa región. Como este valor estĆ” dentro del intervalo de confianza, se considera una opción adecuada para transformar los datos y mejorar el ajuste del modelo.
Dado que el valor óptimo de lambda es cercano a 2,
la transformación sugerida para la variable dependiente es
elevarla al cuadrado (Y²). Este tipo de
transformación puede ayudar a estabilizar la varianza de los residuos y
mejorar la linealidad de la relación entre las variables.
Por otro lado, no se recomienda utilizar una transformación
logarĆtmica (log(Y)) correspondiente a
lambda = 0, ni la raĆz cuadrada
(sqrt(Y)), que corresponderĆa a lambda =
0.5. Ambas opciones quedan fuera del intervalo óptimo definido
por la prueba y, por lo tanto, no ofrecerĆan una mejora significativa en
la normalidad de los residuos ni en la homocedasticidad del modelo.
# Regresión de pl_radj^2 con pl_trandep
model_pl_trandep_square <- lm(I(pl_radj^2) ~ pl_trandep, data = kepler_data_num)
model_pl_trandep_square_summary <- summary(model_pl_trandep_square)
model_pl_trandep_square_summary
##
## Call:
## lm(formula = I(pl_radj^2) ~ pl_trandep, data = kepler_data_num)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.108946 -0.015184 -0.004665 0.010102 0.134871
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.010364 0.007744 1.338 0.188
## pl_trandep 0.803698 0.011855 67.795 <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.04049 on 40 degrees of freedom
## (2505 observations deleted due to missingness)
## Multiple R-squared: 0.9914, Adjusted R-squared: 0.9912
## F-statistic: 4596 on 1 and 40 DF, p-value: < 0.00000000000000022
# Scatter plot de pl_radj^2 vs pl_trandep con la recta de regresión en rojo
# y los margenes de confianza en gris
ggplot(kepler_data_num, aes(x = pl_trandep, y = I(pl_radj^2)))+
geom_point(color = "steelblue") +
geom_smooth(method = "lm", color = "indianred", fill = "grey", alpha = 0.2) +
labs(title = "Regresión Lineal: Radio del Exoplaneta al Cuadrado segun Profundidad del TrÔnsito",
x = "Profundidad del TrƔnsito (%)",
y = "Radio del Exoplaneta al Cuadrado (JĆŗpiter^2)") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 2505 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 2505 rows containing missing values or values outside the scale range
## (`geom_point()`).
\[ pl\_radj^2 = \beta_0 + \beta_1 \cdot pl\_trandep + \varepsilon \]
El anÔlisis del modelo después de aplicar la transformación cuadrÔtica muestra una mejora significativa en su precisión y capacidad predictiva. El error estÔndar de los residuos se redujo a 0.04049, un valor menor en comparación con el modelo sin transformación, lo que indica una mayor precisión en las predicciones.
El modelo ahora explica el 99.14% de la variabilidad en
pl_radj², con un R² de 0.9914, lo
que refleja un ajuste excepcional. Incluso al corregir por el nĆŗmero de
predictores, el R² ajustado sigue siendo extremadamente
alto, con un valor de 0.9912, lo que confirma que la
relación entre las variables es muy sólida.
AdemĆ”s, el estadĆstico F, con un valor de 4,596 y un p-valor extremadamente bajo (< 2.2 Ć 10ā»Ā¹ā¶), demuestra que el modelo es altamente significativo.
En general, la transformación cuadrÔtica mejoró notablemente el
ajuste en comparación con el modelo original. La relación entre
pl_trandep y
pl_radj² no solo es fuerte, sino también
estadĆsticamente significativa, lo que sugiere que este modelo es una
representación mÔs precisa de la relación entre las variables.
# Obtener los residuos y valores ajustados
res_pl_trandep_square <- residuals(model_pl_trandep_square)
# Calcular los valores ajustados
fit_val_pl_trandep_square <- fitted(model_pl_trandep_square)
# Crear un data frame con los residuos y valores ajustados
res_pl_trandep_square_df <- data.frame(
Residuals = res_pl_trandep_square,
Fitted_Values = fit_val_pl_trandep_square
)
# Scatter plot de residuos vs valores ajustados
ggplot(res_pl_trandep_square_df, aes(x = Fitted_Values, y = Residuals)) +
geom_point(color = "steelblue") +
geom_hline(yintercept = 0, color = "indianred", linetype = "dashed") +
labs(title = "Residuos vs Valores Ajustados",
x = "Valores Ajustados",
y = "Residuos") +
theme_minimal()
Los residuos tienen menor dispersión, lo que confirma que la heterocedasticidad detectada anteriormente fue reducida con la transformación.
# Crear un grƔfico Q-Q de los residuos
qqnorm(res_pl_trandep_square, main = "GrƔfico Q-Q de los Residuos", col="indianred")
En el grĆ”fico Q-Q de los residuos, los puntos se alinean bastante bien con la lĆnea diagonal, lo que sugiere que los residuos siguen una distribución normal. Aunque hay una pequeƱa desviación en los extremos (valores muy negativos y positivos), la desviación no es severa.
# Prueba de normalidad de Shapiro-Wilk
shapiro_test_pl_trandep_square <- shapiro.test(res_pl_trandep_square)
shapiro_test_pl_trandep_square
##
## Shapiro-Wilk normality test
##
## data: res_pl_trandep_square
## W = 0.8507, p-value = 0.00006504
El test de normalidad de Shapiro-Wilk arroja un estadĆstico W de 0.8507 y un p-valor de 0.00006504, lo que indica que los residuos no siguen una distribución normal. A pesar de que en el grĆ”fico Q-Q los puntos parecĆan alinearse de manera razonable con la lĆnea diagonal, la prueba estadĆstica proporciona evidencia suficiente para rechazar la hipótesis de normalidad.
library(lmtest)
# Prueba de homocedasticidad de Breusch-Pagan
bp_test_pl_trandep_square <- bptest(model_pl_trandep_square)
bp_test_pl_trandep_square
##
## studentized Breusch-Pagan test
##
## data: model_pl_trandep_square
## BP = 14.87, df = 1, p-value = 0.0001152
El test de Breusch-Pagan arroja un estadĆstico BP de 14.87, con 1 grado de libertad y un p-valor de 0.0001152, lo que indica que los residuos presentan heterocedasticidad significativa. Esto significa que la varianza de los errores no es constante en todo el modelo, lo que puede afectar la fiabilidad de las inferencias estadĆsticas.
Aunque la transformación cuadrÔtica aplicada a la variable dependiente ayudó a reducir la heterocedasticidad, los resultados muestran que aún persiste en cierta medida. Esto sugiere que, aunque el modelo ha mejorado, puede ser necesario aplicar otras estrategias, como regresión ponderada o el uso de errores estÔndar robustos, para garantizar una estimación mÔs estable y confiable.
Regresión lineal robusta de Huber: radio del exoplaneta según la
profundidad del trƔnsito (pl_trandep)
Cabe recordar, según lo expuesto en el anÔlisis de outliers, la gran
cantidad de datos extremos en la variable pl_trandep, por
lo que probablemente sea adecuada la utilización de un modelo mÔs
robusto para evitar que estos datos afecten la calidad del modelo, como
por ejemplo la regresión de Huber.
# Regresión de Huber
library(MASS)
# Ajuste del modelo de regresión de Huber
model_pl_trandep_huber <- rlm(pl_radj ~ pl_trandep, data = kepler_data_num)
model_pl_trandep_huber_summary <- summary(model_pl_trandep_huber)
model_pl_trandep_huber_summary
##
## Call: rlm(formula = pl_radj ~ pl_trandep, data = kepler_data_num)
## Residuals:
## Min 1Q Median 3Q Max
## -0.237990 -0.058563 0.003357 0.053174 0.146508
##
## Coefficients:
## Value Std. Error t value
## (Intercept) 0.2199 0.0163 13.5180
## pl_trandep 0.6289 0.0249 25.2548
##
## Residual standard error: 0.08627 on 40 degrees of freedom
## (2505 observations deleted due to missingness)
# Scatter plot de pl_radj vs pl_trandep con la recta de regresión en rojo
# y los margenes de confianza en gris
ggplot(kepler_data_num, aes(x = pl_trandep, y = pl_radj)) +
geom_point(color = "steelblue") +
geom_smooth(method = "rlm", color = "indianred", fill = "grey", alpha = 0.2) +
labs(title = "Regresión de Huber: Radio del Exoplaneta segun Profundidad del TrÔnsito",
x = "Profundidad del TrƔnsito (%)",
y = "Radio del Exoplaneta (JĆŗpiter)") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
formular de la regresión de Huber:
\[ pl\_radj = 0.2199 + 0.6289 \cdot pl\_trandep + 0.08627 \]
El modelo de regresión de Huber muestra una relación significativa
entre pl_trandep y
pl_radj, con un coeficiente de
0.6289. Cada aumento unitario en
pl_trandep se asocia con un incremento de
0.6289 en pl_radj. AdemƔs, el modelo tiene
un error estƔndar de los residuos de 0.3876, lo que
indica una variabilidad moderada en las predicciones.
Ambos coeficientes son altamente significativos (t > 2 por mucho),
lo que sugiere que hay una relación clara y fuerte entre la profundidad
del trƔnsito y el radio del planeta. Sin embargo, de los datos
originales, solo 41 observaciones fueron usadas y 2505 observaciones
fueron descartadas. Eso puede pasar si faltan datos en
pl_radj o
pl_trandep o se perdieron en el
preprocesamiento (posiblemente el tratamiento del mƩtodo robusto) los
dejó fuera.
Regresión lineal: radio del exoplaneta según la amplitud de la
velocidad radial (pl_rvamp)
# Regresion del radio del exoplaneta (pl_radj)
# utilizando la amplitude de la velocidad radial del planeta (pl_rvamp)
# como predictor
model_pl_rvamp <- lm(pl_radj ~ pl_rvamp, data = kepler_data_num)
model_pl_rvamp_summary <- summary(model_pl_rvamp)
model_pl_rvamp_summary
##
## Call:
## lm(formula = pl_radj ~ pl_rvamp, data = kepler_data_num)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.5172 -0.2119 -0.1206 0.2644 0.8116
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.337785 0.041804 8.080 0.00000000001903 ***
## pl_rvamp 0.003550 0.000406 8.744 0.00000000000124 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3026 on 66 degrees of freedom
## (2479 observations deleted due to missingness)
## Multiple R-squared: 0.5367, Adjusted R-squared: 0.5297
## F-statistic: 76.46 on 1 and 66 DF, p-value: 0.000000000001239
# Scatter plot de pl_radj vs pl_rvamp con la recta de regresión en rojo
# y los margenes de confianza en gris
ggplot(kepler_data_num, aes(x = pl_rvamp, y = pl_radj)) +
geom_point(color = "steelblue") +
geom_smooth(method = "lm", color = "indianred", fill = "grey", alpha = 0.2) +
labs(title = "Regresión Lineal: Radio del Exoplaneta segun Amplitud de la Velocidad Radial",
x = "Amplitud de la Velocidad Radial (ma/s)",
y = "Radio del Exoplaneta (JĆŗpiter)") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Para el modelo de regresión planteado:
\[ pl\_radj = \beta_0 + \beta_1 \cdot pl\_rvamp + \varepsilon \]
Las estadĆsticas del modelo muestran que:
El modelo presenta un R² de 0.5367, lo que indica
que explica el 53.67% de la variabilidad en
pl_radj. Esto sugiere una relación
moderada a fuerte entre las variables, aunque todavĆa
queda un 46.33% de variabilidad sin explicar, lo que
implica que otros factores podrĆan estar influyendo en la variable
dependiente.
El R² ajustado es 0.5297, lo que significa que, incluso al corregir por el nĆŗmero de predictores, el modelo sigue manteniendo un buen nivel de ajuste. AdemĆ”s, el estadĆstico F tiene un valor de 76.46, con un p-valor extremadamente bajo, lo que confirma que el modelo es altamente significativo y que la relación entre las variables no es producto del azar.
A pesar de que el modelo tiene un ajuste razonable, no es tan preciso
como el obtenido en la regresión de
pl_radj ~ pl_trandep. Sin embargo, la
relación entre pl_rvamp y
pl_radj sigue siendo estadĆsticamente
significativa y muestra un nivel de asociación importante, lo
que sugiere que pl_rvamp es un predictor relevante, aunque
no el mƔs fuerte disponible.
# Obtener los residuos y valores ajustados
res_pl_rvamp <- residuals(model_pl_rvamp)
# Calcular los valores ajustados
fit_val_pl_rvamp <- fitted(model_pl_rvamp)
# Crear un data frame con los residuos y valores ajustados
res_pl_rvamp_df <- data.frame(
Residuals = res_pl_rvamp,
Fitted_Values = fit_val_pl_rvamp
)
# Scatter plot de residuos vs valores ajustados
ggplot(res_pl_rvamp_df, aes(x = Fitted_Values, y = Residuals)) +
geom_point(color = "steelblue") +
geom_hline(yintercept = 0, color = "indianred", linetype = "dashed") +
labs(title = "Residuos vs Valores Ajustados",
x = "Valores Ajustados",
y = "Residuos") +
theme_minimal()
El anÔlisis de los residuos revela que su dispersión no es constante a lo largo de los valores ajustados, lo que sugiere la posible presencia de heterocedasticidad. En los valores ajustados mÔs pequeños (menores a 0.5), los residuos estÔn muy concentrados, lo que indica una menor variabilidad en esta región. Sin embargo, a medida que los valores ajustados aumentan (mayores a 1.0), los residuos muestran una dispersión mucho mayor, lo que sugiere que la varianza de los errores no es constante en todo el modelo.
La presencia de heterocedasticidad puede indicar que el modelo no estĆ” capturando adecuadamente la variabilidad de los datos, lo que podrĆa afectar la precisión de sus predicciones. Para corregir este problema, se pueden aplicar transformaciones en las variables, como el uso de logaritmos o raĆces cuadradas, o utilizar mĆ©todos de regresión robustos que ajusten los errores estĆ”ndar para hacerlos menos sensibles a la variabilidad desigual.
AdemĆ”s, si los residuos muestran una tendencia curva o patrones de agrupación, esto podrĆa ser una seƱal de que el modelo lineal no es la mejor opción. En estos casos, podrĆa ser necesario recurrir a un modelo no lineal o incluir tĆ©rminos polinomiales en la regresión para capturar mejor la relación entre las variables y mejorar la precisión del ajuste.
# Crear un grƔfico Q-Q de los residuos
qqnorm(res_pl_rvamp, main = "GrƔfico Q-Q de los Residuos", col="indianred")
El anĆ”lisis del grĆ”fico Q-Q de los residuos muestra desviaciones significativas en los extremos, especialmente en los cuantiles mĆ”s bajos y mĆ”s altos. Esto sugiere que la distribución de los residuos no sigue completamente una distribución normal y que las colas de la distribución son mĆ”s pesadas de lo esperado. En otras palabras, hay mĆ”s valores extremos en los residuos de lo que se esperarĆa en una distribución normal ideal.
Los residuos mĆ”s alejados de la media, tanto en la dirección negativa como positiva, se desvĆan notablemente de la lĆnea teórica, lo que indica la presencia de valores atĆpicos que podrĆan estar afectando el modelo. A pesar de esto, la mayor parte de los puntos en la zona central del grĆ”fico parecen alinearse mejor con la distribución normal, aunque los extremos muestran una curvatura evidente.
La falta de normalidad en los residuos pone en duda la validez de los intervalos de confianza y las pruebas de hipótesis del modelo, ya que muchos procedimientos estadĆsticos dependen de esta suposición. La presencia de valores extremos tambiĆ©n sugiere que outliers o una distribución sesgada podrĆan estar influyendo en el comportamiento del modelo. Para abordar este problema, se pueden considerar transformaciones de las variables, la eliminación de valores atĆpicos o el uso de modelos mĆ”s robustos que no dependan estrictamente de la normalidad de los errores.
# Prueba de normalidad de Shapiro-Wilk
shapiro_test_pl_rvamp <- shapiro.test(res_pl_rvamp)
shapiro_test_pl_rvamp
##
## Shapiro-Wilk normality test
##
## data: res_pl_rvamp
## W = 0.86708, p-value = 0.000003207
El resultado de la prueba de normalidad de Shapiro-Wilk indica que los residuos no siguen una distribución normal, con un estadĆstico W de 0.86708 y un p-valor de 0.000003207. Dado que este p-valor es extremadamente bajo, hay suficiente evidencia para rechazar la hipótesis de normalidad.
Aunque en el grĆ”fico Q-Q los residuos parecĆan alinearse en cierta medida con la lĆnea diagonal, la prueba estadĆstica confirma que existen desviaciones significativas. Esto sugiere que los residuos podrĆan estar influenciados por la presencia de valores atĆpicos o que su distribución tiene caracterĆsticas diferentes a las de una normal ideal.
La falta de normalidad en los residuos podrĆa afectar la validez de los intervalos de confianza y las pruebas de hipótesis, lo que hace necesario considerar posibles soluciones, como aplicar transformaciones a los datos, eliminar valores extremos o utilizar mĆ©todos estadĆsticos mĆ”s robustos que no dependan estrictamente de la normalidad de los errores.
# Prueba de homocedasticidad de Breusch-Pagan
library(lmtest)
# Prueba de Breusch-Pagan
bp_test_pl_rvamp <- bptest(model_pl_rvamp)
bp_test_pl_rvamp
##
## studentized Breusch-Pagan test
##
## data: model_pl_rvamp
## BP = 10.096, df = 1, p-value = 0.001486
El resultado del test de Breusch-Pagan indica la presencia de heterocedasticidad significativa, con un estadĆstico BP de 10.096 y un p-valor de 0.001486. Esto significa que la varianza de los errores no es constante, lo que puede comprometer la precisión de las estimaciones del modelo y las pruebas de hipótesis.
Dado que el modelo no cumple con la suposición de homocedasticidad y, ademÔs, los residuos no siguen una distribución normal, se busca corregir la heterocedasticidad mediante una transformación de la variable dependiente. Para determinar cuÔl es la mejor transformación, se lleva a cabo una prueba de Box-Cox, que permite identificar la forma mÔs adecuada para estabilizar la varianza de los errores y mejorar el ajuste del modelo.
# Prueba de Box-Cox para transformar la variable pl_rvamp
library(MASS)
# Prueba de Box-Cox
boxcox_pl_rvamp <- boxcox(model_pl_rvamp, lambda = seq(-2, 2, by = 0.1))
El pico de la curva en la prueba de Box-Cox se encuentra cerca de lambda = 0, lo que indica que la mejor transformación para la variable dependiente se encuentra en esa zona. En términos prÔcticos, cuando el valor óptimo de lambda (λ) es 0, la transformación recomendada es el logaritmo natural de la variable dependiente.
Dado que Ī» = 0 estĆ” dentro del intervalo de
confianza, esto confirma que aplicar una transformación
logarĆtmica (log(Y)) es la opción mĆ”s adecuada.
Este tipo de transformación es útil porque puede reducir la
heterocedasticidad, mejorar la normalidad de los
residuos y hacer que la relación entre las variables sea
mÔs lineal, lo que permite que el modelo de regresión
tenga un mejor ajuste y sea mƔs preciso en sus estimaciones.
# Regresión de log(pl_radj) con logpl_rvamp
model_pl_rvamp_log <- lm(log(pl_radj) ~ log(pl_rvamp), data = kepler_data_num)
model_pl_rvamp_log_summary <- summary(model_pl_rvamp_log)
model_pl_rvamp_log_summary
##
## Call:
## lm(formula = log(pl_radj) ~ log(pl_rvamp), data = kepler_data_num)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.09181 -0.30754 0.04893 0.21513 0.98300
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.06303 0.06935 -29.75 <0.0000000000000002 ***
## log(pl_rvamp) 0.44267 0.02356 18.79 <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3753 on 66 degrees of freedom
## (2479 observations deleted due to missingness)
## Multiple R-squared: 0.8425, Adjusted R-squared: 0.8401
## F-statistic: 353 on 1 and 66 DF, p-value: < 0.00000000000000022
# Scatter plot de log(pl_radj) vs pl_rvamp con la recta de regresión en rojo
# y los margenes de confianza en gris
ggplot(kepler_data_num, aes(x = pl_rvamp, y = log(pl_radj))) +
geom_point(color = "steelblue") +
geom_smooth(method = "lm", color = "indianred", fill = "grey", alpha = 0.2) +
labs(title = "Regresión Lineal: Logaritmo del Radio del Exoplaneta segun Logaritmo de la Amplitud de la Velocidad Radial",
x = "Logaritmo de la Amplitud de la Velocidad Radial",
y = "Logaritmo del Radio del Exoplaneta (JĆŗpiter)") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Para el modelo de regresión planteado:
\[ log(pl\_radj) = \beta_0 + \beta_1 \cdot pl\_rvamp + \varepsilon \]
El anÔlisis del modelo después de aplicar la transformación
logarĆtmica muestra una mejora significativa en su capacidad
predictiva. El R² obtenido es de 84.25%, lo que indica
que el modelo explica una gran parte de la variabilidad en
log(pl_radj), representando un ajuste
excelente. Este resultado es considerablemente mejor que el del modelo
sin transformación, donde el R² era aproximadamente
53.67%.
Incluso al corregir por el nĆŗmero de predictores, el R² ajustado sigue siendo alto, con un valor de 84.01%, lo que confirma que el modelo mantiene su solidez y no se ve afectado por un exceso de predictores innecesarios. AdemĆ”s, el estadĆstico F, con un valor de 353 y un p-valor extremadamente bajo (< 2.2 Ć 10ā»Ā¹ā¶), confirma que el modelo es altamente significativo y que la relación entre las variables no es producto del azar.
En conclusión, la transformación logarĆtmica ha mejorado
significativamente el ajuste del modelo en comparación con el
modelo sin transformación. La relación entre
pl_rvamp y log(pl_radj) es
fuerte y altamente significativa, lo que sugiere que este modelo es
mucho mÔs adecuado para describir la relación entre estas variables y
ofrece estimaciones mƔs precisas.
# Obtener los residuos y valores ajustados
res_pl_rvamp_log <- residuals(model_pl_rvamp_log)
# Calcular los valores ajustados
fit_val_pl_rvamp_log <- fitted(model_pl_rvamp_log)
# Crear un data frame con los residuos y valores ajustados
res_pl_rvamp_log_df <- data.frame(
Residuals = res_pl_rvamp_log,
Fitted_Values = fit_val_pl_rvamp_log
)
# Scatter plot de residuos vs valores ajustados
ggplot(res_pl_rvamp_log_df, aes(x = Fitted_Values, y = Residuals)) +
geom_point(color = "steelblue") +
geom_hline(yintercept = 0, color = "indianred", linetype = "dashed") +
labs(title = "Residuos vs Valores Ajustados",
x = "Valores Ajustados",
y = "Residuos") +
theme_minimal()
Después de aplicar la transformación, se observa una reducción en la dispersión de los residuos, lo que indica que la heterocedasticidad detectada previamente ha disminuido considerablemente. Esto significa que la varianza de los errores es ahora mÔs constante a lo largo de los valores ajustados, cumpliendo mejor con la suposición de homocedasticidad en la regresión lineal.
La disminución en la variabilidad de los residuos sugiere que el modelo ha logrado un ajuste mÔs estable y confiable. Esto no solo mejora la precisión de las estimaciones, sino que también aumenta la validez de los intervalos de confianza y las pruebas de hipótesis, ya que las predicciones del modelo son menos sensibles a valores extremos o patrones no deseados en los errores.
# Crear un grƔfico Q-Q de los residuos
qqnorm(res_pl_rvamp_log, main = "GrƔfico Q-Q de los Residuos", col="indianred")
La alineación de los puntos con la lĆnea diagonal en el grĆ”fico sugiere que los residuos siguen aproximadamente una distribución normal. La mayor parte de los puntos se ajusta bien a la lĆnea teórica, lo que indica que el supuesto de normalidad en los residuos se cumple en gran medida.
Sin embargo, en los extremos del grĆ”fico, correspondientes a los valores mĆ”s negativos y mĆ”s positivos de los residuos, se observa una ligera desviación. Esto sugiere que la distribución de los residuos tiene colas ligeramente mĆ”s pesadas, lo que implica la posible presencia de algunos valores atĆpicos o extremos.
A pesar de esta leve desviación en los valores extremos, el patrón general indica que los residuos siguen una distribución normal de manera aceptable. Esto significa que el modelo sigue siendo estadĆsticamente vĆ”lido para realizar inferencias, aunque la presencia de valores extremos podrĆa justificar un anĆ”lisis mĆ”s detallado si se requiere mayor precisión en las estimaciones.
# Prueba de normalidad de Shapiro-Wilk
shapiro_test_pl_rvamp_log <- shapiro.test(res_pl_rvamp_log)
shapiro_test_pl_rvamp_log
##
## Shapiro-Wilk normality test
##
## data: res_pl_rvamp_log
## W = 0.97622, p-value = 0.2188
El test de normalidad de Shapiro-Wilk arroja un estadĆstico W de 0.97622 y un p-valor de 0.2188, lo que indica que no hay evidencia suficiente para rechazar la hipótesis de normalidad. Esto significa que los residuos siguen una distribución normal, cumpliendo con una de las principales suposiciones del modelo.
Si bien el grĆ”fico Q-Q ya mostraba una buena alineación de los puntos con la lĆnea diagonal, la prueba estadĆstica confirma de manera mĆ”s rigurosa que los residuos no presentan desviaciones significativas respecto a una distribución normal. Esto refuerza la validez del modelo y la fiabilidad de sus estimaciones.
# Prueba de homocedasticidad de Breusch-Pagan
library(lmtest)
# Prueba de Breusch-Pagan
bp_test_pl_rvamp_log <- bptest(model_pl_rvamp_log)
bp_test_pl_rvamp_log
##
## studentized Breusch-Pagan test
##
## data: model_pl_rvamp_log
## BP = 0.48865, df = 1, p-value = 0.4845
El test de homocedasticidad de Breusch-Pagan muestra un estadĆstico BP de 0.48865 y un p-valor de 0.4845, lo que indica que no hay evidencia de heterocedasticidad significativa en el modelo. Esto significa que la varianza de los errores es constante, cumpliendo con una de las suposiciones clave de la regresión lineal. Dado que los modelos anteriores presentaban problemas de heterocedasticidad, estos resultados confirman que la transformación logarĆtmica aplicada a la variable dependiente corrigió eficazmente este problema.
Tras evaluar los tres modelos de regresión lineal
univariada, se concluye que el modelo
pl_radj ~ pl_rvamp con transformación
logarĆtmica es el que ofrece el mejor
ajuste.
\[ log(pl\_radj) = \beta_0 + \beta_1 \cdot pl\_rvamp + \varepsilon \]
Este modelo explica el 84.25% de la variabilidad en
log(pl_radj), lo que indica una capacidad
predictiva excelente. AdemÔs, la relación entre
pl_rvamp y log(pl_radj) es
fuerte y altamente significativa, con residuos que
siguen una distribución normal y no presentan
heterocedasticidad significativa.
Conclusión sobre los modelos lineales univariados planteados
A lo largo del anƔlisis, se probaron diferentes enfoques para ajustar
la relación entre las variables, considerando tanto modelos sin
transformación como con transformaciones matemÔticas para mejorar su
estabilidad. Inicialmente, los modelos sin transformación mostraron
problemas de heterocedasticidad y normalidad en los
residuos, lo que afectaba la validez de sus inferencias. Sin
embargo, la aplicación de una transformación logarĆtmica a la
variable dependiente (pl_radj) permitió corregir estos
problemas, logrando un modelo mƔs estable y confiable.
# Resumen de los modelos de regresión lineal univariada
model_summaries <- list(
model_pl_ratdor_summary,
model_pl_trandep_summary,
model_pl_trandep_square_summary,
model_pl_rvamp_summary,
model_pl_rvamp_log_summary
)
model_summaries
## [[1]]
##
## Call:
## lm(formula = pl_radj ~ pl_ratdor, data = kepler_data_num)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.3749 -0.2695 -0.2125 0.3126 1.2264
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.4086542 0.0535610 7.630 0.0000000000489 ***
## pl_ratdor 0.0007341 0.0005069 1.448 0.152
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3872 on 78 degrees of freedom
## (2467 observations deleted due to missingness)
## Multiple R-squared: 0.02618, Adjusted R-squared: 0.0137
## F-statistic: 2.097 on 1 and 78 DF, p-value: 0.1516
##
##
## [[2]]
##
## Call:
## lm(formula = pl_radj ~ pl_trandep, data = kepler_data_num)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.203530 -0.056704 0.002386 0.056979 0.150580
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.22308 0.01590 14.03 <0.0000000000000002 ***
## pl_trandep 0.61058 0.02434 25.08 <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.08315 on 40 degrees of freedom
## (2505 observations deleted due to missingness)
## Multiple R-squared: 0.9402, Adjusted R-squared: 0.9387
## F-statistic: 629.1 on 1 and 40 DF, p-value: < 0.00000000000000022
##
##
## [[3]]
##
## Call:
## lm(formula = I(pl_radj^2) ~ pl_trandep, data = kepler_data_num)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.108946 -0.015184 -0.004665 0.010102 0.134871
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.010364 0.007744 1.338 0.188
## pl_trandep 0.803698 0.011855 67.795 <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.04049 on 40 degrees of freedom
## (2505 observations deleted due to missingness)
## Multiple R-squared: 0.9914, Adjusted R-squared: 0.9912
## F-statistic: 4596 on 1 and 40 DF, p-value: < 0.00000000000000022
##
##
## [[4]]
##
## Call:
## lm(formula = pl_radj ~ pl_rvamp, data = kepler_data_num)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.5172 -0.2119 -0.1206 0.2644 0.8116
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.337785 0.041804 8.080 0.00000000001903 ***
## pl_rvamp 0.003550 0.000406 8.744 0.00000000000124 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3026 on 66 degrees of freedom
## (2479 observations deleted due to missingness)
## Multiple R-squared: 0.5367, Adjusted R-squared: 0.5297
## F-statistic: 76.46 on 1 and 66 DF, p-value: 0.000000000001239
##
##
## [[5]]
##
## Call:
## lm(formula = log(pl_radj) ~ log(pl_rvamp), data = kepler_data_num)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.09181 -0.30754 0.04893 0.21513 0.98300
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.06303 0.06935 -29.75 <0.0000000000000002 ***
## log(pl_rvamp) 0.44267 0.02356 18.79 <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3753 on 66 degrees of freedom
## (2479 observations deleted due to missingness)
## Multiple R-squared: 0.8425, Adjusted R-squared: 0.8401
## F-statistic: 353 on 1 and 66 DF, p-value: < 0.00000000000000022
El modelo final con transformación logarĆtmica no
solo ofrece un mejor ajuste y mayor capacidad explicativa, sino que
también cumple con los supuestos clave de la regresión
lineal, lo que lo convierte en la mejor opción para modelar la
relación entre pl_radj y
pl_rvamp. Este resultado subraya la
importancia de evaluar la calidad del ajuste y de realizar
transformaciones adecuadas cuando se detectan
desviaciones en los supuestos del modelo, garantizando asĆ estimaciones
mƔs precisas y robustas.
Regresión lineal multivariada
Para mejorar la precisión en la predicción del radio del
exoplaneta (pl_radj), se lleva a cabo un
anÔlisis de regresión lineal multivariada. En este
enfoque, se consideran simultƔneamente tres variables explicativas que
podrĆan influir en el radio del exoplaneta:
- El cociente del radio planetario sobre el radio estelar
(
pl_ratdor), que representa el tamaño relativo del exoplaneta en comparación con su estrella.
- La profundidad del trƔnsito
(
pl_trandep), que mide la disminución en el brillo de la estrella cuando el exoplaneta pasa frente a ella, lo que estÔ directamente relacionado con su tamaño.
- La amplitud de la velocidad radial del planeta
(
pl_rvamp), que refleja el impacto gravitacional del exoplaneta sobre su estrella y puede proporcionar información sobre su masa y, en combinación con otras variables, su radio.
Este modelo de regresión multivariada permite analizar cómo estas tres variables influyen en conjunto en la predicción del radio del exoplaneta, en lugar de evaluar cada una por separado. Al considerar múltiples factores al mismo tiempo, se espera obtener un modelo mÔs preciso y robusto, capaz de capturar mejor la variabilidad en los datos y proporcionar estimaciones mÔs confiables del tamaño de los exoplanetas.
# Regresion de pl_radj con pl_ratdor, pl_trandep y pl_rvamp
model_multivar <- lm(pl_radj ~ pl_ratdor + pl_trandep + pl_rvamp, data = kepler_data_num)
model_multivar_summary <- summary(model_multivar)
model_multivar_summary
##
## Call:
## lm(formula = pl_radj ~ pl_ratdor + pl_trandep + pl_rvamp, data = kepler_data_num)
##
## Residuals:
## 611 1785 1822 1946 1947 2251 2465 2541
## 0.00903 -0.07158 -0.03219 0.08415 -0.01535 0.09444 -0.08736 0.01885
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.2110174 0.0531204 3.972 0.016505 *
## pl_ratdor 0.0001583 0.0004277 0.370 0.730111
## pl_trandep 0.7120088 0.0781077 9.116 0.000803 ***
## pl_rvamp -0.0008151 0.0006926 -1.177 0.304472
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.08727 on 4 degrees of freedom
## (2539 observations deleted due to missingness)
## Multiple R-squared: 0.9731, Adjusted R-squared: 0.953
## F-statistic: 48.28 on 3 and 4 DF, p-value: 0.001342
El modelo de regresión planteado:
\[ pl\_radj = \beta_0 + \beta_1 \cdot pl\_ratdor + \beta_2 \cdot pl\_trandep + \beta_3 \cdot pl\_rvamp + \varepsilon \] Presenta buenas estadĆsticas por cuanto:
El modelo de regresión muestra un excelente ajuste,
explicando el 97.31% de la variabilidad en
pl_radj. Incluso después de ajustar por el número
de predictores, el R² ajustado sigue siendo alto, con un
95.3%, lo que indica que el modelo generaliza bien y mantiene
una fuerte capacidad predictiva. AdemĆ”s, el estadĆstico F de
48.28 y un p-valor de 0.0013 confirman que el
modelo en su conjunto es altamente significativo, lo
que sugiere que al menos una de las variables predictoras tiene un
impacto relevante en la estimación de
pl_radj.
Sin embargo, existen algunas limitaciones importantes. Después de eliminar los datos con valores faltantes, solo quedan 4 observaciones efectivas, lo que es extremadamente bajo para un modelo con tres predictores. Esta reducción drÔstica en la cantidad de datos puede hacer que el modelo sea poco confiable y que las estimaciones de los coeficientes sean inestables, ya que se basan en una muestra demasiado pequeña.
AdemĆ”s, se han descartado 2,539 observaciones debido a valores faltantes, lo que plantea la necesidad de revisar la estructura del dataset. Evaluar si se pueden recuperar mĆ”s observaciones permitirĆa mejorar la estabilidad del modelo y evitar conclusiones basadas en un nĆŗmero tan reducido de datos.
Dado que la variable pl_trandep es la
mĆ”s significativa dentro del modelo, una posible alternativa serĆa
simplificar la regresión eliminando pl_ratdor y
pl_rvamp, dejando solo
pl_trandep como predictor. Esto llevarĆa
al segundo modelo evaluado, que podrĆa ofrecer un ajuste igualmente
bueno pero con una estructura mƔs sencilla y posiblemente mƔs robusta
frente a la escasez de datos.
Regresión logĆstica
Para predecir la habitabilidad de los exoplanetas, se realiza un anĆ”lisis de regresión logĆstica utilizando las variables conocidas de los exoplanetas y las estrellas del sistema. Se seleccionan las variables conocidas de los exoplanetas y las estrellas como variables independientes y la habitabilidad como variable dependiente.
Existen varios indicadores de habitabilidad de los exoplanetas. Considerando que estamos estudiando estrellas con radios similiares al solar (+/- 10%) los parÔmetros planetarios mÔs relevantes se describen a continuación.
La temperatura de equilibrio (pl_eqt)
planetaria es una variable fundamental en la definición de la zona
habitable, ya que estĆ” directamente relacionada con la posibilidad de
agua lĆquida en la superficie de un planeta. En (Kopparapu, R. K., Ramirez, R.,
Kasting, J. F., Eymet,
V., Robinson, T. D., Mahadevan, S., Terrien, R. C., Domagal-Goldman, S.,
Meadows, V., & Deshpande, R., n.d.) se analizan factores para
ajustar los lĆmites de la zona habitable y define los rangos ideales de
temperatura para habitabilidad. - La insolación
(pl_insol), esto es flujo de radiación
recibido por el planeta en comparación con la Tierra, es otro predictor
clave, ya que determina el balance energƩtico del planeta. En (Shields, Aomawa L.,
Ballard, Sarah, & Johnson,
John Asher, n.d.) se estudian los efectos del flujo de radiación
en la zona habitable y su impacto en la capacidad de un planeta para
retener agua. - El semieje mayor orbital (pl_orbsmax) es
otro indicador importante, ya que determina la distancia del planeta a
su estrella anfitriona y, por lo tanto, su temperatura superficial. En
(Kane, Stephen R. & Gelino, Dawn M.,
n.d.) se demuestra cómo la distancia orbital y la luminosidad de
la estrella afectan la habitabilidad.
La determinación de la habitabilidad de un exoplaneta es un tema complejo y multifactorial que depende de varios indicadores fĆsicos y quĆmicos. Si bien no existe una fórmula Ćŗnica universalmente aceptada para calcular la āhabitabilidadā, se pueden combinar los indicadores antes mencionados para aproximar el potencial de habitabilidad de un exoplaneta. Una de las aproximaciones mĆ”s comunes es usar una combinación ponderada de las condiciones adecuadas para la presencia de agua lĆquida, ya que esta es fundamental para la vida tal como la conocemos. El uso de una combinación lineal ponderada de variables tales como las consideradas es una tĆ©cnica vĆ”lida en la modelización de habitabilidad planetaria. En (MĆ©ndez, Abel, Rivera-Valentin, Edgard, Schulze-Makuch, Dirk, Filiberto, Justin, Ramirez, Ramses, Wood, Tana, DĆ”vila, Alfonso, McKay, Chris, Ceballos, Kevin, Jusino-Maldonado, Marcos, Torres-Santiago, Nicole, Gomez, Guillermo Nery, Heller, RenĆ©, Byrne, Paul, Malaska, Michael, Nathan, Erica, SimƵes, Marta, Antunes, AndrĆ©, MartĆnez-FrĆas, JesĆŗs, & Haqq-Misra, Jacob., n.d.) se propone el Earth Similarity Index (ESI), que usa una fórmula normalizada combinando temperatura, flujo estelar y parĆ”metros orbitales.
AsĆ con los indicadores seleccionados definimos un Ćndice de Habitabilidad Planetaria (PHI - Planetary Habitability Index) como una función normalizada que combine los indicadores clave:
\[ \text{PHI} = w_1 \cdot f_1(\text{pl_eqt}) + w_2 \cdot f_2(\text{pl_insol}) + w_3 \cdot f_3(\text{pl_orbsmax}) \]
Donde:
- \(w_i\) son los pesos normalizados asociados a cada indicador sumando 1.
- \(f_i(x)\) son funciones de transformación o normalización que convierten las medidas en valores entre 0 y 1, según el rango de habitabilidad conocido.
Estas variables se consideran como posibles predictores de la habitabilidad de los exoplanetas cuando estƔn en determinados rangos.
Temperatura de equilibrio (pl_eqt)
Idealmente la temperatua de equilibrio debe estar en un rango compatible con agua lĆquida, aproximadamente entre 0°C y 100°C. AsĆ la normalización resultan en:
\[ f_i(\text{pl_eqt}) = \max\left(0, \min\left(1, \frac{\text{pl_eqt} - T_{\text{min}}}{T_{\text{max}} - T_{\text{min}}}\right)\right) \]
Donde \(T_{\text{min}}\) y \(T_{\text{max}}\) son los lĆmites inferiores y superiores. El agua lĆquida, esencial para la vida, puede existir en un rango de temperaturas superficiales de aproximadamente 273K (0 °C) a 373K (100 °C). Sin embargo, debido a factores atmosfĆ©ricos y de presión, este rango puede extenderse ligeramente: \(T_{\text{min}}=200K\) puede ser el umbral inferior, considerando atmósferas densas como la de Marte y \(T_{\text{max}}=400K\) puede considerarse el umbral superior, considerando atmósferas con alta presión como la de Venus.
SegĆŗn la literatura especializada el peso de la temperatura de equilibrio en el Ćndice de habitabilidad es de \(w_1=0.40\) cuando se considera la temperatura de equilibrio como un indicador preponderante de habitabilidad y no se tienen muchos mĆ”s datos del planeta.
La insolación (pl_insol)
La insolación es la cantidad de energĆa recibida por el planeta y es un indicador importante de la habitabilidad. La insolación se mide en unidades de flujo de energĆa recibida por unidad de Ć”rea y se puede normalizar en un rango de 0 a 1. La insolación ideal para la vida es aquella que permite la presencia de agua lĆquida en la superficie del planeta (generalmente valores cercanos a la Tierra son ideales). La insolación se puede normalizar considerando que La Tierra tiene una insolación de 1S (donde \(S\) es la insolación solar a la distancia de la Tierra) y se puede considerar que la vida puede existir en un rango de insolación de \(I_{min}=0.3S\) (aproximadamente el lĆmite interior de la zona habitable para una estrella como el Sol, mĆ”s allĆ” de este valor el agua podrĆa congelarse) a \(I_{max}=1,7S\) (aproximadamente el lĆmite exterior de la zona habitable, mĆ”s allĆ” de este valor el agua podrĆa evaporarse). AsĆ la normalización resulta en:
\[ f_2(\text{pl_insol}) = \max\left(0, \min\left(1, \frac{\text{pl_insol} - I_{\text{min}}}{I_{\text{max}} - I_{\text{min}}}\right)\right) \]
La insolación es un factor crĆtico para mantener agua lĆquida en la superficie del planeta, pero su impacto depende de otros factores como la atmósfera y el albedo, segĆŗn la literatura especializada el peso de la insolación en el Ćndice de habitabilidad es de \(w_2=0.30\). Es importante destacar que El rango de \(I_{min}\) e \(I_{max}\) puede variar segĆŗn la luminosidad de la estrella, ya que la zona habitable cambia en función del tipo estelar por lo que esta estimación sirve para estrellas similares al Sol.
La distancia orbital del semieje mayor
(pl_orbsmax)
La distancia orbital semieje mayor es un indicador de la zona habitable de un sistema planetario. La distancia orbital semieje mayor se mide en unidades astronómicas (UA) y se puede normalizar en un rango de 0 a 1. La distancia orbital semieje mayor ideal para la vida es aquella que permite la presencia de agua lĆquida en la superficie del planeta. La distancia orbital semieje mayor se puede normalizar considerando que La Tierra tiene una distancia orbital semieje mayor de 1 UA y se puede considerar que la vida puede existir en un rango de distancias de \(D_{\text{min}}=0,5\) UA (aproximadamente el lĆmite interior de la zona habitable para una estrella como el Sol, mĆ”s allĆ” de este valor el agua podrĆa congelarse) a \(D_{\text{max}}=2\) UA (aproximadamente el lĆmite exterior de la zona habitable, mĆ”s allĆ” de este valor el agua podrĆa evaporarse). Estos rangos pueden variar segĆŗn el tipo de estrella. AsĆ la normalización resulta en:
\[ f_3(\text{pl_orbsmax}) = \max\left(0, \min\left(1, \frac{\text{pl_orbsmax} - D_{\text{min}}}{D_{\text{max}} - D_{\text{min}}}\right)\right) \]
En la mayorĆa de los modelos, el peso para el valor normalizado de
pl_orbsmax oscila entre 15% y 25%. Esto se
debe a que pl_orbsmax complementa
indicadores mƔs directos como pl_eqt
(temperatura de equilibrio) y pl_insol
(insolación). Se tomarÔ un peso de \(w_3=0.30\).
Ćndice de habitabilidad planetaria (PHI)
Por lo expuesto anteriormente, el Ćndice de Habitabilidad Planetaria (PHI) se calcula utilizando variables normalizadas y sus respectivos pesos, lo que permite evaluar la habitabilidad de un exoplaneta de manera mĆ”s equilibrada y comparable entre diferentes sistemas.
La fórmula para calcular el PHI que se utilizarĆ” en el modelo de regresión logĆstica es:
\[ \text{PHI} = 0.4 \cdot f_1(\text{pl_eqt}) + 0.3 \cdot f_2(\text{pl_insol}) + 0,3 \cdot f_3(\text{pl_orbsmax}) \]
library(dplyr)
# Normalizar las variables
kepler_data <- kepler_data %>%
mutate(
pl_eqt_normalized = pmin(1, pmax(0, (pl_eqt - 200) / (400 - 200))),
pl_insol_normalized = pmin(1, pmax(0, (pl_insol - 0.3) / (1.7 - 0.3))),
pl_orbsmax_normalized = pmin(1, pmax(0, (pl_orbsmax - 0.05) / (2 - 1.05)))
)
# Calcular el Ćndice de habitabilidad planetaria (PHI)
kepler_data <- kepler_data %>%
mutate(
phi = 0.4 * pl_eqt_normalized + 0.3 * pl_insol_normalized + 0.3 * pl_orbsmax_normalized
)
# Crear un modelo de regresión logĆstica
model_logistic <- glm(phi ~ pl_eqt_normalized + pl_insol_normalized + pl_orbsmax_normalized , data = kepler_data, family = binomial)
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
model_logistic_summary <- summary(model_logistic)
model_logistic_summary
##
## Call:
## glm(formula = phi ~ pl_eqt_normalized + pl_insol_normalized +
## pl_orbsmax_normalized, family = binomial, data = kepler_data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.488 7.878 -0.316 0.752
## pl_eqt_normalized 2.228 11.813 0.189 0.850
## pl_insol_normalized 1.105 6.760 0.163 0.870
## pl_orbsmax_normalized 1.569 6.123 0.256 0.798
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 0.45354364 on 16 degrees of freedom
## Residual deviance: 0.00063461 on 13 degrees of freedom
## (2530 observations deleted due to missingness)
## AIC: 19.641
##
## Number of Fisher Scoring iterations: 4
# Graficar la curva logistica del modelo
# Crear un data frame con los valores de PHI y las probabilidades predichas
# de habitabilidad. Seleccionar solo los registros donde se conoce la habitabilidad
phi_prob <- predict(model_logistic, type = "response")
# Filtrar los registros donde se conoce la habitabilidad
kepler_data_phi <- kepler_data %>%
filter(!is.na(phi))
phi_prob_df <- data.frame(PHI = kepler_data_phi$phi, Probabilidad = phi_prob)
# Scatter plot de PHI vs Probabilidad
ggplot(phi_prob_df, aes(x = PHI, y = Probabilidad)) +
geom_point(color = "steelblue") +
geom_smooth(method = "glm", method.args = list(family = "binomial"), color = "indianred", fill = "grey", alpha = 0.2) +
labs(title = "Curva LogĆstica del Modelo de Regresión",
x = "PHI",
y = "Probabilidad") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
El modelo de regresión logĆstica obtenido no es particularmente sólido debido a la escasez de datos disponibles para calcular el PHI (Planetary Habitability Index). En este caso, la cantidad de exoplanetas con información completa sobre los factores clave para la predicción, como temperatura de equilibrio, insolación y semieje mayor orbital, es muy limitada, con solo 17 observaciones disponibles.
La baja cantidad de datos afecta significativamente la precisión y confiabilidad del modelo, ya que un tamaƱo de muestra tan reducido limita la capacidad de generalización y hace que los coeficientes del modelo sean menos estables. Para obtener un modelo mĆ”s robusto y representativo, serĆa necesario contar con un mayor nĆŗmero de exoplanetas con datos completos, lo que permitirĆa entrenar la regresión con mĆ”s información y mejorar la validez de las predicciones sobre habitabilidad.
El modelo de regresión logĆstica planteado presenta varias limitaciones que afectan su utilidad y confiabilidad.
\[ \log \left( \frac{P(\phi = 1)}{1 - P(\phi = 1)} \right) = -2.488 + 2.228 \cdot \text{pl_eqt_normalized} + 1.105 \cdot \text{pl_insol_normalized} + 1.569 \cdot \text{pl_orbsmax_normalized} \]
Uno de los principales problemas es la drĆ”stica reducción en la deviance residual, que pasó de 0.4535 (sin predictores) a 0.0006 (con predictores). Si bien una reducción en la deviance suele indicar una mejora en el modelo, en este caso el valor extremadamente bajo sugiere un sobreajuste, lo que significa que el modelo estĆ” ajustĆ”ndose demasiado a los pocos datos disponibles y podrĆa no generalizar bien a nuevas observaciones.
El criterio de información de Akaike (AIC), con un valor de 19.641, indica que el modelo penaliza adecuadamente la complejidad, pero la falta de significancia en los coeficientes sugiere que no es útil para la predicción, ya que no logra establecer una relación clara entre las variables.
Otro problema grave es la eliminación de datos faltantes, que dejó solo 17 observaciones disponibles después de descartar 2,530 registros incompletos. Con tan pocos datos, los grados de libertad (df=13) son extremadamente bajos, lo que afecta la estabilidad del modelo y hace que las estimaciones sean poco confiables.
En su estado actual, el modelo no es Ćŗtil, ya que no cuenta con variables predictoras significativas y enfrenta una pĆ©rdida masiva de datos, lo que limita su capacidad para hacer inferencias vĆ”lidas. Antes de sacar conclusiones sobre la relación entre PHI y las variables predictoras, serĆa recomendable limpiar los datos y probar un modelo mĆ”s simple. Sin embargo, dada la escasez de observaciones, es posible que no sea factible construir un modelo confiable para la predicción de habitabilidad en estas condiciones.
Predicción de PHI con datos faltantes
Dado que el Ćndice de habitabilidad planetaria (PHI) sólo pudo calcularse para 17 planetas, y que el resto del conjunto, 2530 observaciones, presenta datos faltantes en variables clave, la aplicación directa de un modelo supervisado como la regresión logĆstica no resulta viable sin recurrir a imputaciones extensas y potencialmente sesgadas. En lugar de ello, se intenta un enfoque semi-supervisado combinando clustering con LightGBM. Primero, se aplica el algoritmo de agrupamiento K-means a la totalidad del conjunto de datos (sin utilizar las etiquetas), con el fin de identificar estructuras latentes en el espacio de variables. Luego, se analizan los 17 planetas con PHI calculado para verificar si se concentran en uno o mĆ”s de estos clĆŗsteres. Finalmente, se utilizan los clusters como etiquetas dĆ©biles para entrenar un modelo con LightGBM, lo que permite aprovechar la información estructural del conjunto completo y facilitar la generalización en contextos donde las etiquetas son escasas, como es comĆŗn en astronomĆa y otros campos cientĆficos.
En contextos donde la disponibilidad de datos etiquetados es extremadamente limitada, los mĆ©todos de aprendizaje semi-supervisado ofrecen una alternativa eficaz para aprovechar la estructura latente de los datos no etiquetados. Una estrategia ampliamente utilizada es el pseudo-etiquetado, que consiste en asignar etiquetas estimadas a ejemplos no etiquetados y utilizarlas en conjunto con las etiquetas reales para entrenar modelos supervisados. Este enfoque fue formalizado por (Lee, D.-H., n.d.), quien demostró que el uso iterativo de pseudo-etiquetas puede mejorar significativamente el rendimiento de los modelos, incluso con cantidades mĆnimas de datos anotados. Por otro lado, (Zhou, D., Bousquet, O., Lal, T. N., Weston, J., & Schƶlkopf, B., n.d.) introdujeron el concepto de propagación de etiquetas sobre grafos construidos a partir de la similitud entre ejemplos, lo que respalda el uso de algoritmos de agrupamiento como K-means para difundir información de las etiquetas escasas a travĆ©s de la estructura del conjunto de datos. En combinación, estos enfoques permiten construir modelos robustos a partir de datos predominantemente no etiquetados, como en el caso de la estimación del Ćndice de habitabilidad planetaria (PHI), donde menos del 1% de los registros disponibles incluyen una etiqueta confiable.
Primero se aplica el algoritmo de agrupamiento K-means a la totalidad del conjunto de datos (sin utilizar las etiquetas), con el fin de identificar estructuras latentes en el espacio de variables. Para ello, se imputa NA con la mediana por columna y se eliminan columnas con valores no finitos.
library(dplyr)
library(lightgbm)
library(Matrix)
##
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
# asignar un id numerico Ćŗnico a cada fila
kepler_data <- kepler_data %>%
mutate(id = row_number())
# Separar PHI y features
# Filtrar columnas numƩricas **con solo valores finitos**
features <- kepler_data %>%
dplyr::select(where(is.numeric)) %>%
dplyr::select(where(~ all(is.finite(.))))
phi <- kepler_data$phi
# Se imputa NA con la mediana por columna
# La imputacion es sólo para aplicar k-means, no para entrenar LightGBM
features_imputed <- features %>%
mutate(across(where(is.numeric), ~ ifelse(is.na(.), median(., na.rm = TRUE), .)))
# Aplicar K-means con k = 17
set.seed(random_seed)
kmeans_result <- kmeans(scale(features_imputed), centers = 17, nstart = 25)
clusters <- kmeans_result$cluster
Dada la alta dimensionalidad de los datos, se utiliza PCA para visualizar los clústeres. En este caso, se seleccionan los dos primeros componentes principales para la visualización en 2D. AdemÔs se muestran los 17 planetas con PHI conocido.
library(ggplot2)
# 1. Asegurarse de que features estÔ estandarizado (como se usó en K-means)
features_scaled <- scale(features)
# 2. Ejecutar PCA
pca_result <- prcomp(features_scaled)
pca_data <- as.data.frame(pca_result$x[, 1:2]) # Tomamos solo PC1 y PC2
# 3. Agregar cluster y si tiene PHI
pca_data$cluster <- as.factor(clusters)
pca_data$has_phi <- !is.na(kepler_data$phi)
# 4. Graficar
ggplot(pca_data, aes(x = PC1, y = PC2, color = cluster)) +
geom_point(alpha = 0.6, size = 2) +
geom_point(data = subset(pca_data, has_phi),
aes(x = PC1, y = PC2),
shape = 17, size = 3.5, color = "black") +
labs(
title = "Clusters de K-means visualizados con PCA",
subtitle = "Los triƔngulos negros indican planetas con PHI conocido",
x = "Componente Principal 1",
y = "Componente Principal 2"
) +
theme_minimal()
Segundo se analiza si los 17 planetas con PHI calculado se concentran en uno o mÔs de estos clústeres. Para ello, se propagan etiquetas débiles a través de los clústeres, asignando el valor promedio de PHI a los planetas no etiquetados dentro de cada clúster. Si un clúster no tiene etiquetas, se asigna el promedio del clúster mÔs cercano.
# Propagar PHI promedio dentro de cada cluster
pseudo_phi <- numeric(length(phi))
for (cluster_id in unique(clusters)) {
in_cluster <- clusters == cluster_id
labeled <- !is.na(phi) & in_cluster
unlabeled <- is.na(phi) & in_cluster
if (sum(labeled) > 0) {
phi_mean <- mean(phi[labeled])
pseudo_phi[unlabeled] <- phi_mean
pseudo_phi[labeled] <- phi[labeled] # mantener valores reales
} else {
# buscar cluster mƔs cercano con PHI
centroids <- kmeans_result$centers
dists <- apply(centroids, 1, function(c) sum((centroids[cluster_id, ] - c)^2))
dists[cluster_id] <- Inf
nearest_cluster <- which.min(dists)
phi_mean <- mean(phi[clusters == nearest_cluster & !is.na(phi)])
pseudo_phi[unlabeled] <- phi_mean
}
}
# Crear pesos: mƔs alto para muestras reales
weights <- ifelse(is.na(phi), 1, 10)
Tercero se entrena el modelo LightGBM utilizando los clusters como etiquetas dƩbiles y los pesos para ajustar la importancia de las muestras reales frente a las no etiquetadas.
# Antes de entrenar el modelo, se eliminan los PHI
kepler_data <- kepler_data %>%
mutate(phi = NULL)
# Entrenar modelo LightGBM
# Convertir a matriz de LightGBM
X_matrix <- as.matrix(features)
dtrain <- lgb.Dataset(data = X_matrix, label = pseudo_phi, weight = weights)
params <- list(
objective = "regression",
metric = "l2",
learning_rate = 0.05,
num_leaves = 31
)
lgbm_model <- lgb.train(
params = params,
data = dtrain,
nrounds = 100
)
## [LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.003168 seconds.
## You can set `force_row_wise=true` to remove the overhead.
## And if memory is not enough, you can set `force_col_wise=true`.
## [LightGBM] [Info] Total Bins 1806
## [LightGBM] [Info] Number of data points in the train set: 2547, number of used features: 11
## [LightGBM] [Info] Start training from score 0.600569
# Predecir PHI estimado
phi_pred <- predict(lgbm_model, X_matrix)
kepler_data$phi_estimated <- phi_pred
# Asignar los valores predichos a la columna phi_estimated
# en data original siguiendo la correspondencia de id
kepler_data <- kepler_data %>%
mutate(phi_estimated = phi_pred[match(id, kepler_data$id)])
# Guardar el dataset con los valores predichos
# en el archivo CSV "kepler_data_with_phi.csv"
write.csv(kepler_data, "keplerdataestimated.csv", row.names = FALSE)
Interpretación del modelo LightGBM: importancia de las variables
# Importancia de las variables
lgb.importance(lgbm_model) %>%
lgb.plot.importance(top_n = 20, measure = "Gain")
Con 17 centroides, el Ć”rbol estimado muestra que las variables con mayor importancia no relacionadas con las caracterĆsiticas del sistema estelar son ttv_flag (indicador de trĆ”nsito variable), sy_pnum (cantidad de planetas en el sistema) y st_rad (radio de la estrella central del sistema) son la que se esperarĆa que tenga un impacto significativo en la habitabilidad, ya que estĆ”n relacionadas con caracterĆsticas fĆsicas del sistema estelar. No es razonable que el modelo haya aprendido a predecir el PHI a partir de la latitud y longitud de los planetas en el firmamento, ya que no deberĆan influir en la habitabilidad. Sin embargo, es posible que el modelo haya capturado patrones relacionados con la ubicación de los planetas en el espacio de caracterĆsticas, lo que podrĆa ser Ćŗtil para identificar grupos de planetas con caracterĆsticas similares.
Histograma de PHI estimado
# Histograma de PHI estimado
ggplot(kepler_data, aes(x = phi_estimated)) +
geom_histogram(binwidth = 0.05, fill = "steelblue", color = "black", alpha = 0.7) +
stat_bin(binwidth = 0.05, geom = "text", aes(label = after_stat(count)),
vjust = -0.5, color = "black", size = 3) +
scale_x_continuous(breaks = seq(0, 1, by = 0.05)) +
labs(title = "Histograma de PHI Estimado",
x = "PHI Estimado",
y = "Frecuencia") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))
El histograma de PHI estimado muestra una distribución sesgada hacia la derecha con picos en 0, 0.55, 0.65, 0.70 y 0.75, lo que sugiere que el modelo ha aprendido a predecir un valor de PHI relativamente alto para la mayorĆa de los planetas. Esto puede ser un indicativo de que el modelo ha capturado patrones en los datos, pero tambiĆ©n puede reflejar la influencia de las etiquetas dĆ©biles y la falta de datos reales.`
# Contar la cantidad de planetas con phi_estimated > 0.70
habitable_planets <- sum(kepler_data$phi_estimated > 0.70, na.rm = TRUE)
# Contar la cantidad total de planetas
total_planets <- nrow(kepler_data)
# Calcular el porcentaje de planetas habitables
percentage_habitable <- (habitable_planets / total_planets) * 100
# Mostrar resultados
cat("Porcentaje de planetas habitables:", percentage_habitable, "%\n")
## Porcentaje de planetas habitables: 58.57872 %
Si bien hemos con seguido un enfoque semi-supervisado para estimar el PHI, es importante tener en cuenta que la calidad de las predicciones dependerĆ” en gran medida de la calidad de los datos y de la capacidad del modelo para generalizar a partir de las etiquetas dĆ©biles. La interpretación de los resultados debe hacerse con cautela, ya que el modelo puede haber aprendido patrones espurios o no representativos. Poniendo un umbral de 0.70 para considerar un planeta habitable, serĆa esperable que la cantidad de planetas habitables sea minoritarioa; sin embargo la predicción de PHI estimado muestra que mĆ”s del 68% de los planetas tienen un PHI estimado superior a 0.70, lo que sugiere que el modelo puede haber aprendido patrones espurios o no representativos.
Comparativa de los modelos de clasificación
La regresión logĆstica, entrenada Ćŗnicamente sobre los 17 planetas con PHI conocido, puede ofrecer un buen ajuste local sobre ese conjunto reducido, pero carece completamente de capacidad para generalizar al resto del dataset. Su utilidad prĆ”ctica es muy limitada, ya que no permite estimar el Ćndice de habitabilidad para los miles de planetas no etiquetados. AdemĆ”s, al trabajar con tan pocos datos, es extremadamente sensible al ruido y propensa al sobreajuste.
En contraste, el modelo semi-supervisado basado en K-means y LightGBM utiliza la estructura global de los datos para propagar etiquetas y entrenar un modelo que predice PHI para todo el conjunto. Aunque puede ser menos preciso en los pocos casos conocidos, gana ampliamente en cobertura, robustez y aplicabilidad. Su capacidad de generalizar y generar hipótesis a partir de un conjunto de datos mayor lo convierte en una herramienta mucho mÔs útil en contextos donde la escasez de etiquetas es la norma.
Posibles mejoras para futuros anƔlisis
Para mejorar el modelo de regresión logĆstica, es fundamental aplicar tĆ©cnicas de regularización (como L1 o L2) para mitigar el sobreajuste derivado del escaso nĆŗmero de observaciones. TambiĆ©n se recomienda una selección de variables cuidadosa, priorizando aquellas con fuerte correlación con PHI o justificación fĆsica. La inclusión de transformaciones no lineales e interacciones puede capturar relaciones mĆ”s complejas, y el uso de validación cruzada tipo leave-one-out (LOOCV) maximiza el aprovechamiento del conjunto limitado de datos. Alternativamente, una regresión logĆstica bayesiana permitirĆa incorporar incertidumbre y conocimiento previo sobre los factores que influyen en la habitabilidad.
Para el modelo semi-supervisado, las mejoras se enfocan en refinar la generación de pseudo-etiquetas y aprovechar mejor la estructura del conjunto de datos. Una opción es utilizar pseudo-labeling iterativo, donde el modelo actualiza sus predicciones en ciclos sucesivos. TambiĆ©n puede explorarse un ajuste dinĆ”mico del nĆŗmero de clusters o el uso de algoritmos de clustering mĆ”s flexibles. Incorporar embeddings generados por autoencoders o tĆ©cnicas no supervisadas permitirĆa representar mejor las relaciones latentes entre planetas. AdemĆ”s, asignar pesos variables a las pseudo-etiquetas segĆŗn su confiabilidad y validar Ćŗnicamente sobre los casos con PHI real mejora la robustez y la capacidad de generalización del modelo. En conclusión, aunque la regresión lineal de las variables faltantes puede ayudar a recuperar observaciones y mejorar la estabilidad del modelo logĆstico, es importante ser consciente de los errores de predicción acumulados y del impacto que pueden tener en la validez de las estimaciones. Evaluar cuidadosamente estos aspectos garantizarĆ” que el modelo final sea mĆ”s confiable y que sus conclusiones sean interpretadas con la debida cautela.
Conclusiones
El anÔlisis realizado permitió evaluar diferentes modelos de
regresión para predecir el radio de los exoplanetas y explorar la
relación entre sus caracterĆsticas fĆsicas. Se probaron modelos de
regresión lineal y logĆstica, incluyendo transformaciones para mejorar
la normalidad de los residuos y corregir problemas de
heterocedasticidad. Los resultados indicaron que el modelo
pl_radj ~ pl_rvamp con transformación
logarĆtmica fue el mĆ”s efectivo, explicando el 84.25%
de la variabilidad en el radio del exoplaneta y cumpliendo con
los principales supuestos estadĆsticos. Sin embargo, el modelo de
regresión logĆstica para predecir la habitabilidad
planetaria presentó limitaciones debido a la escasez de datos completos,
lo que afectó su estabilidad y capacidad predictiva.
Para mejorar la calidad de los modelos, es fundamental abordar el problema de los valores faltantes, ya sea mediante imputación de datos o la recolección de mĆ”s observaciones. AdemĆ”s, al utilizar variables estimadas en modelos posteriores, se debe considerar el impacto de los errores de predicción acumulados en los resultados finales. Si bien las transformaciones de datos ayudaron a mejorar la precisión de algunos modelos, la falta de datos sigue siendo una limitación clave para la predicción de la habitabilidad planetaria. Futuras investigaciones deberĆan centrarse en ampliar el conjunto de datos y explorar enfoques mĆ”s robustos, como modelos de aprendizaje automĆ”tico, que podrĆan mejorar la capacidad predictiva de estos anĆ”lisis.