#--------------
# 1) Operaciones aritméticas básicas

# Suma
5 + 7
## [1] 12
# Resta
5 - 3
## [1] 2
# Multiplicación
5 * 7
## [1] 35
# División
5/3
## [1] 1.666667
# Exponentes
2^3
## [1] 8
# Devolver el resto de la división de 5/3
5 %% 3
## [1] 2
# Logaritmos y exponenciales :
x = 5/3
log2(x)     # Logarítmo en base 2 de x
## [1] 0.7369656
log10(x)    # Logarítmo en base 10 de x
## [1] 0.2218487
exp(x)      # Exponencial de x
## [1] 5.29449
# Funciones trigonométricas :
cos(x)    # Coseno de x
## [1] -0.09572355
sin(x)    # Seno de x
## [1] 0.995408
tan(x)    # Tangente de x
## [1] -10.39878
acos(x/100)   # Arcoseno de x
## [1] 1.554129
asin(x/100)   # Arcseno de x
## [1] 0.01666744
atan(x/100)   # Arcotangente de x
## [1] 0.01666512
abs(x)    # Valor absoluto de x
## [1] 1.666667
sqrt(x)   # Raíz cuadrada de x
## [1] 1.290994
#--------------
# 2) Asignación de valores a objetos o a variables
sitios <- 2         # Número de sitios = 2
sitios = 2          # Otra forma
n.sitios <- "dos"   # Número de sitios como un caracter
dos.sitios <- TRUE  # Objeto lógico

# Imprimir los valores asignados
sitios         # Imprime el número de sitios
## [1] 2
print(sitios)  # Otra forma
## [1] 2
n.sitios       # Sitios asignados como caracter
## [1] "dos"
dos.sitios     # Sentencia lógica
## [1] TRUE
# Identificar el tipo de asignación
class(sitios)         # Tipología de los sitios
## [1] "numeric"
class(n.sitios)       # Tipología del número de sitios
## [1] "character"
class(dos.sitios)     # Tipología de la sentencia lógica
## [1] "logical"
is.numeric(sitios)    # Identificador: is.numeric(), is.character(), is.logical()
## [1] TRUE
as.character(sitios)  # Cambiar: as.numeric(), as.character(), as.logical()
## [1] "2"
# Operaciones con las asignaciones
3 * sitios     # Multiplicar 3 por el número de sitios
## [1] 6
# Área de un rectángulo
altura <- 20      # Altura del rectángulo
ancho <- 10       # Ancho
área <- altura*ancho   # Cálculo de área
área              # Imprimir el área
## [1] 200
print(área)       # Otra forma de imprimir el área
## [1] 200
ls()        # Permite visualizar a los objetos creados
## [1] "altura"     "ancho"      "área"       "dos.sitios" "n.sitios"  
## [6] "sitios"     "x"
#--------------
# 3) Vectores
sitios <- c(2, 3, 2, 3)   # Vector sitios
sitios    # Imprimir el vector
## [1] 2 3 2 3
sitios <- c("dos", "tres", "dos", "dos")    # Vector como caracter
sitios
## [1] "dos"  "tres" "dos"  "dos"
abundancia <- c(TRUE, FALSE, TRUE, TRUE)    # vector con elementos lógicos
abundancia
## [1]  TRUE FALSE  TRUE  TRUE
sitios <- c(2, 3, 2, 3)   # Vector sitios
names(sitios) <- c("dos", "tres", "dos", "dos")   # Nombres de los elementos del vector sitiossitios
sitios <- c(dos= 2, tres= 3, dos= 2, dos= 2)      # Otra forma
sitios
##  dos tres  dos  dos 
##    2    3    2    2
length(sitios)    # Elementos del vector sitios
## [1] 4
sitios[2]         # Segundo elemento del vector sitios
## tres 
##    3
sitios[c(1,4)]    # Primer y cuarto elemento del vector
## dos dos 
##   2   2
sitios [1:3]      # Tres primeros elementos del vector sitios
##  dos tres  dos 
##    2    3    2
sitios [-1]       # Eliminar el primer elemento del vector
## tres  dos  dos 
##    3    2    2
sitios[abundancia == TRUE]  # Abundancias con valor verdadero
## dos dos dos 
##   2   2   2
sitios[sitios >= 2]  # Sitios con abundancias con valores mayor o igual a 2
##  dos tres  dos  dos 
##    2    3    2    2
sitios[sitios != 3]  # Sitios con abundancias diferentes a 3
## dos dos dos 
##   2   2   2
#--------------
# 4) Operaciones con escalares y vectores

