Introducción al análisis exploratorio de datos

1

¿Qué es y para qué sirve el análisis exploratorio de datos?

2

¿Cómo hacer un análisis exploratorio de datos?

3

Tipos de análisis de datos

4

Tipos de datos y análisis de variables

5

Herramientas de software para el análisis exploratorio de datos

6

Conociendo nuestros datos: palmerpenguins

7

Recolección de datos, limpieza y validación

8

Ejercicio de validación de datos

Quiz: Introducción al análisis exploratorio de datos

Análisis univariado

9

Explorando una variable categórica: conteos y proporciones

10

Estadística descriptiva aplicada: medidas de tendencia central

11

Estadística descriptiva aplicada: medidas de dispersión

12

Ejercicio de obtención de medidas de dispersión

13

Estadística descriptiva aplicada: distribuciones

14

Estadística descriptiva aplicada: funciones de densidad de probabilidad

15

Bonus: Teorema del límite central

Quiz: Análisis univariado

Análisis bivariado

16

Estableciendo relaciones: gráficos de puntos

17

Estableciendo relaciones: gráficos de violín y boxplots

18

Estableciendo relaciones: matrices de correlación

19

Limitantes de los coeficientes de correlación lineal

20

Estableciendo relaciones: análisis de regresión simple

21

Limitaciones del análisis de regresión simple

Quiz: Análisis bivariado

Análisis multivariado

22

Análisis de regresión múltiple

23

Visualización del análisis de regresión múltiple

24

Análisis de regresión logística

25

Paradoja de Simpson

26

¿Qué hacer cuando tengo muchas variables?

Quiz: Análisis multivariado

Conclusiones

27

Diversidad de gráficas al explorar datos

28

Continúa aprendiendo sobre EDA

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Limitaciones del análisis de regresión simple

21/28
Recursos

Aportes 20

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

El código para las graficas mostradas en clase
grafica 1

sns.scatterplot(
x=x,
y=y
)

fx_1= np.array([x.min(), x.max()])
fy_1= res_x_y.intercept + res_x_y.slope * fx_1

plt.plot(fx_1, fy_1);


grafica 2

sns.scatterplot(
x=y,
y=x
)

fx_2= np.array([y.min(), y.max()])
fy_2= res_y_x.intercept + res_y_x.slope * fx_2

plt.plot(fx_2, fy_2);


grafica 3

sns.scatterplot(
x=x,
y=y
)
plt.plot(fx_1, fy_1)
plt.plot(fy_2, fx_2);

Código de la clase:

x = processed_penguins_df.bill_depth_mm
y = processed_penguins_df.bill_length_mm

res_x_y = scipy.stats.linregress(x=x, y=y)
res_y_x = scipy.stats.linregress(x=y, y=x)

#Fig. 1
sns.scatterplot(
    x=x,
    y=y
)

fx_1= np.array([x.min(), x.max()])
fy_1= res_x_y.intercept + res_x_y.slope * fx_1

plt.plot(fx_1, fy_1);

#Fig. 2
sns.scatterplot(
    x=y,
    y=x
)

fx_2= np.array([y.min(), y.max()])
fy_2= res_y_x.intercept + res_y_x.slope * fx_2

plt.plot(fx_2, fy_2)

# Fig. 3
sns.scatterplot(
    x=x,
    y=y
)
plt.plot(fx_1, fy_1)
plt.plot(fy_2, fx_2)

Segunda parte de la clase, el código:

(
    smf.ols(
        formula='bill_length_mm ~ bill_depth_mm ',
        data=processed_penguins_df
    )
    .fit()
    .params
)

(
    smf.ols(
        formula='bill_depth_mm ~ bill_length_mm',
        data=processed_penguins_df
    )
    .fit()
    .params
)

Limitacion del Analisis de Regresion Simple

  • La regresion lineal simple de A - B no es lo mismo que B - A. Las regresiones pueden ser diferentes en cada caso. Debes elegir de correctamente cual sera la variable independiente y dependiente.
  • Si dos variables crecen o decrecen siguiendo las mismas pautas, no implica necesariamente que una cause la otra. Correlacion no implica causalidad.
  • Solo puede manejar relaciones lineales. Es importante visualizar los datos para poder determinar que tipo de regression utilizar.

Visualizacion de la Asimetria de la Regresion Lineal

#Regresion lineal de x en funcion de y
sns.scatterplot(
    x=x,
    y=y
)

