Para estudiar la relación entre ciertas características del suelo y la producción de biomasa (gr) de una planta forrajera natural se obtuvieron 45 muestras en diferentes ambientes, y en cada muestra se estimó la biomasa (respuesta Y) y se registraron las características (covariables X) del suelo en el que crecía (pH, Salinidad, Zinc y Potasio).
a). Realice un análisis exploratorio univariado para cada característica e interpretar.
b). Realice un análisis exploratorio bivariado que permita conocer como es la relación entre la biomasa y las covariables pH, Salinidad y Zinc (determine cuales variables son las que presentan mayor relación con la biomasa).
ggplot(data = Salinidad,aes(x=pH))+geom_boxplot(fill="pink")+theme_bw()+facet_grid()
A partir del boxplot generado sobre las mediciones de pH, es evidente que la mayoría de las plantas (por lo menos el 75%) se localizaban en ambientes con un suelo ácido, es decir, con un nivel de pH menor a 7, los cuales variaban desde muy ácidos (pH=3) hasta levemente ácidos (pH=6). De igual forma, también hubieron unos pocos casos que contaron con suelos neutros, puesto que el pH registrado en esos casos es cercano a 7. Sin embargo, no se registraron niveles de pH mayores o iguales a 8, lo que significa que ninguna muestra fue tomada en un ambiente con un terreno alcalino.
s=ggplot(data = Salinidad,aes(x=Salinidad,))+geom_histogram(fill="blue")+theme_bw()+facet_grid()+ylab("Frecuencia absoluta")
ggplotly(s)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Con respecto a la salinidad, gracias al histograma se observa que hay una pequeña tendencia hacia los valores de salinidad no mayores a 30, lo que da a entender que la mayor parte de las plantas del muestreo se encontraban en un ambiente con suelos no tan salinos. Además, se resalta el hecho de que en 9 muestras se midió un nivel de salinidad de 30, por lo que en un principio se podría hipotetizar que ese es el nivel adecuado de salinidad para una óptima producción de biomasa.
z=ggplot(data = Salinidad,aes(x=Zinc))+geom_density(fill="purple")+theme_bw()+facet_grid()+ylab("Densidad")
ggplotly(z)
Este gráfico de densidad permite visualizar la distribución que presentan los valores medidos sobre la concentración de zinc en los diferentes suelos de donde se obtuvieron las muestras, el cual revela que hay un pico de datos alrededor del valor 20, lo que significa que una buena parte de las plantas muestreadas arrojaron datos que se concentran en el intervalo entre 17 y 22, dicho de otra forma, se generó una tendencia. Cabe destacar que se observa otra pequeña concentración de valores que se aproximan a cero que, aunque no parezca tan significativo como la anterior mencionada, es importante tenerlo en cuenta ya que indica que hubieron algunas plantas que crecieron y se desarrollaron en condiciones de escaso zinc.
ggplot(data = Salinidad,aes(x=Potasio))+geom_boxplot(fill="dark green")+theme_bw()+facet_grid()
Para el análisis de la variable correspondiente al potasio, se retoma el uso de un boxplot, en el que se aprecia que al menos un 75% de los valores registrados se encuentran por debajo de 1000 y de ese porcentaje la mayoría tiene un valor mayor a 500, lo que quiere decir que, a nivel general, gran parte de las mediciones se ubican en el intervalo entre 500 y 1000. Por otra parte, sobre los datos por fuera de ese rango, los que están por encima de 1000 tienen una mayor dispersión que los menores a 500, pues los primeros varían entre 1000 y 1400 mientras que los segundos entre 300 y 500.
a=ggplot(data = Salinidad,aes(x=pH,y=Biomasa, colour=Zinc))+geom_smooth()+geom_point()
b=ggplot(data = Salinidad,aes(x=pH,y=Biomasa, colour=Salinidad))+geom_smooth()+geom_point()
c=ggplot(data = Salinidad,aes(x=Salinidad,y=Biomasa))+geom_smooth()+geom_point()
d=ggplot(data = Salinidad,aes(x=Zinc,y=Biomasa, colour=Salinidad))+geom_smooth()+geom_point()
ggplotly(a)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
ggplotly(b)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
ggplotly(d)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
ggplotly(c)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Con base en estas 4 gráficas donde se relacionan las covariables con la biomasa, se puede afirmar que la variable que presenta mayor relación es la del pH, puesto que, como se observa tanto en la primera gráfica como en la segunda, hay una relación aproximadamente lineal entre pH y biomasa, para ser precisos entre menor es el valor del pH menor biomasa producirá la planta. De manera similar, el zinc presenta cierta relación, aunque no tan definida como el pH, pues si se analiza la tercera gráfica se ve que a las plantas les favorece tener cantidades no tan altas de zinc, lo cual se confirma con la gráfica 1. Para finalizar, la falta de una relación clara y bien definida en la cuarta gráfica demuestra que la salinidad es la característica del suelo que menos influye en la producción de biomasa, ya que, a pesar de que previamente se observó que el nivel de salinidad adecuado está alrededor de 30, sus valores pierden relevancia frente a las otras variables, por ejemplo es posible encontrar plantas con 30 de salinidad pero pocos gramos de biomasa debido a que el suelo tiene un pH muy ácido (ver la segunda gráfica).
Dos tipos de moluscos A y B fueron sometidos a tres concentraciones distintas de agua de mar (100%, 75% y 50%) y se observó el consumo de oxígeno midiendo la proporción de O2 por unidad de peso seco del molusco.
a). Realice un análisis exploratorio univariado para cada característica e interpretar.
b). Realice un análisis exploratorio bivariado que permita conocer como es el consumo de oxígeno en las distintas concentraciones de agua de mar. y si estas conclusiones son las mismas para cada tipo de molusco
ggplot(data = BD_moluscos,aes(x=cons_o))+geom_boxplot(fill="gray")+theme_bw()+facet_grid()+xlab("Consumo de Oxígeno")
e=ggplot(data = BD_moluscos,aes(x=cons_o))+geom_histogram(fill="black")+theme_bw()+facet_grid()+xlab("Consumo de Oxígeno")+ylab("Frecuencia")
ggplotly(e)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
De acuerdo con estas dos gráfica hechas a partir del consumo de oxígeno, el 50% de los datos recogidos se encuentra en el intervalo entre 6 y 11, lo cual el boxplot muestra mediante cuartiles y el histograma de manera cuantitativa usando frecuencias absolutas. Así mismo, se puede notar que muy pocos moluscos presentaron un nivel de consumo muy bajo o muy alto, incluso el boxplot da a entender que el valor más alto, el cual es 18.8, se debería considerar como un valor atípico, es decir, como un caso extraordinario. Por otra parte, hay una alta concentración de los datos entre 9.5 y 11.5, pues según el boxplot, en ese corto intervalo se encuentra el 25% de los valores registrados.
ggplot(data = BD_moluscos, aes(x=c_agua, colour=molusco))+geom_histogram()+facet_grid(~molusco)+xlab("Concentración de agua de mar")+ylab("Frecuencia")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Por medio de este gráfico es fácil detallar la cantidad de moluscos (tanto A como B) que fueron sometidos a cada una de las concentraciones de agua de mar del experimento. En un principio, aunque este histograma no transmite una información muy compleja, permite ver de forma sencilla que la cantidad de datos tomados para cada caso fue igual, para ser exactos se registraron 8 datos para cada una de las circunstancias, lo cual es bueno tener en cuenta para estar seguros que al realizar un análisis no ocurra algún error a causa de una confusión al medir los datos durante el experimento.
x=ggplot(data = BD_moluscos,aes(x=c_agua,y=cons_o))+geom_smooth()+geom_point()+theme_bw()+facet_grid()+xlab("Concentración de Agua de Mar")+ylab("Consumo de Oxígeno")
z=ggplot(data = BD_moluscos,aes(x=c_agua,y=cons_o, colour=molusco))+geom_smooth()+geom_point()+theme_bw()+facet_grid(~molusco)+xlab("Concentración de Agua de Mar")+ylab("Consumo de Oxígeno")
ggplotly(x)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 49.75
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 50.25
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 9.1868e-017
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 2525.1
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : pseudoinverse used at
## 49.75
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : neighborhood radius
## 50.25
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : reciprocal condition
## number 9.1868e-017
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : There are other near
## singularities as well. 2525.1
ggplotly(z)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 49.75
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 50.25
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 3.0071e-017
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 2525.1
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : pseudoinverse used at
## 49.75
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : neighborhood radius
## 50.25
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : reciprocal condition
## number 3.0071e-017
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : There are other near
## singularities as well. 2525.1
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 49.75
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 50.25
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 3.0071e-017
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 2525.1
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : pseudoinverse used at
## 49.75
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : neighborhood radius
## 50.25
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : reciprocal condition
## number 3.0071e-017
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : There are other near
## singularities as well. 2525.1
Con respecto a la primera gráfica, queda en evidencia que el consumo de oxígeno de los moluscos tiende a ser mayor cuando la concentración del agua de mar es del 50%, pues la mayoría de los datos muestran un consumo entre 10 y 15, aunque cabe resaltar que hubo un caso atípico en el que el consumo no llegó ni siquiera a 7, lo cual pudo haber ocurrido por otras causas/condiciones que no se tomaron en cuenta para el experimento. Por otro lado, para el caso del 75%, en esta concentración se presentó el menor consumo de O2 llegando a tener el valor más bajo de todos los datos (1.8) y concentrándose gran parte de los datos entre 5 y 8. Por último, la concentración del 100% permitió un consumo ligeramente mayor al anterior, no obstante, la distribución de estos datos a lo largo del eje Y, a diferencia de los otros dos casos, es un poco más uniforme, por lo que no sería muy conveniente establecer un intervalo para ubicar la mayoría de valores, pues tendría un rango más amplio.
Ahora bien, revisando la gráfica 2 donde se discriminan los datos según el tipo de molusco, se puede afirmar que la tendencia explicada anteriormente se mantiene a pesar de la separación, aunque hay que resaltar que para el caso de los moluscos B la diferencia entre el consumo al 50% y los otros dos es más evidente. Además, los datos de consumo más bajos que se obtuvieron fueron por parte de los moluscos tipo B y la dispersión entre sus datos es un poco mayor al de los moluscos A.