sitios.1 <- c(A = 2, B= 3, C= 2, D= 3)   # Vector sitios en muestreo 1
sitios.1
## A B C D 
## 2 3 2 3
sitios.2 <- c(A = 4, B= 6, C= 4, D= 5)   # Vector sitios en muestreo 2
sitios.2
## A B C D 
## 4 6 4 5
sitios * 3            # Producto de los sitios x 2
##  dos tres  dos  dos 
##    6    9    6    6
sitios.1 * sitios.2   # Producto de los sitios 1 y 2
##  A  B  C  D 
##  8 18  8 15
sitios.1 <- c(2, 3, 2, 3)   # Vector sitios en muestreo 1
sitios.1
## [1] 2 3 2 3
max(sitios.1)         # Valor máximo
## [1] 3
min(sitios.1)         # Valor mínimo
## [1] 2
range(sitios.1)       # Rango de los datos del vector
## [1] 2 3
sum(sitios.1)         # Suma de los datos del vector
## [1] 10
prod(sitios.1)        # Producto de los datos del vector
## [1] 36
mean(sitios.1)        # Promedio de los datos del vector       
## [1] 2.5
sd(sitios.1)          # Desviación estándar 
## [1] 0.5773503
var(sitios.1)         # Varianza de los datos del vector 
## [1] 0.3333333
sort(sitios.1)        # Organizar elementos de forma ascendente
## [1] 2 2 3 3
#--------------
# 5) Matrices
Matriz <- matrix(1:15, nrow = 3, ncol = 5)    # nrow y nrow: Número de filas y columnas
Matriz
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    4    7   10   13
## [2,]    2    5    8   11   14
## [3,]    3    6    9   12   15
Matriz <- matrix(1:15, nrow = 5, ncol = 3)    # 1:15: Secuencia de valores de 1 a 15
Matriz
##      [,1] [,2] [,3]
## [1,]    1    6   11
## [2,]    2    7   12
## [3,]    3    8   13
## [4,]    4    9   14
## [5,]    5   10   15
Matriz <- matrix(c(1:15),5,3, byrow= FALSE)   # 5,3: Número de filas y columnas
Matriz
##      [,1] [,2] [,3]
## [1,]    1    6   11
## [2,]    2    7   12
## [3,]    3    8   13
## [4,]    4    9   14
## [5,]    5   10   15
# Primera opción para crear una Matriz
Matriz <- matrix(c(5, 6, 7, 8, 9,    # Elementos de la Matriz
                   2, 4, 5, 9, 8,
                   7, 3, 4, 8, 7),   # 15 elementos
                   5,3, byrow=F)     # 5 columnas y 3 filas 
Matriz
##      [,1] [,2] [,3]
## [1,]    5    2    7
## [2,]    6    4    3
## [3,]    7    5    4
## [4,]    8    9    8
## [5,]    9    8    7
# Otra forma con las funciones cbind() o rbind() 
col1 <- c(5, 6, 7, 8, 9)        # Col 1 a 3, son las tres columnas de la Matriz
col2 <- c(2, 4, 5, 9, 8)
col3 <- c(7, 3, 4, 8, 7)
Matriz <- cbind(col1, col2, col3)           # Nombres de las columnas
rownames(Matriz) <- c("A","B","C","D","E")  # Nombres de las filasMatriz
Matriz
##   col1 col2 col3
## A    5    2    7
## B    6    4    3
## C    7    5    4
## D    8    9    8
## E    9    8    7
# Otra forma con comandos "colnames" y "dimnames"
Matriz <- matrix(
          data = c(5, 6, 7, 8, 9,    # Elementos de la Matriz
                   2, 4, 5, 9, 8,
                   7, 3, 4, 8, 7), 
          nrow = 5, byrow = FALSE,                   # nrow= columnas.
          dimnames = list(c("A","B","C","D","E"),    # dimnames= lista con vector fila y columna 
                     c("col1", "col2", "col3")))