f_x1 = np.array([x.min(), x.max()])
fy_1 = res_x_y.intercept + res_x_y.slope*fx_1

#Regresion lineal de y en funcion de x
sns.scatterplot(
    x=y,
    y=x
)

fx_2 = np.array([y.min(), y.max()])
fy_2 = res_y_x.intercept + res_y_x.slope*fx_2

plt.plot(fx_1, fy_1)
plt.plot(fx_2, fy_2)

Separar las relaciones entre las variables con la libreria scipy

#bill_depth como variable x
(
    smf.ols(
        formula='bill_length_mm ~ bill_depth_mm',
        data= preprocessed_penguins_df
    )
    .fit()
    .params
)

#bill_length como variable x
(
    smf.ols(
        formula='bill_depth_mm ~ bill_length_mm',
        data= preprocessed_penguins_df
    )
    .fit()
    .params
)

Me paso que me tenía desconfiado y que algo estaba pasando por alto cuando vimos que las rectas son distintas.

Pensaba: Son los mismos puntos, no tiene sentido que aunque gires los ejes o le hagas espejos -como los puntos siguen en las mismas posiciones relativas respecto de otro- las rectas sean distintas pues sigue siendo la recta que representa más datos. Es como observar una linea de Perú a China desde la Luna, desde España, aunque me ponga de cabeza, desde unos lentes con filtros; si los llevamos a la misma referencia de observación debería ser igual…

Lo que pasaba por alto: Recorde que la regresión lineal sigue el método de mínimos cuadrados, en el que el error se halla restando lo real y la estimación de las variables dependientes (o sea la “y”, en otras palabras los errores son segmentos verticales siempre), entonces al invertir el “x” con el “y” los errores son distintos, por tanto resulta en pendientes e interceptos distintos como se observa en el código de la clase. Distinto sería si los errores se calcularán siendo segmentos perpendiculares.

Espero que a alguien le sirva esta observación, y si me equivoco en la explicación real de por qué los resultados no son simétricos por favor hacermelo saber.

  • El análisis de regresión simple es una técnica útil para analizar la relación entre dos variables, pero también tiene sus limitaciones. Algunas de las limitaciones más comunes son:

  • Correlación no implica causalidad: Aunque una correlación positiva o negativa entre dos variables puede indicar una relación, no necesariamente implica que una variable sea la causa de la otra. Por ejemplo, podría haber una correlación entre la cantidad de hielo que se vende en una tienda y la cantidad de personas que mueren ahogadas en piscinas, pero esto no significa que el hielo cause ahogamientos.

  • Valores atípicos: Los valores extremos o atípicos pueden afectar significativamente la relación entre dos variables. Por lo tanto, es importante verificar la presencia de valores atípicos y determinar si deben ser excluidos del análisis.

  • Datos no lineales: El análisis de regresión simple asume una relación lineal entre las variables


Para dar ejemplos de las limitaciones del análisis de regresión simple

Correlación no implica causalidad:

  • Para ilustrar este punto, podríamos buscar una correlación entre la longitud del pico y la masa de los pingüinos, y asumir que la longitud del pico causa la masa. Podríamos usar el siguiente código para generar un gráfico de dispersión y una línea de regresión simple:
  • Sin embargo, esto no significa que la longitud del pico sea la causa de la masa del pingüino, ya que hay muchos otros factores que pueden influir en la masa, como la edad, la dieta y la actividad física.

Valores atípicos:

  • Los valores atípicos pueden afectar significativamente la relación entre dos variables. Por ejemplo, si buscamos una correlación entre la longitud del pico y la masa de los pingüinos, pero hay un pingüino con un pico extremadamente largo y una masa muy baja, esto podría distorsionar la relación. Podríamos usar el siguiente código para generar un gráfico de dispersión y una línea de regresión simple, con un valor atípico marcado en rojo:
  • En este caso, el pingüino con el valor atípico distorsiona la relación lineal entre la longitud del pico y la masa del pingüino.

Datos no lineales:

  • El análisis de regresión simple asume una relación lineal entre las variables, por lo que si la relación es no lineal, los resultados pueden ser inexactos. Podríamos buscar una relación entre la longitud del pico y la profundidad del pico, pero si la relación es curvilínea, una línea recta no será una buena representación.

  • En este caso, parece haber una relación positiva entre la longitud y la profundidad del pico, pero no es lineal. Por lo tanto, la línea de regresión simple no es una buena representación de la relación.

Tengo una duda
si las variables se transponen no es mejor verlo así

