library(tidyverse)
library(rstatix)
library(flextable)
library(agricolae)Aplicación de Programas Informáticos 2026
Análsisi de Correlación y Regresión Simple Lineal
Caso de estudio
Una estrategia para el control de plagas en frutales es el uso de la confusión sexual, que libera feromonas en el cultivo. Se trata de un método específico capaz de reducir efectivamente las poblaciones de insectos sin riesgos de toxicidad para el hombre y los ecosistemas. Con el objetivo de evaluar su efectividad para nuestras condiciones ambientales y sistemas de producción se desea determinar la influencia de la temperatura en la cantidad de feromonas liberadas por difusores en un monte duraznero.
Datos
library(readxl)
feromona <- read_excel("feromona.xlsx")Análisis exploratorio
1.Identificar las dos variables (X,Y) que intervienen en el estudio bivariado.
Variable 1: Temperatura media
Variable 2: Dosis media de feromona liberada
2.Realizar una representación gráfica de los datos (diagrama de dispersión).
ggplot(data = feromona) +
geom_point(mapping = aes(x = T_media, y = Dosis))+
labs(x ="Temperatura media °C", y="Dosis media de feromona liberada por difusor ")+
theme_light()3.Describir numéricamente cada una de las variables
res<- feromona %>%
get_summary_stats(
T_media, Dosis,
show = c("mean", "sd", "min", "max")
)
flextable(res)variable | n | mean | sd | min | max |
|---|---|---|---|---|---|
T_media | 22 | 21.554 | 3.354 | 16.020 | 26.970 |
Dosis | 22 | 0.013 | 0.005 | 0.007 | 0.025 |
Análisis de la correlación
Coeficiente de correlación simple lineal
Para el cálculo del coeficiente de correlación simple lineal muestral, se utilizan los comandos base de R:
r1=cor(feromona$T_media, feromona$Dosis)
r1[1] 0.6421292
La función cor() tiene varios argumentos, entre ellos el método para el cálculo del coeficiente de CSL muestral que por defecto utiliza Pearson. Recordar que siempre puede utilizarse la ayuda para cada función, librería o paquete.
Al interpretar el valor de \(r_1\) podemos decir que exite una correlación simple lineal …. entre el …. y ……✏️
Prueba para el coeficiente de CSL
Hipótesis científica: “Existe correlación simple lineal entre Temperatura media (°C) y la dosis de feromona aplicada”
\(H_0 : \rho =0\)
\(H_1 : \rho \neq 0\)
\(\alpha = 0,05\)
Con la prueba de hipótesis para el Coeficiente de Correlación Simple Lineal \(\rho\) también sale el cálculo de la estimación:
r1_test = cor.test(feromona$T_media, feromona$Dosis)
r1_test
Pearson's product-moment correlation
data: feromona$T_media and feromona$Dosis
t = 3.746, df = 20, p-value = 0.001273
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.3023844 0.8371094
sample estimates:
cor
0.6421292
Por lo obtenido, se rechaza la hipótesis nula bajo un \(\alpha = 0,05\). Existe evidencia muestral suficiente para decir que existe asociación entre …..✏️
Análisis de Regresión simple lineal
Tenemos evidencia que puede existir una relación funcional entre las variables en estudio. Por ello se plantea el modelo:
\[Y_i = 𝛽_0 + 𝛽_1 x_i + 𝜀_i\]
\[i=1,...,n\] Para la estimación de los parámetros y las pruebas de hipótesis correspondientes, se utiliza:
# modelo = Y ~ X
modelo1 = lm(Dosis ~ T_media,
data=feromona)
modelo1
Call:
lm(formula = Dosis ~ T_media, data = feromona)
Coefficients:
(Intercept) T_media
-0.0052514 0.0008679
En la salida principal del modelo tenemos las estimaciones de los parámetros. Con ellos podemos graficar la recta que ajusta a los datos:
ggplot(feromona) +
aes(x = T_media, y = Dosis) +
geom_smooth(method="lm", se=FALSE, color="#4A4C4F")+
geom_point(colour = "#0C4C8A") +
labs(
x = "Temperatura media °C",
y = "Dosis media de feromona liberada por difusor "
) +
theme_light()Para las pruebas debemos llamar a los diferentes elementos que se generaron con la función lm() en el objeto lista “modelo1”.
names(modelo1) [1] "coefficients" "residuals" "effects" "rank"
[5] "fitted.values" "assign" "qr" "df.residual"
[9] "xlevels" "call" "terms" "model"
Para realizar la inferencia de los coeficientes:
summary(modelo1)
Call:
lm(formula = Dosis ~ T_media, data = feromona)
Residuals:
Min 1Q Median 3Q Max
-0.0059303 -0.0022763 0.0002058 0.0020585 0.0081383
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.0052514 0.0050509 -1.040 0.31089
T_media 0.0008679 0.0002317 3.746 0.00127 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.003561 on 20 degrees of freedom
Multiple R-squared: 0.4123, Adjusted R-squared: 0.3829
F-statistic: 14.03 on 1 and 20 DF, p-value: 0.001273
Para la del modelo, es decir teniendo en cuenta la partición de la variabilidad del modelo:
anova(modelo1)Analysis of Variance Table
Response: Dosis
Df Sum Sq Mean Sq F value Pr(>F)
T_media 1 0.00017790 1.7790e-04 14.033 0.001273 **
Residuals 20 0.00025355 1.2678e-05
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Supuestos
Independencia entre observaciones.
Homocedasticidad.
Normalidad de residuos.
Q-Q Plot
Este gráfico muestra cómo se acumulan los residuos respecto de los cuantiles teóricos de una distribución normal. Si la distribución de residuos es normal, los veremos cercanos a la recta. Desviaciones de la recta indican que la distribución de los residuos no es normal.
ggplot(modelo1, aes(sample = modelo1$residuals))+
stat_qq()+
stat_qq_line()+
xlab("Cuartiles normales")+
ylab("Cuartiles residuos")Warning: `fortify(<lm>)` was deprecated in ggplot2 4.0.0.
ℹ Please use `broom::augment(<lm>)` instead.
ℹ The deprecated feature was likely used in the ggplot2 package.
Please report the issue at <https://github.com/tidyverse/ggplot2/issues>.
Residuos estandarizados vs Predichos
Este gráfico es similar al primero, pero los residuos están estandarizados. Esperamos no ver ningún patrón, con los residuos distribuidos normalmente alrededor de cero.
ggplot(data=modelo1)+
geom_point(mapping=aes(x=modelo1$fitted.values, y=rstandard(modelo1)))+
geom_hline(yintercept = c(-3,0,3),col="red")+
xlab("Predichos")+
ylab("Residuos estandarizados")Ajustamiento de modelos intrínsecamente lineales
De la misma manera que se evalúa el modelo lineal lo realizamos de manera explícita en la función.
Modelo polinómico de 2° grado
Teniendo en cuenta que el modelo es. \[Y_i = \beta _0 + \beta _1 x_i + \beta _2 x_i^2 + \varepsilon _i\] La función se escribe:
modelo2 = lm(feromona$Dosis~feromona$T_media + I(feromona$T_media^2))
summary(modelo2)
Call:
lm(formula = feromona$Dosis ~ feromona$T_media + I(feromona$T_media^2))
Residuals:
Min 1Q Median 3Q Max
-0.0054085 -0.0019800 -0.0003171 0.0017204 0.0077466
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.209e-02 3.380e-02 0.950 0.354
feromona$T_media -2.681e-03 3.184e-03 -0.842 0.410
I(feromona$T_media^2) 8.236e-05 7.371e-05 1.117 0.278
Residual standard error: 0.003539 on 19 degrees of freedom
Multiple R-squared: 0.4486, Adjusted R-squared: 0.3905
F-statistic: 7.728 on 2 and 19 DF, p-value: 0.003501
Modelo potencial
Teniendo en cuenta que el modelo es. \[Y_i = \beta _0 * x_i^{\beta_1}*\varepsilon _i\] Aplicamos logarirmo en ambos miembros del modelo y obtenemos la linealización del modelo exponencial: \[ln(Y_i) = ln(\beta _0) +ln(x_i)\beta_1+ln(\varepsilon _i)\] \[Y_i^* = \beta _0^* +\beta_1 x_i^*+\varepsilon _i^*\] La función se escribe:
modelo3 = lm(log(feromona$Dosis)~log(feromona$T_media))
summary(modelo3)
Call:
lm(formula = log(feromona$Dosis) ~ log(feromona$T_media))
Residuals:
Min 1Q Median 3Q Max
-0.57977 -0.13483 0.05252 0.17481 0.44511
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -8.2375 1.1415 -7.216 5.52e-07 ***
log(feromona$T_media) 1.2673 0.3727 3.400 0.00284 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.2707 on 20 degrees of freedom
Multiple R-squared: 0.3663, Adjusted R-squared: 0.3346
F-statistic: 11.56 on 1 and 20 DF, p-value: 0.002841
Modelo exponencial
Teniendo en cuenta que el modelo es. \[Y_i = \beta _0 * e^{\beta_1x_i}*\varepsilon _i\] Aplicamos logarirmo en ambos miembros del modelo y obtenemos la linealización del modelo exponencial: \[ln(Y_i) = ln(\beta _0) +\beta_1x_i+ln(\varepsilon _i)\] \[Y_i^* = \beta _0^* +\beta_1x_i+\varepsilon _i^*\] La función se escribe:
modelo4 = lm(log(feromona$Dosis)~feromona$T_media)
summary(modelo4)
Call:
lm(formula = log(feromona$Dosis) ~ feromona$T_media)
Residuals:
Min 1Q Median 3Q Max
-0.56353 -0.16086 0.05162 0.18075 0.42987
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -5.69125 0.37701 -15.096 2.14e-12 ***
feromona$T_media 0.06172 0.01729 3.569 0.00192 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.2658 on 20 degrees of freedom
Multiple R-squared: 0.3891, Adjusted R-squared: 0.3585
F-statistic: 12.74 on 1 and 20 DF, p-value: 0.001923