Matriz
##   col1 col2 col3
## A    5    2    7
## B    6    4    3
## C    7    5    4
## D    8    9    8
## E    9    8    7
# Otra forma con comandos "colnames" y "dimnames"
nombres <- LETTERS[1:nrow(Matriz)]                  # Letras para las filas
colnames(Matriz) <- c("col1","col2","col3")         # Nombres de las columnas
dimnames(Matriz)=(list(nombres,colnames(Matriz)))   # Elaboración de la Matriz
Matriz
##   col1 col2 col3
## A    5    2    7
## B    6    4    3
## C    7    5    4
## D    8    9    8
## E    9    8    7
# Algunos comandos para las matrices
t(Matriz)         # Transpuesta de la Matriz
##      A B C D E
## col1 5 6 7 8 9
## col2 2 4 5 9 8
## col3 7 3 4 8 7
ncol(Matriz)      # Número de columnas
## [1] 3
nrow(Matriz)      # Número de filas
## [1] 5
dim(Matriz)       # Dimensión: Filas y columnas
## [1] 5 3
Matriz[2,]        # Ver la segunda fila (coma a la derecha del dato)
## col1 col2 col3 
##    6    4    3
Matriz[,2]        # Ver la segunda columna (coma a la izquierda del dato)
## A B C D E 
## 2 4 5 9 8
Matriz[2:4,]      # Filas 2 a la 4
##   col1 col2 col3
## B    6    4    3
## C    7    5    4
## D    8    9    8
Matriz[c(2,4),]   # Filas 2 y 4
##   col1 col2 col3
## B    6    4    3
## D    8    9    8
Matriz[,"col1"]   # Ver la columna 1
## A B C D E 
## 5 6 7 8 9
Matriz[3,"col1"]  # Seleccionar el valor de la 3a fila y columna 1
## [1] 7
Matriz[3, 1]      # Otra forma para hacer lo anterior
## [1] 7
Matriz[3, 1:3]    # Valores de la fila 3 y de las columnas 1:3
## col1 col2 col3 
##    7    5    4
Matriz[-3,]       # Excluye a la 3a fila
##   col1 col2 col3
## A    5    2    7
## B    6    4    3
## D    8    9    8
## E    9    8    7
#--------------
# 6) Operaciones matriciales

Matriz * 3              # Multiplicar por 3
##   col1 col2 col3
## A   15    6   21
## B   18   12    9
## C   21   15   12
## D   24   27   24
## E   27   24   21
log10(Matriz)           # Logaritmo en base 10
##        col1      col2      col3
## A 0.6989700 0.3010300 0.8450980
## B 0.7781513 0.6020600 0.4771213
## C 0.8450980 0.6989700 0.6020600
## D 0.9030900 0.9542425 0.9030900
## E 0.9542425 0.9030900 0.8450980
round(log10(Matriz),2)  # Redondear valores a 2 decimales
##   col1 col2 col3
## A 0.70 0.30 0.85
## B 0.78 0.60 0.48
## C 0.85 0.70 0.60
## D 0.90 0.95 0.90
## E 0.95 0.90 0.85
sqrt(Matriz)            # Raíz cuadrada
##       col1     col2     col3
## A 2.236068 1.414214 2.645751
## B 2.449490 2.000000 1.732051
## C 2.645751 2.236068 2.000000
## D 2.828427 3.000000 2.828427
## E 3.000000 2.828427 2.645751
rowSums(Matriz)         # Sumas de filas
##  A  B  C  D  E 
## 14 13 16 25 24
colSums(Matriz)         # Sumas de columnas
## col1 col2 col3 
##   35   28   29
colMeans(Matriz)        # Promedios de columnas
## col1 col2 col3 
##  7.0  5.6  5.8
rowMeans(Matriz)        # Promedios de filas
##        A        B        C        D        E 
## 4.666667 4.333333 5.333333 8.333333 8.000000
apply(Matriz, 1, mean)  # Promedios de filas
##        A        B        C        D        E 
## 4.666667 4.333333 5.333333 8.333333 8.000000
apply(Matriz, 2, mean)  # Promedios de columnas
## col1 col2 col3 
##  7.0  5.6  5.8
summary(Matriz)         # Resumen estadístico de las columnas
##       col1        col2          col3    
##  Min.   :5   Min.   :2.0   Min.   :3.0  
##  1st Qu.:6   1st Qu.:4.0   1st Qu.:4.0  
##  Median :7   Median :5.0   Median :7.0  
##  Mean   :7   Mean   :5.6   Mean   :5.8  
##  3rd Qu.:8   3rd Qu.:8.0   3rd Qu.:7.0  
##  Max.   :9   Max.   :9.0   Max.   :8.0
var(Matriz)             # Matriz de varianza covarianza
##      col1 col2 col3
## col1 2.50 4.25 1.25
## col2 4.25 8.30 2.90
## col3 1.25 2.90 4.70
cor(Matriz)             # Matriz de correlación
##           col1      col2      col3
## col1 1.0000000 0.9329962 0.3646625
## col2 0.9329962 1.0000000 0.4643121
## col3 0.3646625 0.4643121 1.0000000
solve(var(Matriz))      # Inversa de la Matriz de varianza covarianza
##            col1       col2       col3
## col1  3.2380952 -1.7301587  0.2063492
## col2 -1.7301587  1.0780423 -0.2050265
## col3  0.2063492 -0.2050265  0.2843915
eigen(var(Matriz))      # Valores y vectores propios
## eigen() decomposition
## $values
## [1] 11.9189751  3.3439221  0.2371028
## 
## $vectors
##           [,1]       [,2]        [,3]
## [1,] 0.4205324 -0.2518028  0.87163514
## [2,] 0.8143607 -0.3187584 -0.48498429
## [3,] 0.3999614  0.9137770  0.07101004
#--------------
# 7) Crear base de datos - data frames
datos <- data.frame(
  "n" = 1:4,                                   # Consecutivo
  "indiv." = c("a", "b", "c", "d"),            # Individuos
  "sexo" = as.character(c("f","f","m","m")),   # Sexo
  "variable" = c(1.2, 3.4, 4.5, 5.6))          # Valor de la variable
