Ejemplo de uso: regresión lineal con rpy2

En una entrada reciente se ha realizado una introducción a la librería de Python rpy2 con la que es posible utilizar R en Python. La integración de R con Python permite acceder a todos los paquetes disponibles en R sin salir de Python. Obteniendo así un entorno mucho más productivo. En esta ocasión se va a ver un ejemplo de uso de rpy2. Realizando una regresión lineal con rpy2. Al comprender este ejemplo se puede obtener una mejor idea de las posibilidades que brinda esta librería.

Aunque la regresión lineal se encuentra disponible en Python tanto con numpy como scikit-learn, este ejemplo es muy descriptivo. Con él es posible visualizar cómo transferir los datos a R, realizar el análisis y recuperar los resultados. Permitiendo así obtener conclusiones para aplicarlo en casos más complejos.

Preparación de los datos en Python

Antes de realizar una regresión lineal se han de obtener los datos. Para ello se puede generar un conjunto de datos en el que los parámetros son conocidos, como el que se muestra en el siguiente ejemplo.

import numpy as np

data_x = np.linspace(-2, 2, 101)
data_y = 2 + 5 * data_x + np.random.randn(*data_x.shape) * 0.33

np.polyfit(data_x, data_y, 1)

En este ejemplo se crear un vector, data_x, de 101 valores entre -2 y 2. Posteriormente se utiliza para crear otro vector que se relaciona mediante la ecuación y = 5x + 2 más una componente aleatoria. Finalmente, utilizando el método polyfit() de numpy se puede comprobar la fórmula de la ecuación.

Regresión lineal en R desde Python

Una vez obtenido el conjunto de datos se puede proceder a realizar la regresión lineal con R. Para ello se ha de importar FloatVector, globalenv y importr desde rpy2. El primer constructor permite convertir vectores de Python en objetos válidos para R. El segundo método facilita asignar y recuperar valores a variables de R desde Python de una forma sencilla. Finalmente, el tener método permitiera importar paquetes de R para utilizar como objetos Python. Una vez importados los objetos necesarios la regresión lineal se puede llevar a cabo con el siguiente código.

from rpy2.robjects import FloatVector
from rpy2.robjects import globalenv
from rpy2.robjects.packages import importr

stats = importr('stats')

globalenv["x"] = FloatVector(data_x)
globalenv["y"] = FloatVector(data_y)

lm = stats.lm("y ~ x")

print(lm.rx('coefficients'))
print(stats.anova(lm))

En el ejemplo se puede ver que tras la importación en Python de las referencias necesarias de ha importado un paquete de R. El paquete se ha importado con el método importr y asignado a la variable stats. Este paquete contiene la función lm con la que se puede realizar la regresión lineal en R.

Posteriormente se asignan los datos a variables de R. En este caso se utiliza el constructor FloatVector para transformar los vectores Python en objetos válidos en R. Asignando los objetos resultantes a diferentes variables en R. Una vez realizado esto, se puede llamar a la función lm de R como un método del objeto stats. Asignando los resultados a una variable. Finalmente, en el ejemplo, se pueden imprimir por pantalla los resultados obtenidos.

Elementos de los resultados de R

En ejemplo anterior se ha visto que en el objeto lm se han cargado los resultados de la regresión lineal realizada en R. Para acceder a los elementos de este se ha utilizado el método rx2(). Siendo necesario para ello conocer el nombre de los elementos disponibles. El listado de elementos se puede extraer mediante la propiedad names, así se obtiene.

print(lm.names)
[1] "coefficients"  "residuals"     "effects"       "rank"         
[5] "fitted.values" "assign" "qr" "df.residual"
[9] "xlevels" "call" "terms" "model"

Conclusiones

Mediante el ejemplo de una regresión lineal con rpy2 es posible comprender mejor las posibilidades que ofrece integrar R con Python. Gracias a esta librería se puede acceder a todos los análisis de disponibles en R desde Python. Con lo que se puede alcanzar un nivel de productividad mucho mayor de lo que se obtiene con cada entorno por separado.

Muchas gracias por el tiempo dedicado a leer este artículo. ¿Te ha resultado útil e interesante el contenido? Puedes evaluarlo más abajo, compartirlo en redes sociales o dejar un comentario sobre el mismo. Para recibir actualizaciones con nuevo contenido puedes darte de alta en el boletín de noticias o seguirnos en redes sociales.

Imágenes: Pixabay (Bruno Glätsch)

Sin votos
Por favor espera...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *