EJERCICIO 1. Genere un vector aleatorio de distribución de Poisson, con número de observaciones 40, y promedio de 8. Use set.seed(2025).
set.seed(2025)
vector=rpois(40,8)
print(vector)
## [1] 10 8 8 8 10 8 12 5 9 8 7 13 9 3 8 11 7 7 10 5 7 10 3 9 7
## [26] 12 10 6 11 6 7 5 8 8 9 5 4 5 16 12
A) Ordenelos de menor a mayor
Vector_Ordenado=sort(vector)
print(Vector_Ordenado)
## [1] 3 3 4 5 5 5 5 5 6 6 7 7 7 7 7 7 8 8 8 8 8 8 8 8 9
## [26] 9 9 9 10 10 10 10 10 11 11 12 12 12 13 16
B) Extraiga el octavo y veinteavo elemento del vector
Vector_Ordenado[c(8,20)]
## [1] 5 8
C) Extraiga los valores de las posiciones impares
Valores_Pos_Imp=Vector_Ordenado[seq(1, length(Vector_Ordenado), by = 2)]
print(Valores_Pos_Imp)
## [1] 3 4 5 5 6 7 7 7 8 8 8 8 9 9 10 10 10 11 12 13
D) Extraiga los valores que son mayores que 3, pero menores que 8
Vector_Ordenado[c(Vector_Ordenado>3&Vector_Ordenado<8)]
## [1] 4 5 5 5 5 5 6 6 7 7 7 7 7 7
EJERCICIO 2. Un cliente busca información sobre conjuntos de datos relacionados con experimentos quımicos. Recuerda que sus nombres son:esoph y trees. El cliente necesita que usted realice lo siguiente:
A) Indique en qué paquete se encuentran estos conjuntos
?esoph
## starting httpd help server ... done
data(esoph)
str(esoph)
## 'data.frame': 88 obs. of 5 variables:
## $ agegp : Ord.factor w/ 6 levels "25-34"<"35-44"<..: 1 1 1 1 1 1 1 1 1 1 ...
## $ alcgp : Ord.factor w/ 4 levels "0-39g/day"<"40-79"<..: 1 1 1 1 2 2 2 2 3 3 ...
## $ tobgp : Ord.factor w/ 4 levels "0-9g/day"<"10-19"<..: 1 2 3 4 1 2 3 4 1 2 ...
## $ ncases : num 0 0 0 0 0 0 0 0 0 0 ...
## $ ncontrols: num 40 10 6 5 27 7 4 7 2 1 ...
View(esoph)
El paquete esoph (Smoking, Alcohol and (O)esophageal Cancer): Registra datos relacionados a Tabaquismo, alcohol y cáncer de esófago, el conjunto de datos forma parte del paquete datasets en R El conjunto de datos contiene 88 observaciones agrupadas en función de los niveles de exposición a alcohol y tabaco, con lo que tal parece se busco analizar la asociación entre factores de riesgo y la presencia de la enfermedad en grupos de personas de distintas caracteristicas.Cada observación en el dataset representa un grupo de individuos clasificados según edad, consumo de alcohol y consumo de tabaco, proporcionando el número de casos y controles para cada combinación.
?trees
data(trees)
str(trees)
## 'data.frame': 31 obs. of 3 variables:
## $ Girth : num 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
## $ Height: num 70 65 63 72 81 83 66 75 80 75 ...
## $ Volume: num 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ...
View(trees)
El paquete ‘trees’ (Diameter, Height and Volume for Black Cherry Trees): Registra datos relacionados al Diámetro, altura y volumen de cerezos negros. El conjunto de datos trees, disponible en el paquete base de R (datasets), contiene información sobre las dimensiones de 31 árboles de dicha especie.
Cabe aclarar que ambos conjuntos de datos se encuentran en el paquete datasets de R.
B) Proporcione una descripcion breve de las variables contenidas en cada conjunto.
Variables de esop
agegp: Hace referencia a los grupos de edad de los sujetos en intervalos de 10 años. Los rangos son entre 25-34 años , entre 35-44 años, entre 45-54 años,entre 55-64 años, entre 65-74 años y mas de 75 años.
alcgp: Hace referencia a los grupos de consumo de alcohol (expresado en gramos por día), con las siguientes categorías: de 0 a 39 gramos, entre 40 y 79 gramos, entre 80 y 119 gramos, “y mas 120 gramos
tobgp : Hace referencia a los grupos de consumo de tabaco (expresado en gramos por día), dividido en intervalos establecidos de la siguiente manera: de 0 a 9 gramos, de 10 a 19 gramos, de 20 a 29 gramos y auqellos que consumen mas de 29 gramos.
ncases: Número de casos de cáncer de esófago en cada grupo de edad y nivel de exposición.
ncontrols: Número de individuos sanos (grupo control) en cada combinación de edad, consumo de alcohol y tabaco.
Variables de trees
Girth: Hace referencia al perímetro del tronco medido, expresado en pulgadas.
Height: Hace referencia a la altura total del árbol, expresada en pies.
Volume: Hace referencia al volumen del árbol, estimado en pies cúbicos.
C) Realice una caracterización de la variable Volume segun Height (convertida en categorías por cuantiles) en trees. Use el paquete dplyr de tidyverse y elimine los valores NA (si lo hay)
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
cuantil= quantile(trees$Height, q= c(0, 0.25, 0.50, 0.75, 1), na.rm = TRUE)
trees %>%
mutate(Height_Categorizada=case_when(
Height<=cuantil[2] ~ "Bajo",
Height<=cuantil[3] ~ "Mediano",
Height<=cuantil[4] ~ "Alto",
TRUE~ "Altisimo"
)) %>% group_by(Height_Categorizada) %>%
summarise(
vol_max = max(Volume, na.rm = TRUE),
vol_prom = mean(Volume, na.rm = TRUE),
vol_min = min(Volume, na.rm = TRUE),
sd_vol=sd(Volume, na.rm = TRUE)
)
## # A tibble: 4 × 5
## Height_Categorizada vol_max vol_prom vol_min sd_vol
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Altisimo 77 41.1 18.8 22.0
## 2 Alto 58.3 39.6 22.6 13.3
## 3 Bajo 38.3 19.2 10.2 9.38
## 4 Mediano 36.3 22.6 18.2 6.20
Se observa que los árboles más altos (“Altísimo” y “Alto”) tienen los mayores volúmenes promedio (41.11 y 39.55), mientras que los más bajos presentan menores valores (Bajo: 19.22, Mediano: 22.58). Adicionalmnete la tabla sugiere que la relación entre altura y volumen no es homogénea, ya que se obtuvo una mayor variabilidad en árboles altos,indicando mayor variabilidad en su volumen, mientras que los más bajos presentan una menor dispersión.
EJERCICIO 3. Se define una variable rquote <- “r’s internals are irrefutably intriguing”. Esta variable se ha dividido en un vector que contiene letras separadas y se ha almacenado en un vector chars con la función strsplit(). ¿Puedes escribir un código que cuente el número de r’s que vienen antes de la primera u en rquote?
rquote="r’s internals are irrefutably intriguing"
chars=strsplit(rquote, split="")[[1]]
Num_r=0
for (i in 1:length(chars)) {
if (chars[i] == "u") {
break
}
if (chars[i] == "r") {
Num_r <- Num_r + 1
}
}
print(paste("El número de 'r' antes de encontrar la primera 'u' es:", Num_r))
## [1] "El número de 'r' antes de encontrar la primera 'u' es: 5"
EJERCICIO 4. Suponga que se extraen números aleatorios entre 1 y 100. Realice un script que simule extracciones hasta queaparezca un número mayor a 90, exactamente 3 veces. Debe mostrar el historial de numeros extraídos.
extraccion=0
numero_mayor_90=0
historial=c()
while(numero_mayor_90<3){
numero=sample(1:100,1)
extraccion=extraccion+1
historial=c(historial,numero)
if(numero>90){
numero_mayor_90=numero_mayor_90+1
}
}
print(historial)
## [1] 57 49 46 68 24 20 90 77 11 51 41 27 16 86 48 82 17 81 25 38 56 48 4 24 5
## [26] 98 29 69 80 41 54 24 87 15 52 12 85 3 44 8 8 23 8 2 98 26 13 16 49 47
## [51] 68 14 59 12 84 96
print(paste("El total de extracciones fue:",extraccion))
## [1] "El total de extracciones fue: 56"
EJERCICIO 5. Escriba una función (llámela r i c) que imprima el rango intercuartílico de una variable aleatoria con distribución beta de longitud 40 y parámetro beta igual a 5. Debe calcular el rango intercuartílico desde su definición, sin usar la función quantile dentro del cuerpo de la función. Dentro de la función, debe utilizar paste en su programa.
El rango intercuartílico se define como la diferencia entre el tercer cuartil (Q3) y el primer cuartil (Q1), es decir: RQ = Q3 - Q1. Por tanto, acontinuación vamos se desarrollo un codigo que facilita dicho cálculo:
set.seed(2025)
RIC=function(){
x=rbeta(40,shape1 = 0.5, shape2 = 5)
sort(x)
Q1=x[round(0.25*length(x))]
Q3=x[round(0.75*length(x))]
ric=Q3-Q1
print(paste("El Rango Intercualitico es:",ric))
}
RIC()
## [1] "El Rango Intercualitico es: 0.011084552014541"
En el enunciado del ejercicio, se entrega el parametro de beta solamente, por lo que se asume ALPHA como 0.5 y se planto la misma semilla que se especifico para el primer ejercicio del presente parcial para el desarrollo de este ejercicio.
EJERCICIO 6. El conjunto de datos llamado germination, que se encuentra en la carpeta de datos de Teams, se refiere a la germinación de semillas de dos genotipos de la planta parásita Orobanche (a75 = hiedra y a73 = trébol) y dos extractos de plantas residentes (frijol y pepino) que se utilizaron para estimular la germinación. La variable conteo es el número de semillas que germinaron de un lote muestral.
A) Cargue los datos germination y muestre las 3 primeras filas
setwd("C:/Users/Angelica Elena/Documents/GitHub/Estadistica-Computacional/Parcial")
datos=read.delim("germinacion.txt",sep="",stringsAsFactors = FALSE)
str(datos)
## 'data.frame': 21 obs. of 4 variables:
## $ conteo : int 10 23 23 26 17 5 53 55 32 46 ...
## $ muestra : int 39 62 81 51 39 6 74 72 51 79 ...
## $ orobanche: chr "a75" "a75" "a75" "a75" ...
## $ extracto : chr "frijol" "frijol" "frijol" "frijol" ...
summary(datos)
## conteo muestra orobanche extracto
## Min. : 0.00 Min. : 4.00 Length:21 Length:21
## 1st Qu.: 8.00 1st Qu.:16.00 Class :character Class :character
## Median :17.00 Median :39.00 Mode :character Mode :character
## Mean :20.19 Mean :39.57
## 3rd Qu.:26.00 3rd Qu.:51.00
## Max. :55.00 Max. :81.00
head(datos,3)
## conteo muestra orobanche extracto
## 1 10 39 a75 frijol
## 2 23 62 a75 frijol
## 3 23 81 a75 frijol
print(datos)
## conteo muestra orobanche extracto
## 1 10 39 a75 frijol
## 2 23 62 a75 frijol
## 3 23 81 a75 frijol
## 4 26 51 a75 frijol
## 5 17 39 a75 frijol
## 6 5 6 a75 pepino
## 7 53 74 a75 pepino
## 8 55 72 a75 pepino
## 9 32 51 a75 pepino
## 10 46 79 a75 pepino
## 11 10 13 a75 pepino
## 12 8 16 a73 frijol
## 13 10 30 a73 frijol
## 14 8 28 a73 frijol
## 15 23 45 a73 frijol
## 16 0 4 a73 frijol
## 17 3 12 a73 pepino
## 18 22 41 a73 pepino
## 19 15 30 a73 pepino
## 20 32 51 a73 pepino
## 21 3 7 a73 pepino
B) Cambie el nombre codificado de los dos genotipos de la planta al nombre comÚn de éstas. Use dplyrs
library(dplyr)
datos =datos%>%
mutate(orobanche = if_else(orobanche == "a73", "Trebol", "Hiedra"))
print(datos)
## conteo muestra orobanche extracto
## 1 10 39 Hiedra frijol
## 2 23 62 Hiedra frijol
## 3 23 81 Hiedra frijol
## 4 26 51 Hiedra frijol
## 5 17 39 Hiedra frijol
## 6 5 6 Hiedra pepino
## 7 53 74 Hiedra pepino
## 8 55 72 Hiedra pepino
## 9 32 51 Hiedra pepino
## 10 46 79 Hiedra pepino
## 11 10 13 Hiedra pepino
## 12 8 16 Trebol frijol
## 13 10 30 Trebol frijol
## 14 8 28 Trebol frijol
## 15 23 45 Trebol frijol
## 16 0 4 Trebol frijol
## 17 3 12 Trebol pepino
## 18 22 41 Trebol pepino
## 19 15 30 Trebol pepino
## 20 32 51 Trebol pepino
## 21 3 7 Trebol pepino
C) Extraiga todas las observaciones en las que el número de semillas que germinaron sea distinto de 10 y muestre las 5 muestras más grandes
datos_obs=datos %>%
filter(conteo!=10) %>%
arrange(desc(conteo))
head(datos_obs,5)
## conteo muestra orobanche extracto
## 1 55 72 Hiedra pepino
## 2 53 74 Hiedra pepino
## 3 46 79 Hiedra pepino
## 4 32 51 Hiedra pepino
## 5 32 51 Trebol pepino
D) Hay diversos fungicidas biológicos que controlan la aparición de estas plantas parásitas con el fin de que no se pierdan las cosechas. Se muestran seis de ellas en la siguiente tabla:
orobanche = c(“a70”, “a71”, “a72”, “hiedra”, “a74”, “trebol”, “a76”) fungicida = c(“Ecoticid-K1”, “Ecoticid-K2”, “Ecoticid-K3”, “Ecoticid-K0”,“Ecoticid-K4”,“Ecoticid-K9”, “Ecoticid-K8”) tratamiento = data.frame(orobanche, fungicida)
A partir de lo anterior, cree una nueva tabla llamada control en donde se extraigan los fungicidas relevantes de la tabla de datos tratamiento para el control de la planta par´asita de la tabla de datos original. Use left join.
orobanche=c("a70", "a71", "a72", "Hiedra", "a74", "Trebol", "a76")
fungicida=c("Ecoticid-K1", "Ecoticid-K2", "Ecoticid-K3", "Ecoticid-K0", "Ecoticid-K4", "Ecoticid-K9", "Ecoticid-K8")
tratamiento=data.frame(orobanche, fungicida, stringsAsFactors = FALSE)
if ("fungicida" %in% names(datos)) {
datos=datos %>% select(-fungicida)##Esto lo hago porque me estaba colocando otra columna de fungicida adicional a la que la estaba ya por defecto tal parece en la tabla.
}
control=datos %>%
left_join(tratamiento, by = "orobanche")
print(control)
## conteo muestra orobanche extracto fungicida
## 1 10 39 Hiedra frijol Ecoticid-K0
## 2 23 62 Hiedra frijol Ecoticid-K0
## 3 23 81 Hiedra frijol Ecoticid-K0
## 4 26 51 Hiedra frijol Ecoticid-K0
## 5 17 39 Hiedra frijol Ecoticid-K0
## 6 5 6 Hiedra pepino Ecoticid-K0
## 7 53 74 Hiedra pepino Ecoticid-K0
## 8 55 72 Hiedra pepino Ecoticid-K0
## 9 32 51 Hiedra pepino Ecoticid-K0
## 10 46 79 Hiedra pepino Ecoticid-K0
## 11 10 13 Hiedra pepino Ecoticid-K0
## 12 8 16 Trebol frijol Ecoticid-K9
## 13 10 30 Trebol frijol Ecoticid-K9
## 14 8 28 Trebol frijol Ecoticid-K9
## 15 23 45 Trebol frijol Ecoticid-K9
## 16 0 4 Trebol frijol Ecoticid-K9
## 17 3 12 Trebol pepino Ecoticid-K9
## 18 22 41 Trebol pepino Ecoticid-K9
## 19 15 30 Trebol pepino Ecoticid-K9
## 20 32 51 Trebol pepino Ecoticid-K9
## 21 3 7 Trebol pepino Ecoticid-K9
E) De los datos del ítem anterior, según cada fungicida, ¿cuantas semillas germinaron?:
Conteo_Semillas=control %>%
group_by(fungicida) %>%
summarise(semillas_germinadas= sum(conteo, na.rm = TRUE)) %>%
arrange(desc(semillas_germinadas))
print(Conteo_Semillas)
## # A tibble: 2 × 2
## fungicida semillas_germinadas
## <chr> <int>
## 1 Ecoticid-K0 300
## 2 Ecoticid-K9 124
La tabla muestra el número total de semillas germinadas según el tipo de fungicida utilizado. Se observa que Ecoticid-K0 tuvo la mayor cantidad de semillas germinadas (300), mientras que Ecoticid-K9 presentó un menor número (124). Esto sugiere que Ecoticid-K0 podría ser más efectivo en favorecer la germinación de semillas o que las condiciones en las que se aplicó posiblemente fueron más favorables.