datos           # Impresión de los datos
head(datos)     # Muestra los primeros datos
dim(datos)      # Número de filas y de columnas
## [1] 4 4
length(datos)   # Número de columnas
## [1] 4
names(datos)    # Nombres de las columnas
## [1] "n"        "indiv."   "sexo"     "variable"
str(datos)      # Estructura de la base de datos
## 'data.frame':    4 obs. of  4 variables:
##  $ n       : int  1 2 3 4
##  $ indiv.  : chr  "a" "b" "c" "d"
##  $ sexo    : chr  "f" "f" "m" "m"
##  $ variable: num  1.2 3.4 4.5 5.6
class(datos)    # Tipo de estructura
## [1] "data.frame"
t(datos)        # Transpuesta de la base de datos
##          [,1]  [,2]  [,3]  [,4] 
## n        "1"   "2"   "3"   "4"  
## indiv.   "a"   "b"   "c"   "d"  
## sexo     "f"   "f"   "m"   "m"  
## variable "1.2" "3.4" "4.5" "5.6"
is.data.frame(datos)      # Verifica si datos es un data frame
## [1] TRUE
is.data.frame(Matriz)     # Verifica si Matriz es un data frame
## [1] FALSE
Matriz
##   col1 col2 col3
## A    5    2    7
## B    6    4    3
## C    7    5    4
## D    8    9    8
## E    9    8    7
Matriz1 <- as.data.frame(Matriz)  # Convertir la Matriz a un data frame
Matriz1
#--------------
# 8) Subconjuntos del data frame (datos)

datos
str(datos)      # Estructura de la base de datos
## 'data.frame':    4 obs. of  4 variables:
##  $ n       : int  1 2 3 4
##  $ indiv.  : chr  "a" "b" "c" "d"
##  $ sexo    : chr  "f" "f" "m" "m"
##  $ variable: num  1.2 3.4 4.5 5.6
names(datos)    # Nombres de las columnas
## [1] "n"        "indiv."   "sexo"     "variable"
datos$indiv.    # Elementos de la columna "indv."
## [1] "a" "b" "c" "d"
datos[,'indiv.']    # Otra forma de hacer lo anterior
## [1] "a" "b" "c" "d"
datos[,c(1, 3)]     # Columnas 1 y 3
datos[,-1]          # Excluir columna 1
datos$variable >= 4       # Datos con esta condición
## [1] FALSE FALSE  TRUE  TRUE
datos[datos$variable >= 4, ]    # Filas con esta condición
datos[datos$variable >= 4, c("indiv.", "variable")]   # Variables con esa condición
subset(datos, variable >= 4)    # Individuos con esa condición
attach(datos)     # attach, permite llamar a las columnas solo dando sus nombres
datos[variable >= 4, ]    # Comando resumido
detach(datos)     # Para finalizar lo anterior


