Introduccion a R para modelacion ambiental
Instalar paquetes
library(pacman)
## Warning: package 'pacman' was built under R version 4.0.5
p_load("prettydoc", "DT", "xfun", "base64enc", "htmltools", "mime", "readr")
Caso de estudio # de efectividad de un fertilizante de plántulas de invernadero
Normalmente, para iniciar con la resolución de un problema se aplica el método científico. De acurdo con Risk (2003), éste es un proceso con el cual se investiga de forma sistemática las observaciones, se resuelven problemas y se prueban hipótesis. Como parte del método científico la propuesta de una hipótesis y luego su comprobación, son temas bien definidos, y a pesar de la incertidumbre asociada al problema es posible cuantificar el error de la conclusión planteada por la hipótesis.
Los pasos del método científico son:
- Plantear un problema a resolver.
- Colectar una serie de observaciones.
- Formular una o más hipótesis.
- Probar dichas hipótesis.
- Declarar las conclusiones.
Importar datos
<- read_csv("plantas.csv") plantas
## Rows: 42 Columns: 3
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (1): Tratamiento
## dbl (2): planta, IE
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
datatable(plantas)
Un problema a resolver podría ser la importancia del efecto de las fertilizaciones de plántulas producidas en viveros forestales;
ya contamos con el paso 1 del método científico. Luego efectuamos observaciones en dos grupos de plántulas, uno control (Sin fertilización, llamados de aquí en adelante Control) y otro de plántulas fertilizadas con un complejo complejo N:P:K (denominados de aquí en adelante como Fertilizados). El tamaño de dichas muestras se basa en estudios similares ya publicados como por ejemplo Fraysse and Crémière (1998) y también es valido de acuerdo con la experiencia del investigador.
Uno de los indicadores más comunes que miden el efecto de la fertilización de una plántula es el Índice de esbeltez (IE). Dicho índice relaciona la altura y el diámetro del tallo y se define con la siguiente ecuación (Olivo and Buduba 2006)
\[ IE = \frac{\varnothing_{tallo}}{(h_{tallo}/10)+2} \]
El índice de Esbeltez (IE) alcanza valores máximos de 1.2 lo que indica que la plántulas tienen mayor probabilidad de éxito al llevarse a campo. Valores cercanos a 1 indica que la planta tendrá menos problemas en el establecimiento y valores por abajo de 0.5 son plántulas de mala calidad (Olivo and Buduba 2006).
Mediante la observación del cuadro y utilizando métodos de estadística descriptiva y representación gráfica (Fig. ), podríamos aventurarnos a decir que el IE en el tratamiento fertilizadas es más alto con respecto al grupo Control, a este punto es seguro plantear que el IE es distinto en lugar de mayor, aquí es donde formulamos la hipótesis:
##Estimacion de parametros descriptivos comparativos (EDA)
- Para describir la diferencia entre Fert y Ctrl graficamente usaremos un grafico de caja y bigote
boxplot(plantas$IE ~ plantas$Tratamiento, col = "purple")
summary(plantas)
## planta IE Tratamiento
## Min. : 1.00 Min. :0.5500 Length:42
## 1st Qu.:11.25 1st Qu.:0.7025 Class :character
## Median :21.50 Median :0.7950 Mode :character
## Mean :21.50 Mean :0.8371
## 3rd Qu.:31.75 3rd Qu.:0.9375
## Max. :42.00 Max. :1.1600
Representación del comportamiento del IE mediante un boxplot
El Índice de Esbeltez (IE) en plántulas con fertilizante (Fert) es diferente con respecto a las plántulas del tratamiento (Ctrl).
La formulación de una hipótesis en el método científico se inicia definiendo la hipótesis nula (H0) y la hipótesis alternativa (H1)
; generalmente la H0 establece que no hay diferencias entre los grupos a compararse, en este caso Ctrl y el grupo Fert.
La hipótesis alternativa (H1) por otra parte, se indica como el complemento de la H0, por lo tanto H1 establecerá que si existen diferencias significativas entre los grupos en estudio (Zar 2010; A. Field, Miles, and Field 2012). Por lo tanto mediante procedimientos estadísticos que veremos en esta clase, se tratará rechazar nuestra hipótesis H0.
H0: IE Ctrl = IE Fert; H1= IE Ctrl ≠ IE Fert
Normalmente cuando se toma la decisión final sobre la hipótesis nula, surgen situaciones que nos pueden llegar a cometer diferentes errores. Así, una vez realizadas las técnicas para probar esta hipótesis, puede que lleguemos a la conclusión de que el enunciado de nuestra H0 no se rechace (acepta) o bien que sea falso y se rechace la H0. En esta situación puede que hayamos rechazado la H0 cuando en realidad era cierta, o que la evidencia colectada para nuestro análisis no haya sido suficiente para rechazarla siendo falsa (Risk 2003). Estas diferentes situaciones plantean la existencia de diferentes tipos de errores (Köhler, Schachtel, and Voleske 2007) que se muestran a continuación:
Analisis de distribucion y normalidad de los datos
Cómo sabemos si las diferencias son realmente representativas?
Antes de iniciar con el análisis y probar una hipótesis se debe determinar la distribución de las variables consideradas en la muestra. La importancia de verificar la normalidad de las muestras en un estudio es fundamental en estadística porque si las muestras son normales se pueden aplicar métodos estadísticos parámetricos, en el caso contrario se deben o bien transformar los datos o bien utilizar métodos no parámetricos (Risk 2003). El paso inicial entonces, es determinar si las variables en estudio pueden ser representadas por una distribución normal. Es decir, si las variables medidas en la muestra pueden ser descritas con parámetros de tendencia central y dispersión alrededor de dichos parámetros.
LA FORMA EN LA QUE SE DISTRIBUYEN LOS DATOS puede ser conocida por medio de tablas, histogramas y poligonos
<- subset(plantas, Tratamiento == "Ctrl")
Ctrl <- subset(plantas, Tratamiento == "Fert") Fert
*Histograma del IE de plantulas fertilizadas
hist(Fert$IE)
*Histogramadel IEE de plantulas control (blanco)
hist(Ctrl$IE)
# #Pruebas de normalidad
Son normales los datos ?
Prueba de normalidad de shapiro-wilk
shapiro.test(Fert$IE)
##
## Shapiro-Wilk normality test
##
## data: Fert$IE
## W = 0.95339, p-value = 0.3941
shapiro.test(Ctrl$IE)
##
## Shapiro-Wilk normality test
##
## data: Ctrl$IE
## W = 0.9532, p-value = 0.3908
Creando objeto
*Objeto numerico
<- 48 mi_objeto
- Cadena de texto
<- "R es útil" mi_objeto2
Tutorial 1 (Instalación de R, etc)
Tutorial 2 (Calculos basicos)
#SUMAS
3+2
## [1] 5
#RESTAS
3-2
## [1] 1
4-4
## [1] 0
#MULTIPLICACIONES
3*2
## [1] 6
4*5
## [1] 20
#DIVISIONES
10/2
## [1] 5
#ELEVACIONES
3^2
## [1] 9
3^3
## [1] 27
3^7
## [1] 2187
2^(-3)
## [1] 0.125
100^(1/2)
## [1] 10
#RAICES
sqrt(100)
## [1] 10
pi
## [1] 3.141593
#EXPONENCIALES
exp(1)
## [1] 2.718282
#LOGARITMOS
log(exp(1))
## [1] 1
log10(1000)
## [1] 3
log2(8)
## [1] 3
log(16, base <- 4)
## [1] 2
#TRIGONOMETRICAS
sin(pi/2)
## [1] 1
cos(0)
## [1] 1
#EXPLICA QUE SIGNIFICA, LIBROS, ETC
?log
## starting httpd help server ... done
#INSTALAR PAQUETES O LIBRERIAS
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.0.5
Tutorial 3 (Tipo de datos y vectores)
<- ("al tutorial de R")
Bienvenidos typeof(Bienvenidos)
## [1] "character"
#NUMERIC
<- 1.7
a #tipo de datos o conocer la clas
class(a)
## [1] "numeric"
#pregunta si es numerico
is.numeric(a)
## [1] TRUE
is.numeric(Bienvenidos)
## [1] FALSE
#convertir a numerico
<- as.numeric(a)
y
#INTEGER
<- 1.34
b class(b)
## [1] "numeric"
#convierte a numero entero
<- as.integer(b)
b1 #pregunta si es numero entero
is.integer(b1)
## [1] TRUE
class(b1)
## [1] "integer"
#COMPLEX (datos complejos (mezclan numeros imaginarios, normals, naturales))
<- 3.5+4i
c #pregunta si es un numero complejo
is.complex(c)
## [1] TRUE
is.complex(b1)
## [1] FALSE
class(c)
## [1] "complex"
#LOGICAL (operadores logicos)
<- T
logical logical
## [1] TRUE
<- FALSE
l class(l)
## [1] "logical"
#CHATACTER (palabras, caracteres)
<- "programar en R"
str class(str)
## [1] "character"
is.character(str)
## [1] TRUE
<- c(1, 2, 3, 4, 5)
numeros numeros
## [1] 1 2 3 4 5
class(numeros)
## [1] "numeric"
#que tan largo es
length(numeros)
## [1] 5
#posion de izquierda a derecha
3] numeros[
## [1] 3
5] numeros[
## [1] 5
Tutorial 4 (Estrucutra de datos, operaciones con vectores y logicas)
<- c(2, 4, 6, 8, 10)
numvec class(numvec)
## [1] "numeric"
length(numvec)
## [1] 5
#conocer el de esa posicion
3] numvec[
## [1] 6
<- c("rojo", 5)
mezcla mezcla
## [1] "rojo" "5"
class(mezcla)
## [1] "character"
<- c("rojo", 5, TRUE)
mezcla mezcla
## [1] "rojo" "5" "TRUE"
#secuencia de datos
<- 1:100) (e
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
## [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
## [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
## [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
## [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
## [91] 91 92 93 94 95 96 97 98 99 100
#generar secuencias
seq(from <- 1.5, to <- 4.2, by <- 0.1)
## [1] 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3
## [20] 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.2
seq(1.5, 4.2, 0.1)
## [1] 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3
## [20] 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.2
seq(1.5, 4.2, 0.2)
## [1] 1.5 1.7 1.9 2.1 2.3 2.5 2.7 2.9 3.1 3.3 3.5 3.7 3.9 4.1
#VECTORES (repetir)
rep("palabra", times <- 7)
## [1] "palabra" "palabra" "palabra" "palabra" "palabra" "palabra" "palabra"
c (e, rep (seq(1, 9, 2), 3), c(1, 2, 3), 42, 2:4)
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
## [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
## [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
## [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
## [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
## [91] 91 92 93 94 95 96 97 98 99 100 1 3 5 7 9 1 3 5
## [109] 7 9 1 3 5 7 9 1 2 3 42 2 3 4
<- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE)
z
<- 1:10
f +1 f
## [1] 2 3 4 5 6 7 8 9 10 11
2*f
## [1] 2 4 6 8 10 12 14 16 18 20
2^f
## [1] 2 4 8 16 32 64 128 256 512 1024
sqrt(f)
## [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427
## [9] 3.000000 3.162278
log(f)
## [1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 1.7917595 1.9459101
## [8] 2.0794415 2.1972246 2.3025851
<- c(1, 3, 5, 7, 8, 9)
g >3 g
## [1] FALSE FALSE TRUE TRUE TRUE TRUE
<3 g
## [1] TRUE FALSE FALSE FALSE FALSE FALSE
==3 g
## [1] FALSE TRUE FALSE FALSE FALSE FALSE
>3] g[g
## [1] 5 7 8 9
==8] g[g
## [1] 8
sum(g>3)
## [1] 4
as.numeric(g>3)
## [1] 0 0 1 1 1 1
#determina la locacion del numero minimoo maximo de un vector numerico o logico
which(g>3)
## [1] 3 4 5 6
max(g)
## [1] 9
which(g==max(g))
## [1] 6
Tutorial 5 (Matrices)
#vector
<- 1:9
h h
## [1] 1 2 3 4 5 6 7 8 9
#matrices (componentes, filas y columnas)
<- matrix(h, nrow = 3, ncol = 3)
H H
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
#acomodados de manera horizontal en filas
<- matrix(h, nrow = 3, ncol = 3, byrow = TRUE)
i i
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
#matriz con puros 0, que tenga 2 filas y 4 columnas
<- matrix(0, 2, 4)
I I
## [,1] [,2] [,3] [,4]
## [1,] 0 0 0 0
## [2,] 0 0 0 0
#elegir un numero que este en la fila 1 y en la comuna 2
1, 2] H[
## [1] 4
H
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
1, ] H[
## [1] 1 4 7
2] H[,
## [1] 4 5 6
2, c(1, 3)] H[
## [1] 2 8
H
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
#combinando columnas o filas
<- 1:9
h rev(h)
## [1] 9 8 7 6 5 4 3 2 1
rep(1, 9)
## [1] 1 1 1 1 1 1 1 1 1
#para filas es el comando "rbind"
rbind(h, rev(h), rep(1, 9,))
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
## h 1 2 3 4 5 6 7 8 9
## 9 8 7 6 5 4 3 2 1
## 1 1 1 1 1 1 1 1 1
#para columnas es el comando "cbind"
cbind(col_1 <- h, col_2 <- rev(h), col_3 <- rep(1, 9))
## [,1] [,2] [,3]
## [1,] 1 9 1
## [2,] 2 8 1
## [3,] 3 7 1
## [4,] 4 6 1
## [5,] 5 5 1
## [6,] 6 4 1
## [7,] 7 3 1
## [8,] 8 2 1
## [9,] 9 1 1
#especificar argumentos
<- 1:9
h <- 9:1
Y <- matrix(h, 3, 3)
h h
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
<- matrix(Y, 3, 3)
Y Y
## [,1] [,2] [,3]
## [1,] 9 6 3
## [2,] 8 5 2
## [3,] 7 4 1
#operaciones entre matrices
+Y H
## [,1] [,2] [,3]
## [1,] 10 10 10
## [2,] 10 10 10
## [3,] 10 10 10
-Y H
## [,1] [,2] [,3]
## [1,] -8 -2 4
## [2,] -6 0 6
## [3,] -4 2 8
*Y H
## [,1] [,2] [,3]
## [1,] 9 24 21
## [2,] 16 25 16
## [3,] 21 24 9
/Y H
## [,1] [,2] [,3]
## [1,] 0.1111111 0.6666667 2.333333
## [2,] 0.2500000 1.0000000 4.000000
## [3,] 0.4285714 1.5000000 9.000000
H
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
Y
## [,1] [,2] [,3]
## [1,] 9 6 3
## [2,] 8 5 2
## [3,] 7 4 1
#multiplicacion en matrices
%*%Y H
## [,1] [,2] [,3]
## [1,] 90 54 18
## [2,] 114 69 24
## [3,] 138 84 30
Tutorial 6 (Estructura de datos, listas)
list(42, "rojo", TRUE, 2.5)
## [[1]]
## [1] 42
##
## [[2]]
## [1] "rojo"
##
## [[3]]
## [1] TRUE
##
## [[4]]
## [1] 2.5
#sentenciado datos
<- list(
ex_list a = c(1, 2, 3, 4),
b = TRUE,
c = "Azul",
d = function(arg=42){print("Hola Mundo")},
e = diag(5)
)$a ex_list
## [1] 1 2 3 4
$b ex_list
## [1] TRUE
$e ex_list
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 0 0 0 0
## [2,] 0 1 0 0 0
## [3,] 0 0 1 0 0
## [4,] 0 0 0 1 0
## [5,] 0 0 0 0 1
$d ex_list
## function(arg=42){print("Hola Mundo")}
#los brackets sirvern para acceder a subconjuntos
c("e","a")] ex_list[
## $e
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 0 0 0 0
## [2,] 0 1 0 0 0
## [3,] 0 0 1 0 0
## [4,] 0 0 0 1 0
## [5,] 0 0 0 0 1
##
## $a
## [1] 1 2 3 4
$d(arg = 1) ex_list
## [1] "Hola Mundo"
Tutorial 7 (Estructura de datos, Data Frame)
<- data.frame( D = c(1, 3, 5, 7, 9, 1, 3, 5, 7, 9),
ex_data V = c(rep("Viento",9), "Fuego"),
A = rep(c(TRUE, FALSE),5))
$D ex_data
## [1] 1 3 5 7 9 1 3 5 7 9
$V ex_data
## [1] "Viento" "Viento" "Viento" "Viento" "Viento" "Viento" "Viento" "Viento"
## [9] "Viento" "Fuego"
$A ex_data
## [1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
#conocer la estructura str
str(ex_data)
## 'data.frame': 10 obs. of 3 variables:
## $ D: num 1 3 5 7 9 1 3 5 7 9
## $ V: chr "Viento" "Viento" "Viento" "Viento" ...
## $ A: logi TRUE FALSE TRUE FALSE TRUE FALSE ...
#numero de filas
nrow(ex_data)
## [1] 10
#numero de columnas
ncol(ex_data)
## [1] 3
dim(ex_data)
## [1] 10 3
#activar biblioteca readr ( sirve para leer archivos de texto en arreglos rectangulares)
library(readr)
<- read.csv("ejemplo.csv")
dato dato
## A B C
## 1 1 TRUE "Verdadero"
## 2 2 FALSE "Falso"
$A dato
## [1] 1 2
$B dato
## [1] TRUE FALSE
$C dato
## [1] "\"Verdadero\"" "\"Falso\""
library(readxl)
## Warning: package 'readxl' was built under R version 4.0.5
<- read_excel("ejemplo.xlsx")
ejemplo View(ejemplo)