que así

🤨🤨🤨

Me tarde un rato, el codigo me quedo horrible, pero por lo menos logre hacer lo que quería:

Tendra algun uso en la vida profesional hacer este formato? no lo se… pero lo quería hacer y lo hice xd

21. Limitaciones del análisis de regresión simple

Limitaciones

  • La regresión lineal simple de A - B no es lo mismo que la de B - A.
  • Si dos variables crecen o decrecen siguiendo las mismas pautas, no implica necesariamente que una cause la otra.
  • Solo puede manejar relaciones lineales.

Seaborn hace que la vida de todo DATA sea más cómoda. Gracias.

Explicacion del codigo de grafico de dispersion con linea de regresion

# Primero llamamos la funcion scatterplot de seaborn


sns.scatterplot(

    # Como sabemos ingresamos los datos y de ahi ya podemos mencionar que parte de los datos vamos a analizar
    
    data=process_prenguin_df,
    x='bill_length_mm',
    y='bill_depth_mm'
)

# Aqui creamos un array que indique donde inicia y termina los datos en X, en esta caso bill_length_mm


fx1 = np.array([process_prenguin_df.bill_length_mm.min(),
                process_prenguin_df.bill_length_mm.max()])

# Aqui representamos la funcion de la linea, donde es Y0 + MX, teniendo el intercept como el valor que toma y en el primer valor de X y el slope actuadno como una pendiente.

fy1 = res_x_y.intercept + res_x_y.slope * fx1

plt.plot(fx1,fy1)
x = processed_penguins_df.bill_length_mm
y = processed_penguins_df.bill_depth_mm

res_x_y = scipy.stats.linregress(x=x,y=y)
res_y_x = scipy.stats.linregress(x=y,y=x)

fx1 = np.array([processed_penguins_df.bill_length_mm.min(), processed_penguins_df.bill_length_mm.max()])
fy1 = res_x_y.intercept + res_x_y.slope * fx1

fx2 = np.array([processed_penguins_df.bill_depth_mm.min(), processed_penguins_df.bill_depth_mm.max()])
fy2 = res_y_x.intercept + res_y_x.slope * fx2

print(res_x_y, res_y_x, sep='\n')
fig, ax = plt.subplots(1,2, figsize=(15,10))
sns.scatterplot(ax=ax[0],x=x,y=y)
sns.scatterplot(ax=ax[1],x=y,y=x)
ax[0].plot(fx1,fy1)
ax[0].plot(fy2,fx2)
ax[1].plot(fx2,fy2)
ax[1].plot(fy1,fx1)

Crea modelo de regresion a partir de variables que le doy.

Hice un projecto y todo de regresión y predicciones y volvi al curso para entender más cosas, pero si correlación no implica causalidad sigo sin entender para que lo usan. Me limito a hacerlo como paso necesario jajaja. Resolvi mi duda sacando % de cuanto afeacta a que un hecho pase o no , pero creo que hay algo que me estoy perdiendo, si alguien tiene alguna explcación más detallada agradezco
coool!!
![](https://static.platzi.com/media/user_upload/image-1db59064-5b8e-435e-873d-1e1d790aad57.jpg)
al usar: `scipy.stats.linregress(x=x, y=y)` es importante que en ninguno de los vectores de entrada tengan valores null, ya que en nuestro: `LinregressResult` nos arrojara un input null
# Dividir el conjunto de datos por sexo
df_male   = dfnn[dfnn['sex'] == 'Male']
df_female = dfnn[dfnn['sex'] == 'Female']

# Realizar regresión lineal para male
model_male = (
    smf.ols(
        formula="bill_depth_mm ~ bill_length_mm",
        data=df_male
    )
    .fit()
    .params
)

# para female
model_female = (
    smf.ols(
        formula="bill_depth_mm ~ bill_length_mm",
        data=df_female
    )
    .fit()
    .params
)

# Mostrar el resumen de la regresión para machos
print("Modelo para 'Male':")
print(model_male)

# Mostrar el resumen de la regresión para hembras
print("\nModelo para 'Female':")
print(model_female)
sns.scatterplot(
    x=y,
    y=x
)

fx2 =np.array([y.min(), y.max()])
fy2 = res_y_x.intercept + res_y_x.slope * fx2

plt.plot(fx2, fy2) 
¿Para el análisis de una regresión simple es conveniente primero el manejo de outliers (valores atípicos) o no tienen importancia en el slope de la función?