#--------------
# 9) Agregar columnas o filas al data frame (datos)

nivel <- factor(c("bajo","bajo","alto","alto"))   # Factor generado
nivel
## [1] bajo bajo alto alto
## Levels: alto bajo
datos
datos$grupo <- nivel            # nueva columna llamada "grupo"
datos
datos1 <- cbind(datos, group = nivel)  # otra forma de incluir la nueva columna
datos1
#--------------
# 10) Data frame con valores aleatrorios
Matriz            # Data frame para calculas sus promedios y desviaciones
##   col1 col2 col3
## A    5    2    7
## B    6    4    3
## C    7    5    4
## D    8    9    8
## E    9    8    7
media = colMeans(Matriz)    # Promedios de las columnas
media
## col1 col2 col3 
##  7.0  5.6  5.8
de= sqrt(var(Matriz))       # Desviaciones estándar de las columnas
de
##          col1     col2     col3
## col1 1.581139 2.061553 1.118034
## col2 2.061553 2.880972 1.702939
## col3 1.118034 1.702939 2.167948
# Generador de números aleatorios: rnorm(n, media, de)
# *Cada corrida es independiente de la anterior
col1 <- abs(round(rnorm(10, 7.0, 1.6),3))   # Números aleatorios de la columna 1
col1
##  [1] 6.577 6.355 7.046 9.084 6.718 7.400 7.858 7.907 8.905 4.006
col2 <- abs(round(rnorm(10, 5.6, 2.8),3))   # Números aleatorios de la columna 2
col2
##  [1] 4.430 7.943 3.249 8.511 8.519 4.447 8.144 2.326 5.859 3.237
col3 <- abs(round(rnorm(10, 5.8, 2.2),3))   # Números aleatorios de la columna 3
col3
##  [1]  8.223  4.556  3.045  3.459 10.149  4.366  7.891  8.024  4.776  8.570
Matriz2 <- cbind(col1, col2, col3)  # Fusión de las columnas
Matriz2
##        col1  col2   col3
##  [1,] 6.577 4.430  8.223
##  [2,] 6.355 7.943  4.556
##  [3,] 7.046 3.249  3.045
##  [4,] 9.084 8.511  3.459
##  [5,] 6.718 8.519 10.149
##  [6,] 7.400 4.447  4.366
##  [7,] 7.858 8.144  7.891
##  [8,] 7.907 2.326  8.024
##  [9,] 8.905 5.859  4.776
## [10,] 4.006 3.237  8.570
Matriz2 <- data.frame(Matriz2)      # Data Frame - Matriz2
Matriz2
str(Matriz2)          # Estrutura del data frame
## 'data.frame':    10 obs. of  3 variables:
##  $ col1: num  6.58 6.36 7.05 9.08 6.72 ...
##  $ col2: num  4.43 7.94 3.25 8.51 8.52 ...
##  $ col3: num  8.22 4.56 3.04 3.46 10.15 ...
x11()                 # Panel gráfico adicional
plot(Matriz2)         # Figura de pares

plot(log10(Matriz2))  # Figura con transformación logarítmica

plot(sqrt(Matriz2))   # Figura con transformación cuadrática

#--------------
# 11) Otra opción de realizar data frame con valores aleatorios
Matriz            # Dataframe para relacionar la numeración de cada fila
##   col1 col2 col3
## A    5    2    7
## B    6    4    3
## C    7    5    4
## D    8    9    8
## E    9    8    7
# Generar 10 números aleatorios
Matriz3= sample(                  # Muestra a realizar (sample)
         1:nrow(Matriz[1:5,]),    # Filas de la base de datos (1:5)
         size=10,                 # Valores aleatorios a generar
         replace=TRUE)            # Muestreo por reemplazamiento
Matriz3   # Los 10 números, representan el orden en que aparece cada observación
##  [1] 2 3 3 5 3 3 3 1 4 4
Matriz3<- Matriz[Matriz3, ]       # Data frame generado con 10 obs. aleatorias
Matriz3 <- data.frame(Matriz3)    # Data Frame - Matriz3
head(Matriz3)
str(Matriz3)          # Estructura de Matriz3
## 'data.frame':    10 obs. of  3 variables:
##  $ col1: num  6 7 7 9 7 7 7 5 8 8
##  $ col2: num  4 5 5 8 5 5 5 2 9 9
##  $ col3: num  3 4 4 7 4 4 4 7 8 8
x11()                 # Panel gráfico adicional
plot(Matriz3)         # Figura de pares

