Ejercicio
Rendimiento en toneladas teniendo como único factor la materia
orgánica del suelo
set.seed(123)
data = expand.grid(x=1:10, y=1:10)
data$rto = rnorm(100, 3, 0.3)
data$rto = sort(data$rto) + runif(100, 0 ,0.1)
data$mo = rnorm(100, 2.5, 0.1)
data$mo = sort(data$mo) + runif (100, 0 , 0.1)
library(ggplot2)
library(gridExtra)
Warning: package ‘gridExtra’ was built under R version 4.2.3
g1 = ggplot(data)+
aes(x,y, fill=rto)+
geom_tile()
g2 = ggplot(data)+
aes(x,y, fill=mo)+
geom_tile()
gridExtra::grid.arrange(g1, g2, nrow=1)

ANALISIS DE REGRESIÓN LINEAL SIMPLE
Scatter o diagrama de puntos para familiarizarse con el ejercicio
(nube de puntos)
plot(x = data$mo, y = data$rto, pch = 16)

Buscar la ecuación de una recta que sea lo más parecida posible a los
datos representados en la nube de puntos (menores distancias
posibles)
La recta no representa un modelo matemático. El experimento tiene un
error intrinseco (el matematico es exacto), por eso se dice que hace
referencia a un modelo estadístico.
Modelo objetivo:
\[\hat{y} = \beta_0 + \beta_1x + \epsilon
\\\]
\[Y = a + bx + \epsilon_i \\
Y = rendimiento \\
a = i\\
b = p \\
x = H_0 \\
\epsilon_i = error\]
Encontrar el epsilon menor posible. Para ello vamos a realizar los
Mínimos cuadrados, con el objetivo de hallar los valores de la
ecuación de la recta.
mod1 = lm(rto ~ mo, data)
summary(mod1)
Call:
lm(formula = rto ~ mo, data = data)
Residuals:
Min 1Q Median 3Q Max
-0.34934 -0.05963 -0.00802 0.06565 0.21694
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.47622 0.24748 -14.05 <2e-16 ***
mo 2.56595 0.09685 26.49 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.09624 on 98 degrees of freedom
Multiple R-squared: 0.8775, Adjusted R-squared: 0.8762
F-statistic: 702 on 1 and 98 DF, p-value: < 2.2e-16
plot(data$mo, data$rto, pch=16)
abline(mod1, col='green', lwd=3)

Interpretación de los resultados de summary (mod1)
Intercept estimado \(a\) = -3.47
pendiente \(b\) = 2.56
La pendiente se puede interpretar en este caso como la proporción de
aumento del rendimiento por cada punto de aumento de la materia orgánica
en el suelo; por cada aumento en 1 de la materia orgánica el rendimiento
debería aumentar en 2.57 Toneladas.
\[\widehat{RTO} = -3.48 + 2.57*MO\]
Pvalor Pr(>|t|) de mo
En la pendiente (intercept mo) es relevante el valor del p valor
<2e-16
Como la pendiente es 2.57 < 0.05 se rechaza la hipótesis nula que
dice que la pendiente es 0.
Multiple R-squared: 0.8775, Adjusted R-squared: 0.8762
El 87.62% es que tan real es la relación entre la línea recta
planteada y los datos.
70% > es un buen modelo.
Revisión de supuestos
# 1) Normalidad de residuos
#Shapiro Test
#Se espera que los residuos tengan comportamiento normal
shapiro.test(mod1$residuals)
Shapiro-Wilk normality test
data: mod1$residuals
W = 0.98357, p-value = 0.2495
#Homosedasticidad u homogeneidad de las varianzas
plot(mod1$residuals, pch=16)

