Herramienta WEB
Estadística
modelos https://github.com/easystats/performance ver tutorial acá https://youtu.be/EPIxQ5i5oxs
1. Qué es R, descarga R desde el Cran R Project
Instalar R en Mac
2. R Studio
https://posit.co/download/rstudio-desktop/
Comunidad R https://forum.posit.co/
Consultas
https://www.rdocumentation.org/
3. Bioconductor
Instalar Bionconductor en R
if (!require("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install(version = "3.21")
3. Run a simple program
Notas,
Con CNTRL L se limpia la consola
Se puede seleccionar varias líneas y darle RUN, CNTRL y ENTER
Ejemplo, Click en Run
12+8
12-64
12*64
12/2
Se pueden añadir paréntesis para el orden de la función ejemplo (543+6476)*7
4. https://youtu.be/VocbExLSukE
5. https://youtu.be/p6xb_n9BPtw
6. https://youtu.be/46UFzO1EgBo
7. https://youtu.be/31El3vGcG58
8. https://youtu.be/rpG0Dj-GO8Y
9. https://youtu.be/9mqla7W5i70
10. https://youtu.be/wdj0tUSPgBU
11. https://youtu.be/FVSlAk24jTM
12. https://youtu.be/3IPgDeAuuPs
13. Crear Listas en R
14. https://youtu.be/Q_K5FXZGEnA
15. https://youtu.be/rAUjiUFxAAQ
16. https://youtu.be/LUhU_GX6fys
17. https://youtu.be/y8ynPqqe3eA
18. https://youtu.be/b1KsXxtw9tA
R para Principiantes
https://cran.r-project.org/doc/contrib/rdebuts_es.pdf
Cómo usar el código
Instrucciones en R
https://cran.r-project.org/doc/manuals/r-release/R-lang.pdf
Por ejemplo
se ingresa
>1+2
este es el resultado
[1] 3
se ingresa
>7%/2%
este es el resultado que es la división en enteros 2*3 es 6, sobra 1
[1] 3
Para obtener el residuo,
se ingresa
>7%%2
este es el resultado, que es el residuo de 1
[1] 1
Nota
aov es el nombre de la función de ANOVA
Editemos el siguiente SCRIPT (lista de órdenes) en la consola R Studio
Se puede correr por línea
Cada línea tiene un número, que se corre con la función RUN ubicado en la pestaña superior derecha
Cntrl y luego ENTER
Se puede seleccionar varias líneas y darle RUN, CNTRL y ENTER
Con CNTRL L se limpia la consola
La descripción de lo que significa cada orden se introduce #
Para elevar un número 2^(1/3)
Cuando se ingresa 1:7, se genera in resultado de secuencia 1 2 3 4 5 6 7
rep (pi, 5) se repetirá 5 veces el valor que se le haya asignado a pi
Nótese que en el cuadro superior derecho, esta el resumen de la asignación de los valores (HISTORY).
T significa siempre True y F false, lo mejor es no asignarle otro valor para no ocasionar confusión.
Se usa txt= "carpe diem"
Si quiero substituirlo, se puede con sub ("carpe", "seize", txt)
se usa is.numeric(M)
is.logical(M)
para verificar si el dato es un numero o texto entre paréntesis lo que quiero que analice
Ojo que cada dato se le asigna un valor previamente (M=30, T=True, Txt=carpe, char=True) si se corre
mode(M)
mode(T)
mode(Txt)
mode(char)
Le respondera el tipo de dato que tiene si es numerico, logico, texto.
En R hay que utilizar los slash de manera invertida en lugar de\ se utiliza /
Para que R pueda guardar datos, hay que decirle dónde debe buscarlos c:/user/xxxx/Desktop
Para darle la instrucción, se asigna con
setwd ("c:/user/xxxx/Desktop")
Lo que estamos es asignando un lugar donde guardarlo (working directory es wd)
Para importar datos
gedb = read.csv('gedb.csv', sep = ',', dec = '.', header = T)
Lo que estoy haciendo es obteniendo los datos y nombrandolos gedb para lo que primero los leo, y defino que los datos pueden estas siendo separados por una coma o un punto y que tienen un encabezados header
View(gedb)
Con esto lo que esta es llamando a gedb para que lo pueda ver.
O bien solo gedb
Para guardar datos
write.csv(txt, "my export.csv")
Lo que esta generando es guardando lo que este asignado a txt dentro del archivo my export.csv
Para generar vectores o bien grupos de valores, se le asignan los datos
V3= c(1,2,3,4)
si le doy length(v3)
la respuesta sera la cantidad de datos que hay en el vector que son 4 datos.
como sabes si es un vector, se le hace la pregunta que seria
is.vector(gebd)
podemos unir vectores
m1=cbind(v3,v5);m1
el punto y coma es solo para volver a mostar el objeto m1
para saber las dimensiones se usa dim
dim(m1)
me dice que tengo x lineas de datos y x columnas
Matrices
is.matrix(m1)
True
puedo crear una nueva matrix a partir de un vector por ejemplo un vector como v4= 1,2,3,4
m4= matrix (v4, nrow=2, ncol=2);m4
Para cambiar un objeto a un factor, es decir a que el dato se pueda usar para clasificar entonces
ice2 = c(rep("Vanilla",5), rep("Strawberry", 5), rep("Chocolate", 5), rep("Cookies", 5))
pero quiero que sea un factor
ice2 =as factor(ice2)
veamos si tenemos un grupo de datos
is.data.frame(gedb)
Ojo por defecto siempre el head, tail tiene solo 6 datos
lo puedo modificar indicandole el n
tail(gedb, n = 8)
Listas
Se pueden guardar varios objetos al mismo tiempo
l2 = list(m1, v3, ice, gedb)
Estadistica
alf=c("pizza", "DNA", "GFP")
teniamo la matrix m1
saquemosle el minimo
min(m1) seria el dato 1
min(alf) seria el dato con la menor letra DNA
saquemosle el maximo
max(m1)
max(alf)
median(m1) mediana
mean (m1) media
sd(m1) desviación estandar
cor(m1) es la correlación
quantile(m1, .5) es el percentil 50
quantile (m1, c(.1, .5, .81)
Manipulation de datos
Creemos los datos
a = 101
b = 55
c = 24
comparemos los datos
a == b #Is equal? FALSE
a != b #Is different? TRUE
a > b #Is greater than? TRUE
c < c #Is less than?
c >= c #Is greater than or equal to?
b <= c #Is less than or equal to?
Comparando algunos vectores
d = c(3,4,5)
e = c(6,7,8)
f = c(1,6,10)
o = c(10,6,1)
#Compara elemento por elemento y el resultado es un vector con los resultados de la comparaciÛn
d < e
d < e & d < f
#Con al menos un valor que no sea TRUE, la comparaciÛn completa ser· FALSE
d < e && d < f
#Con todas las comparaciones siento ciertas:
d < e && d < c(5,7,8)
#Operador OR por elemento
f == o | f == o
#Operador OR general
f == o || f == o
EXCLUSIVE OR, INDICA DONDE NO SE CUMPLE LA CONDICION
#Operador EXCLUSIVEOR: El resultado es un vector con TRUE donde los valores lÛgicos difieren
xor(e == f, f == o)
ESTA CONTENIDO EL OBJETO EN ALGUN PUNTO EN EL OTRO VECTOR?
#The %in% operator checks the presence of certain elements in an object, in disregard of their order
o %in% f
e %in% f
FILTRADO DE DATOS
ge=gedb
colnames(ge)
le estoy pidiendo que me brinde que nombres tienen las columnas de ge
Ojo con el uso de paréntesis cuadrados [rows, columns]
los datos ge[,5] si dejamos en blanco la primera que corresponde a las rows, asigna a todos
Puedo llamar a los datos de la columna 5, para todas las filas rows
ge[,5]
si lo hago inverso ge[1,] es en la linea 1 todas las columnas
puedo cambiarlo a factor
ge[,1]=as.factor(ge[,1])
Deme los datos de temperatura igual a 10
ge[ge$TEMPERATURE == 10,]
#---Fundamentod de programaciÛn en R para An·lisis de datos---#===============================================================================
# Documento "An introduction to R"
# http://www.cran.r-project.org/doc/manuals/R-intro.pdf
# Tarjeta de referencia para las funciones usadas con m·s frecuencia
# http://www.cran.r-project.org/doc/contrib/Short-refcard.pdf
#
#=============================================================================================================================================
#---Parte 1.2. Operaciones B·sicas en RStudio---#====================================================================================================
exp(4) # e^4
sqrt(81) # square root of 81
pi # pi number
log(4) # natural logarithm of 4
log(4,10) # base 10 logarithm of 4
abs(-99.2) # absolute value
1:7 # Generates numbers from 1 to 7
rep(pi,5) # Repeats pi number, five times.
M = 34
N = 54
O = 75
P = 87
M+N
M-O
P*M
M / N * O + P
P + M / N * O
T #Stands for True
F #F stands for false
Txt = "Carpe diem"
Txt
Txt = sub("Carpe", "seize",Txt) #Text can be changed in a character object
Txt
sub("diem", "the day", Txt)
is.numeric(M) # Verifies if object M is numeric, the result is logical
is.numeric(Txt) # Verifies if object T is numeric.
char = is.character(Txt) # Verifies if object T is character, and saves the logical result into object "char"
char
is.logical(char) # Verifies if object char is logical
is.character(char) # Verifies if object char is character
#La funciÛn mode permite conocer el tipo de datos que contiene un objeto
mode(M)
mode(T)
mode(Txt)
mode(char)
?mode
#=============================================================================================================================================
#---Part 1.3. Importando y Exportando Datos---#================================================================================================
#Importando el documento "gedb.csv" usando comandos en R
getwd() #Checking the folder in which we have been working.
setwd("C:/Users/egutierrez/Desktop/") #This command allows us to define the new working directory
gedb = read.csv('gedb.csv', sep = ',', dec = '.', header = T)
read.table('gedb.csv', sep = ',', dec = '.', header = T)
#Importing "gedb.csv" document from RStudio
#Exporting local data (matrix created in exercise 2)
write.csv(Txt, "myexport.csv")
#=============================================================================================================================================
#---Parte 1.4. Clases de Objetos--#=======================================================================================================
# VECTORES ====================================================================================================================================
# Un vector es una cadena unidimensional de valores de un solo tipo
v3 = c(1,2,3,4)
v3
is.vector(v3)
length(v3) #Permite conocer la cantidad de elementos en el vector
is.vector(gedb) #?
# MATRIX =====================================================================================================================================
v5 = c(10,20,30,40,50)
m1 = cbind(v3,v5);m1 #cbind - column bind
dim(m1) #Gives the object dimensions "rows columns"
is.matrix(m1) #Verifying class type
mode(m1) #Verifying data type in the matrix
m4 = matrix(v4, nrow = 2, ncol = 2);m4 #Verifying class type
mode(m4) #Verifying data type in the matrix
is.matrix(gedb)
# FACTOR =====================================================================================================================================
# Creando una variable categÛrica como un vector
ice = c("Vanilla", "Strawberry", "Chocolate", "Cookies")
ice2 = c(rep("Vanilla",5), rep("Strawberry", 5), rep("Chocolate", 5), rep("Cookies", 5))
ice
ice2
#Verificando la clase de un objeto
is.vector(ice)
is.vector(ice2)
#Convirtiendo objeto ice 2 a factor
ice2 = as.factor(ice2)
ice2
levels(ice2)
is.vector(ice)
is.vector(ice2)
is.factor(ice2)
is.factor(gedb)
#DATA FRAMES =================================================================================================================================
is.data.frame(gedb) #:D
head(gedb) #function to see the first 6 values in a data frame
tail(gedb) #function to see the last 6 values in a data frame
tail(gedb, n = 8) #defining "n" different quantity of rows can be obtained
str(ge) #Displays some information about the internal structure of an object
summary(ge) #Displays some information about the columns and variables of a data frame
# LISTAS =======================================================================================================================================
#Creando una lista con diferentes objetos
l2 = list(m1, v3, ice, gedb) #The list can contain objects of diferent classes
l2
is.list(l2) #The object class can be verified
mode(l2) #The mode function will tell that the object is a list
#=============================================================================================================================================
#---Part 1.5. Funciones estadÌsticas b·sicas---#=================================================================================================
alf = c("pizza", "DNA", "GFP")
min(m1) #Applied to a numeric object will give the minimum value
min(alf) #Applied to a text object will give the return the word with the nearest initial to A.
max(m1) #Applied to a numeric object will give the maximum value
max(alf) #Applied to a text object will give the return the word with the nearest initial to Z.
prod(m1) #Returns the result of multiiplying all the values contained in a numerical object
median(m1) #Retuns the value for the median of a numerical object
range(m1) #Returns the minimun and maximum value of a numerical object
range(alf) #Returns the text starting with the nearest and the furthest letter to the A.
mean(m1) #Average of values in a numeric object
sd(m1) #Standard Deviation of values in a numeric object
sum(m1) #Sum of values in a numeric object
cor(m1) #Correlation matrix from a matrix
quantile(m1, .5) #Percentil 50th
quantile(m1, c(.1,.5, .81)) #Percentil 10th, 50th and 81th
#=============================================================================================================================================
#---Parte 1.6. ManipulaciÛn de Datos---#===========================================================================================================
ge = gedb#--Agregue aquÌ el nombre de su marco de datos
###---Operadores LÛgicos---###=================================================================================================================
a = 101
b = 55
c = 24
a == b #Is equal?
a != b #Is different?
a > b #Is greater than?
c < c #Is less than?
c >= c #Is greater than or equal to?
b <= c #Is less than or equal to?
#Comparando algunos vectores
d = c(3,4,5)
e = c(6,7,8)
f = c(1,6,10)
o = c(10,6,1)
#Compara elemento por elemento y el resultado es un vector con los resultados de la comparaciÛn
d < e
d < e & d < f
#Con al menos un valor que no sea TRUE, la comparaciÛn completa ser· FALSE
d < e && d < f
#Con todas las comparaciones siento ciertas:
d < e && d < c(5,7,8)
#Operador OR por elemento
f == o | f == o
#Operador OR general
f == o || f == o
#Operador EXCLUSIVEOR: El resultado es un vector con TRUE donde los valores lÛgicos difieren
xor(e == f, f == o)
#The %in% operator checks the presence of certain elements in an object, in disregard of their order
o %in% f
e %in% f
###---Filtrado---#===========================================================================================================================
#Which() permite identificar el elemento que cumple con la condiciÛn establecida
cv = which(colnames(ge) == "DELTA_CT")
cv
#Ahora sabemos que la columna 7 corresponde a los valores "DELTA_CT"
ge[,5]
#El comando para obtener valores de un marco de datos o una matriz es:
#objeto[fila, columna]
head(ge)
ge[1,]
ge[1,4]
ge[ge$TEMPERATURE == 10,] #Getting rows for Well ID = A1
ge[ge$TEMPERATURE == 10 & ge$DELTA_CT > -3, ] #Getting rows for Welll ID = A1 and Delta Ct values less than -3
ge[ge$TEMPERATURE == 10 & ge$DELTA_CT >= -4.1, c(4,5)] #Selecting specific columns
#Otra forma de filtrar es usando la funciÛn subset
# subset(<object>, logical expressions, select = <columns to select>)
subset(ge, TEMPERATURE == 10 & ge[,5] >= -4.1, select = colnames(ge))
###---Condicionales---#========================================================================================================================
#Establezcamos un condicional que ejecute c·lculos condicionales, si el objeto "testvalue" indica
# "media" Èl calcular· la media de la columna DELTA_CT, en caso de que "testvalue" sea
# diferente de "media" el c·lculo ser· la suma
testvalue = 'media'
if(testvalue == 'media'){
dctval = mean(ge[,cv], na.rm = TRUE)
} else {
dctval = sum(ge[,cv], na.rm = TRUE)
}
dctval
testvalue = 'other'
#=============================================================================================================================================
#---Parte 1.7. GraficaciÛn---#===========================================================================================================
###---Histograma---#===========================================================================================================================
h = hist(ge[,cv], col = "blue")
hist(ge[,cv], col = "red", breaks = 5)
###---Puntos + Boxplots---#===========================================================================================================================
plot(ge$TEMPERATURE, ge$DELTA_CT)
plot(as.factor(ge$TEMPERATURE), ge$DELTA_CT)
plot(as.factor(ge$TEMPERATURE), ge$DELTA_CT, col = "red")
plot(as.factor(ge$TEMPERATURE), ge$DELTA_CT, col = c("green", "yellow", "red"))
plot(as.factor(ge$TEMPERATURE), ge$DELTA_CT, col = c("green", "yellow", "red"),
xlab = "Temperature", ylab = "DCT")
#Volviendo a los puntos
plot(ge$TEMPERATURE, ge$DELTA_CT, pch = 18)
#Creando un un vector para colorear los puntos seg˙n gen
attach(ge) #Permite usar los nombres de las columnas como objetos
#Primero se crea un vector con los nombres ˙nicos
n = length(ge[,1]);n
gname = ge[,which(colnames(ge) == "GENE_NAME")];gname
gname = as.character(gname);gname
gname = unique(gname);gname
#Luego se crea un vector de un solo color repetido la cantidad de filas del df
gencol = rep("black", 1, n);gencol
#Ahora se asignan colores condicionalmente
gencol[GENE_NAME == gname[1]] <- "red"
gencol[GENE_NAME == gname[2]] <- "green"
gencol[GENE_NAME == gname[3]] <- "blue"
gencol[GENE_NAME == gname[4]] <- "orange"
gencol
#Graficando
plot(TEMPERATURE, DELTA_CT, pch = 18, col = gencol)
#Boxplot por Nombre de Gen y Temperatura
par(mai = c(1,2.5,0,0))
boxplot(DELTA_CT ~ as.factor(paste(TEMPERATURE, " - ", GENE_NAME)), horizontal = T, las = 2,
col = heat.colors(length(unique(paste(TEMPERATURE, " - ", GENE_NAME)))))
boxplot(DELTA_CT ~ as.factor(paste(GENE_NAME, " - ", TEMPERATURE)), horizontal = T, las = 2,
col = heat.colors(length(unique(paste(TEMPERATURE, " - ", GENE_NAME)))))
APUNTES.
A <- c(-1, +1, -1, +1)
B <- c(-1, -1, +1, +1)
y <- c(52, 74, 62, 80)
popped_corn <- lm(y ~ A + B + A*B)
summary(popped_corn)
popped <- lm(y ~ A*B)
popped
summary(popped)
AA <- c(-1, +1, -1, +1)
BB <- c(-1, -1, +1, +1)
yy <- c(3, 5, 4, 9)
flavor <- lm(yy ~ AA + BB + AA*BB)
flavor
APUNTES
A <- B <- C <- c(-1, +1)
design <- expand.grid(A=A, B=B, C=C)
# The 3 factors that form the base of our design
A <- design$A
B <- design$B
C <- design$C
# These 4 factors are generated, using the trade-off table relationships
D <- A*B
E <- A*C
F <- B*C
G <- A*B*C
# These are the 8 experimental outcomes, corresponding to the 8 entries
# in each of the vectors above
y <- c(320, 276, 306, 290, 272, 274, 290, 255)
# And finally, the linear model
mod.ff <- lm(y ~ A*B*C*D*E*F*G)
# It is better to uncomment and use this line instead:
# library(pid) <-- best to use this!
# But this embedded R script does not have the "pid" library.
# So we will load the required function from an external server instead:
source('https://yint.org/paretoPlot.R')
p <- paretoPlot(mod.ff)
# Now rebuild the linear model with only the 4 important terms
mod.res4 <- lm(y ~ A*C*E*G)
p <- paretoPlot(mod.res4)