plot(log10(Matriz3))  # Figura con transformación logarítmica

plot(sqrt(Matriz3))   # Figura con transformación cuadrática

EJEMPLO 2

#--------------
# 1) Librerías requeridas
library(lattice)
library(ellipse)

# rnorm(n, media, DE)
pH <- abs(round(rnorm(100, 5.1, 2.1),3)) # 100 No. aleatorios de la variable pH
head(pH)
## [1] 6.583 5.581 2.825 1.400 4.744 5.377
O2 <- abs(round(rnorm(100, 5.1, 1.1),3)) # 100 No. aleatorios de la variable O2
head(O2)
## [1] 3.824 5.949 4.774 5.728 4.252 4.692
NO3 <- abs(round(rnorm(100, 0.4, 0.2),3)) # 100 No. aleatorios de la variable NO3
head(NO3)
## [1] 0.623 0.721 0.634 0.271 0.455 0.450
NO2 <- abs(round(rnorm(100, 0.4, 0.3),3)) # 100 No. aleatorios de la variable NO2
head(NO2)
## [1] 0.798 0.567 0.153 0.015 0.109 0.621
PO4 <- abs(round(rnorm(100, 0.2, 0.3),3)) # 100 No. aleatorios de la variable PO4
head(PO4)
## [1] 0.288 0.100 0.372 0.447 0.560 0.904
ambientales <- cbind(pH, O2, NO3, NO2, PO4)   # Fusión de las columnas
ambientales <- data.frame(ambientales)        # Data Frame - Matriz2
head(ambientales)
write.csv2(ambientales,"datos.csv")   # write.csv: Guardar el archivo en *.csv
dir()   # Directorio de trabajo
## [1] "Capítulo2.rmd"   "Capítulo2_files" "datos.csv"
# Cargar la base de datos a R, como "datos1"
datos1 = read.csv2("datos.csv",row.names=1)
str(datos1)         # Estructura de la base
## 'data.frame':    100 obs. of  5 variables:
##  $ pH : num  6.58 5.58 2.83 1.4 4.74 ...
##  $ O2 : num  3.82 5.95 4.77 5.73 4.25 ...
##  $ NO3: num  0.623 0.721 0.634 0.271 0.455 0.45 0.36 0.184 0.196 0.459 ...
##  $ NO2: num  0.798 0.567 0.153 0.015 0.109 0.621 0.446 0.435 0.716 0.419 ...
##  $ PO4: num  0.288 0.1 0.372 0.447 0.56 0.904 0.409 0.389 0.657 0.116 ...
summary(datos1)     # Resumen estadístico
##        pH               O2             NO3              NO2        
##  Min.   : 0.188   Min.   :1.958   Min.   :0.0040   Min.   :0.0020  
##  1st Qu.: 3.930   1st Qu.:4.143   1st Qu.:0.2555   1st Qu.:0.2268  
##  Median : 5.361   Median :4.808   Median :0.3785   Median :0.4145  
##  Mean   : 5.239   Mean   :4.864   Mean   :0.4020   Mean   :0.4328  
##  3rd Qu.: 6.537   3rd Qu.:5.555   3rd Qu.:0.5417   3rd Qu.:0.5745  
##  Max.   :11.145   Max.   :6.882   Max.   :0.8970   Max.   :1.3550  
##       PO4        
##  Min.   :0.0040  
##  1st Qu.:0.1125  
##  Median :0.2035  
##  Mean   :0.2676  
##  3rd Qu.:0.4108  
##  Max.   :0.9040
#--------------------
# 2) Figuras

x11()               # Panel gráfico
plot(datos1)        # Figura de pares

pairs(datos1,col=1)     # Figura de pares

hist(datos1$pH, xlab="Valores de pH", ylab="Frecuencia",      # Histograma
     cex.lab=1.5, main="",col="lightblue")

hist(sqrt(datos1$pH), xlab="Valores de pH",             # Histograma con transformación cuadrática
     ylab="Frecuencia",cex.lab=1.5, main="",
     col="bisque")

x11()
plotcorr(cor(sqrt(datos1)),col="bisque")