ANALISIS DE COVARIANZA
set.seed(123)
data = expand.grid(x=1:10, y=1:10)
data$rto = rnorm(100, 3, 0.3)
data$rto = sort(data$rto) + runif(100, 0 ,0.1)
data$mo = rnorm(100, 2.5, 0.1)
data$mo = sort(data$mo) + runif (100, 0 , 0.1)
# 4 Tratamientos 4 tipos de preparación para la semilla
data$trt = gl(4, 25, 100,
c('s0','sf','si','sfi'))
data
MODELO QUE SE ESPERARÍA
\[y_{ij} = \mu + \tau_i + \epsilon_{ij} \\
y_{ij} = \text{rendimiento} \\
\mu = \text{media global} \\
\tau_i = \text{tratamientos} \\
\epsilon_{ij} = \text{error}\]
MODELO REAL
\[y_{ij} = \mu + \tau_i + \theta(x_{ij} -
\bar{x}) + \epsilon_{ij}\] Aparición de la covariable MO, efectos
de la materia orgánica sobre el rendimiento, a pesar de estar estudiando
los tratamientos.
HIPÓTESIS
\[H_0 : \mu_{s0} = \mu_{sf} = \mu_{si} =
\mu_{sfi} \]
#rendimiento como funcion de la covariable
mod2 = aov(rto ~ mo + trt, data)
summary(mod2)
Df Sum Sq Mean Sq F value Pr(>F)
mo 1 6.502 6.502 989.51 < 2e-16 ***
trt 3 0.283 0.094 14.38 8.45e-08 ***
Residuals 95 0.624 0.007
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
boxplot(rto ~ trt, data)

P VALOR MO = 2e-16 2e-16 < 0.05 Por lo tanto se rechaza
la hipótesis nula, estadisticamente hay evidencia para determinar que la
materia orgánica tiene efecto positivo sobre el rendimiento obtenido en
cada una de las parcelas
P VALOR DE LOS TRATAMIENTOS trt 8.45e-08 < 0.05 Por lo
tanto se rechaza la hipótesis nula, hay evidencia estadistica para
determinar que los tratamientos generan efecto sobre el rendimiento.
REVISIÓN DE SUPUESTOS
#Normalidad
#Shapiro Test
shapiro.test(mod2$residuals)
Shapiro-Wilk normality test
data: mod2$residuals
W = 0.96113, p-value = 0.004843
hist(mod2$residuals)

REVISIÓN DE UN POSIBLE DATO ATÍPICO
boxplot(mod2$residuals)

which.min(data$rto)
[1] 1
minimo = data[which.min(data$rto),]
minimo
NA
library(outliers)
#Prueba de Grubbs para determinar si un dato es atípico
grubbs.test(mod2$residuals)
Grubbs test for one outlier
data: mod2$residuals
G.1 = 4.36012, U = 0.80603, p-value = 0.0002265
alternative hypothesis: lowest value -0.346216964518421 is an outlier
La prueba nos permite confirmar que ese dato es atípico.
CAMINOS REMEDIALES PARA TRATAR EL DATO ATÍPICO
- Imputar
- Eliminar
- Repetir el experimento para esa parcela
#Media de cada tratamiento
med_trt = tapply(data$rto, data$trt, mean)
med_trt
s0 sf si sfi
2.740161 2.979286 3.155851 3.427611
#IMPUTAR
#Sustituir el valor anormal por la media de su grupo
data2 = data
data2$rto[1] = med_trt['s0']
head(data2)
NA
boxplot(rto~ trt, data2)

mod3 = aov(rto ~ mo + trt, data2)
summary(mod3)
Df Sum Sq Mean Sq F value Pr(>F)
mo 1 6.182 6.182 1174.12 < 2e-16 ***
trt 3 0.283 0.094 17.93 2.65e-09 ***
Residuals 95 0.500 0.005
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
NORMALIDAD DE LOS RESIDUALES PARA EL MODELO CON EL DATO
IMPUTADO
#Normalidad con dato imputado
# Test de Shapiro
shapiro.test(mod3$residuals)
Shapiro-Wilk normality test
data: mod3$residuals
W = 0.98906, p-value = 0.5891
LS0tDQp0aXRsZTogIkRFIG1hcnRlcyAwMiBkZSBtYXlvIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQphdXRob3I6ICJBbmRyw6lzIEZlbGlwZSBIaW5jYXBpw6kgQ2FzdGHDsWVkYSINCkNsYXNzOiAiQW5hbGlzaXMgZGUgUmVncmVzacOzbiBMaW5lYWwgU2ltcGxlIHkgQW5hbGlzaXMgZGUgQ292YXJpYW56YSINCi0tLQ0KDQoNCg0KIyAqRWplcmNpY2lvKg0KUmVuZGltaWVudG8gZW4gdG9uZWxhZGFzIHRlbmllbmRvIGNvbW8gw7puaWNvIGZhY3RvciBsYSBtYXRlcmlhIG9yZ8OhbmljYSBkZWwgc3VlbG8gDQoNCmBgYHtyfQ0Kc2V0LnNlZWQoMTIzKQ0KZGF0YSA9IGV4cGFuZC5ncmlkKHg9MToxMCwgeT0xOjEwKQ0KZGF0YSRydG8gPSBybm9ybSgxMDAsIDMsIDAuMykNCmRhdGEkcnRvID0gc29ydChkYXRhJHJ0bykgKyBydW5pZigxMDAsIDAgLDAuMSkNCmRhdGEkbW8gPSBybm9ybSgxMDAsIDIuNSwgMC4xKQ0KZGF0YSRtbyA9IHNvcnQoZGF0YSRtbykgKyBydW5pZiAoMTAwLCAwICwgMC4xKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShncmlkRXh0cmEpDQpgYGANCmBgYHtyfQ0KZzEgPSBnZ3Bsb3QoZGF0YSkrDQogIGFlcyh4LHksIGZpbGw9cnRvKSsNCiAgZ2VvbV90aWxlKCkNCg0KZzIgPSBnZ3Bsb3QoZGF0YSkrDQogIGFlcyh4LHksIGZpbGw9bW8pKw0KICBnZW9tX3RpbGUoKQ0KDQpncmlkRXh0cmE6OmdyaWQuYXJyYW5nZShnMSwgZzIsIG5yb3c9MSkNCmBgYA0KDQojIEFOQUxJU0lTIERFIFJFR1JFU0nDk04gTElORUFMIFNJTVBMRQ0KDQpTY2F0dGVyIG8gZGlhZ3JhbWEgZGUgcHVudG9zIHBhcmEgZmFtaWxpYXJpemFyc2UgY29uIGVsIGVqZXJjaWNpbyAobnViZSBkZSBwdW50b3MpDQoNCmBgYHtyfQ0KcGxvdCh4ID0gZGF0YSRtbywgeSA9IGRhdGEkcnRvLCBwY2ggPSAxNikNCmBgYA0KDQpCdXNjYXIgbGEgZWN1YWNpw7NuIGRlIHVuYSByZWN0YSBxdWUgc2VhIGxvIG3DoXMgcGFyZWNpZGEgcG9zaWJsZSBhIGxvcyBkYXRvcyByZXByZXNlbnRhZG9zIGVuIGxhIG51YmUgZGUgcHVudG9zIChtZW5vcmVzIGRpc3RhbmNpYXMgcG9zaWJsZXMpDQoNCkxhIHJlY3RhIG5vIHJlcHJlc2VudGEgdW4gbW9kZWxvIG1hdGVtw6F0aWNvLiBFbCBleHBlcmltZW50byB0aWVuZSB1biBlcnJvciBpbnRyaW5zZWNvIChlbCBtYXRlbWF0aWNvIGVzIGV4YWN0byksIHBvciBlc28gc2UgZGljZSBxdWUgaGFjZSByZWZlcmVuY2lhIGEgdW4gbW9kZWxvIGVzdGFkw61zdGljby4NCg0KDQojIE1vZGVsbyBvYmpldGl2bzoNCg0KJCRcaGF0e3l9ID0gXGJldGFfMCArIFxiZXRhXzF4ICsgXGVwc2lsb24gXFwkJA0KDQokJFkgPSBhICsgYnggKyBcZXBzaWxvbl9pIFxcDQpZID0gcmVuZGltaWVudG8gXFwNCmEgPSBpXFwNCmIgPSBwIFxcDQp4ID0gSF8wIFxcDQpcZXBzaWxvbl9pID0gZXJyb3IkJA0KDQoNCg0KRW5jb250cmFyIGVsIGVwc2lsb24gbWVub3IgcG9zaWJsZS4NClBhcmEgZWxsbyB2YW1vcyBhIHJlYWxpemFyIGxvcyAqTcOtbmltb3MgY3VhZHJhZG9zKiwgY29uIGVsIG9iamV0aXZvIGRlIGhhbGxhciBsb3MgdmFsb3JlcyBkZSBsYSBlY3VhY2nDs24gZGUgbGEgcmVjdGEuDQoNCg0KDQpgYGB7cn0NCm1vZDEgPSBsbShydG8gfiBtbywgZGF0YSkNCnN1bW1hcnkobW9kMSkNCg0KYGBgDQpgYGB7cn0NCnBsb3QoZGF0YSRtbywgZGF0YSRydG8sIHBjaD0xNikNCmFibGluZShtb2QxLCBjb2w9J2dyZWVuJywgbHdkPTMpDQpgYGANCg0KIyBJbnRlcnByZXRhY2nDs24gZGUgbG9zIHJlc3VsdGFkb3MgZGUgc3VtbWFyeSAobW9kMSkNCg0KSW50ZXJjZXB0IGVzdGltYWRvICRhJCA9IC0zLjQ3DQoNCnBlbmRpZW50ZSAkYiQgPSAyLjU2DQoNCg0KTGEgcGVuZGllbnRlIHNlIHB1ZWRlIGludGVycHJldGFyIGVuIGVzdGUgY2FzbyBjb21vIGxhIHByb3BvcmNpw7NuIGRlIGF1bWVudG8gZGVsIHJlbmRpbWllbnRvIHBvciBjYWRhIHB1bnRvIGRlIGF1bWVudG8gZGUgbGEgbWF0ZXJpYSBvcmfDoW5pY2EgZW4gZWwgc3VlbG87IHBvciBjYWRhIGF1bWVudG8gZW4gMSBkZSBsYSBtYXRlcmlhIG9yZ8OhbmljYSBlbCByZW5kaW1pZW50byBkZWJlcsOtYSBhdW1lbnRhciBlbiAyLjU3IFRvbmVsYWRhcy4NCg0KJCRcd2lkZWhhdHtSVE99ID0gLTMuNDggKyAyLjU3Kk1PJCQNCipQdmFsb3IgUHIoPnx0fCkgZGUgbW8qDQoNCkVuIGxhIHBlbmRpZW50ZSAoaW50ZXJjZXB0IG1vKSBlcyByZWxldmFudGUgZWwgdmFsb3IgZGVsIHAgdmFsb3IgKjwyZS0xNiogDQoNCkNvbW8gbGEgcGVuZGllbnRlIGVzIDIuNTcgPCAwLjA1IHNlIHJlY2hhemEgbGEgaGlww7N0ZXNpcyBudWxhIHF1ZSBkaWNlIHF1ZSBsYSBwZW5kaWVudGUgZXMgMC4NCg0KKk11bHRpcGxlIFItc3F1YXJlZDogIDAuODc3NSwJQWRqdXN0ZWQgUi1zcXVhcmVkOiAgMC44NzYyKg0KDQpFbCA4Ny42MiUgZXMgcXVlIHRhbiByZWFsIGVzIGxhIHJlbGFjacOzbiBlbnRyZSBsYSBsw61uZWEgcmVjdGEgcGxhbnRlYWRhIHkgbG9zIGRhdG9zLiANCg0KKjcwJSA+IGVzIHVuIGJ1ZW4gbW9kZWxvLiogDQoNCiMgUmV2aXNpw7NuIGRlIHN1cHVlc3Rvcw0KYGBge3J9DQojIDEpIE5vcm1hbGlkYWQgZGUgcmVzaWR1b3MNCiNTaGFwaXJvIFRlc3QNCiNTZSBlc3BlcmEgcXVlIGxvcyByZXNpZHVvcyB0ZW5nYW4gY29tcG9ydGFtaWVudG8gbm9ybWFsDQpzaGFwaXJvLnRlc3QobW9kMSRyZXNpZHVhbHMpDQpgYGANCmBgYHtyfQ0KI0hvbW9zZWRhc3RpY2lkYWQgdSBob21vZ2VuZWlkYWQgZGUgbGFzIHZhcmlhbnphcw0KcGxvdChtb2QxJHJlc2lkdWFscywgcGNoPTE2KQ0KYGBgDQoNCiMgQU5BTElTSVMgREUgQ09WQVJJQU5aQQ0KDQpgYGB7cn0NCnNldC5zZWVkKDEyMykNCmRhdGEgPSBleHBhbmQuZ3JpZCh4PTE6MTAsIHk9MToxMCkNCmRhdGEkcnRvID0gcm5vcm0oMTAwLCAzLCAwLjMpDQpkYXRhJHJ0byA9IHNvcnQoZGF0YSRydG8pICsgcnVuaWYoMTAwLCAwICwwLjEpDQpkYXRhJG1vID0gcm5vcm0oMTAwLCAyLjUsIDAuMSkNCmRhdGEkbW8gPSBzb3J0KGRhdGEkbW8pICsgcnVuaWYgKDEwMCwgMCAsIDAuMSkNCg0KDQojIDQgVHJhdGFtaWVudG9zIDQgdGlwb3MgZGUgcHJlcGFyYWNpw7NuIHBhcmEgbGEgc2VtaWxsYQ0KDQpkYXRhJHRydCA9IGdsKDQsIDI1LCAxMDAsIA0KICAgICAgICAgICAgICBjKCdzMCcsJ3NmJywnc2knLCdzZmknKSkNCmRhdGENCmBgYA0KDQpNT0RFTE8gUVVFIFNFIEVTUEVSQVLDjUENCg0KJCR5X3tpan0gPSBcbXUgKyBcdGF1X2kgKyBcZXBzaWxvbl97aWp9IFxcDQp5X3tpan0gPSBcdGV4dHtyZW5kaW1pZW50b30gXFwNClxtdSA9IFx0ZXh0e21lZGlhIGdsb2JhbH0gXFwNClx0YXVfaSA9IFx0ZXh0e3RyYXRhbWllbnRvc30gXFwNClxlcHNpbG9uX3tpan0gPSBcdGV4dHtlcnJvcn0kJA0KDQojIE1PREVMTyBSRUFMDQoNCiQkeV97aWp9ID0gXG11ICsgXHRhdV9pICsgXHRoZXRhKHhfe2lqfSAtIFxiYXJ7eH0pICsgXGVwc2lsb25fe2lqfSQkDQpBcGFyaWNpw7NuIGRlIGxhIGNvdmFyaWFibGUgTU8sIGVmZWN0b3MgZGUgbGEgbWF0ZXJpYSBvcmfDoW5pY2Egc29icmUgZWwgcmVuZGltaWVudG8sIGEgcGVzYXIgZGUgZXN0YXIgZXN0dWRpYW5kbyBsb3MgdHJhdGFtaWVudG9zLg0KDQoNCkhJUMOTVEVTSVMNCg0KJCRIXzAgOiBcbXVfe3MwfSA9IFxtdV97c2Z9ID0gXG11X3tzaX0gPSBcbXVfe3NmaX0gJCQNCg0KYGBge3J9DQojcmVuZGltaWVudG8gY29tbyBmdW5jaW9uIGRlIGxhIGNvdmFyaWFibGUNCm1vZDIgPSBhb3YocnRvIH4gbW8gKyB0cnQsIGRhdGEpDQpzdW1tYXJ5KG1vZDIpDQpgYGANCmBgYHtyfQ0KYm94cGxvdChydG8gfiB0cnQsIGRhdGEpDQpgYGANCg0KKlAgVkFMT1IgTU8gPSAyZS0xNioNCjJlLTE2IDwgMC4wNSBQb3IgbG8gdGFudG8gc2UgcmVjaGF6YSBsYSBoaXDDs3Rlc2lzIG51bGEsIGVzdGFkaXN0aWNhbWVudGUgaGF5IGV2aWRlbmNpYSBwYXJhIGRldGVybWluYXIgcXVlIGxhIG1hdGVyaWEgb3Jnw6FuaWNhIHRpZW5lIGVmZWN0byBwb3NpdGl2byBzb2JyZSBlbCByZW5kaW1pZW50byBvYnRlbmlkbyBlbiBjYWRhIHVuYSBkZSBsYXMgcGFyY2VsYXMNCg0KKlAgVkFMT1IgREUgTE9TIFRSQVRBTUlFTlRPUyB0cnQqDQo4LjQ1ZS0wOCA8IDAuMDUgUG9yIGxvIHRhbnRvIHNlIHJlY2hhemEgbGEgaGlww7N0ZXNpcyBudWxhLCBoYXkgZXZpZGVuY2lhIGVzdGFkaXN0aWNhIHBhcmEgZGV0ZXJtaW5hciBxdWUgbG9zIHRyYXRhbWllbnRvcyBnZW5lcmFuIGVmZWN0byBzb2JyZSBlbCByZW5kaW1pZW50by4NCg0KIyBSRVZJU0nDk04gREUgU1VQVUVTVE9TDQoNCmBgYHtyfQ0KI05vcm1hbGlkYWQNCiNTaGFwaXJvIFRlc3QNCnNoYXBpcm8udGVzdChtb2QyJHJlc2lkdWFscykNCmBgYA0KYGBge3J9DQpoaXN0KG1vZDIkcmVzaWR1YWxzKQ0KYGBgDQojIFJFVklTScOTTiBERSBVTiBQT1NJQkxFIERBVE8gQVTDjVBJQ08NCg0KYGBge3J9DQpib3hwbG90KG1vZDIkcmVzaWR1YWxzKQ0KYGBgDQoNCmBgYHtyfQ0Kd2hpY2gubWluKGRhdGEkcnRvKQ0KbWluaW1vID0gZGF0YVt3aGljaC5taW4oZGF0YSRydG8pLF0NCm1pbmltbw0KDQpgYGANCmBgYHtyfQ0KbGlicmFyeShvdXRsaWVycykNCmBgYA0KYGBge3J9DQojUHJ1ZWJhIGRlIEdydWJicyBwYXJhIGRldGVybWluYXIgc2kgdW4gZGF0byBlcyBhdMOtcGljbw0KZ3J1YmJzLnRlc3QobW9kMiRyZXNpZHVhbHMpDQpgYGANCkxhIHBydWViYSBub3MgcGVybWl0ZSBjb25maXJtYXIgcXVlIGVzZSBkYXRvIGVzIGF0w61waWNvLg0KDQoqQ0FNSU5PUyBSRU1FRElBTEVTIFBBUkEgVFJBVEFSIEVMIERBVE8gQVTDjVBJQ08qDQoNCjEuIEltcHV0YXINCjIuIEVsaW1pbmFyDQozLiBSZXBldGlyIGVsIGV4cGVyaW1lbnRvIHBhcmEgZXNhIHBhcmNlbGENCg0KYGBge3J9DQojTWVkaWEgZGUgY2FkYSB0cmF0YW1pZW50bw0KbWVkX3RydCA9IHRhcHBseShkYXRhJHJ0bywgZGF0YSR0cnQsIG1lYW4pDQptZWRfdHJ0DQoNCmBgYA0KYGBge3J9DQojSU1QVVRBUg0KI1N1c3RpdHVpciBlbCB2YWxvciBhbm9ybWFsIHBvciBsYSBtZWRpYSBkZSBzdSBncnVwbw0KDQpkYXRhMiA9IGRhdGENCmRhdGEyJHJ0b1sxXSA9IG1lZF90cnRbJ3MwJ10NCmhlYWQoZGF0YTIpDQoNCmBgYA0KYGBge3J9DQpib3hwbG90KHJ0b34gdHJ0LCBkYXRhMikNCg0KYGBgDQoNCmBgYHtyfQ0KbW9kMyA9IGFvdihydG8gfiBtbyArIHRydCwgZGF0YTIpDQpzdW1tYXJ5KG1vZDMpDQpgYGANCiMgTk9STUFMSURBRCBERSBMT1MgUkVTSURVQUxFUyBQQVJBIEVMIE1PREVMTyBDT04gRUwgREFUTyBJTVBVVEFETw0KDQpgYGB7cn0NCiNOb3JtYWxpZGFkIGNvbiBkYXRvIGltcHV0YWRvDQojIFRlc3QgZGUgU2hhcGlybw0Kc2hhcGlyby50ZXN0KG1vZDMkcmVzaWR1YWxzKQ0KYGBgDQoNCg0K