carlos_raw <- read_csv(here("SEM lavaan/data_sem",
"carlos_2.csv"))
Definimos las variables que vamos a utilizar
segVars <- c("age", "gender", "tiempo_sancion", "drogas", "conducta_agresiva")
Definitmos el tipo de dato de cada variable
segVarType <- c("norm", "binom", "norm", "pois", "norm")
Le ponemos los nombres a los segmentos. En este caso va a ser el tiempo de las diferentes muestras
segNames <- c("aplicacion_1", "aplicacion_2", "aplicacion_3", "aplicacion_4", "aplicacion_5")
Definimos los tamaños de cada segmento
segSize <- c(300, 300, 300, 300, 300)
Definimos el promedio de cada variable para pada segmento
segMeans <- matrix( c(
18, .5, 100, 1, 4,
18, .5, 100, 1, 4,
18, .5, 100, 1, 4,
18, .5, 100, 1, 4,
18, .5, 100, 1, 4, ), ncol=length(segVars), byrow=TRUE)
Error in c(18, 0.5, 100, 1, 4, 18, 0.5, 100, 1, 4, 18, 0.5, 100, 1, 4, :
argument 26 is empty
Definimos las desviaciones estándar para cada segmento
segSDs <- matrix( c(
5, NA, 10, NA, 0.02,
5, NA, 10, NA, 0.02,
5, NA, 10, NA, 0.02,
5, NA, 10, NA, 0.02,
5, NA, 10, NA, 0.02), ncol=length(segVars), byrow=TRUE)
De acuerdo a los parámetros anteriores, creamos el dataset
seg.df <- NULL
set.seed(02554)
for (i in seq_along(segNames)) {
cat(i, segNames[i], "\n")
# create an empty matrix to hold this particular segment's data
this.seg <- data.frame(matrix(NA, nrow=segSize[i], ncol=length(segVars)))
# within a segment, iterate over the variables and draw appropriate random data
for (j in seq_along(segVars)) { # and iterate over each variable
if (segVarType[j] == "norm") { # draw random normals
this.seg[, j] <- rnorm(segSize[i], mean=segMeans[i, j], sd=segSDs[i, j])
} else if (segVarType[j] == "pois") { # draw counts
this.seg[, j] <- rpois(segSize[i], lambda=segMeans[i, j])
} else if (segVarType[j] == "binom") { # draw binomials
this.seg[, j] <- rbinom(segSize[i], size=1, prob=segMeans[i, j])
} else {
stop("Bad segment data type: ", segVarType[j])
}
}
# add this segment to the total dataset
seg.df <- rbind(seg.df, this.seg)
}
1 aplicacion_1
2 aplicacion_2
3 aplicacion_3
4 aplicacion_4
5 aplicacion_5
Le asignamos nombres al dataset
names(seg.df) <- segVars
Asignamos los diferentes segmentos
seg.df$Segment <- factor(rep(segNames, times=segSize))
Organizamos un poco los datos
seg.df <-
seg.df %>%
mutate(age = round(age, digits = 0),
gender = factor(gender, labels = c("f", "m")),
tiempo_sancion = round(tiempo_sancion, digits = 0),
conducta_agresiva = round(conducta_agresiva, 2))
Adaptar los datos al ejercicio. Solo para intervención amigoniana.
carlos_para <- seg.df
carlos_para <-
carlos_para %>%
rename(aplic_encuesta = "Segment")
De acuerdo a los datos del promedio de la conducta violenta, la intervención amigoniana está teniendo una influencia positiva en la reducción de la conducta violenta.
Parece que la intervención está sirviendo!!! Pero hay que demostrarlo estadísitcamente (inferencial).
Para determinar si el tamaño puede afectar las comparaciones entre segmentos utilizamos la prueba chi-cuadrado.
chisq.test(table(seg.df$Segment))
Chi-squared test for given probabilities
data: table(seg.df$Segment)
X-squared = 0, df = 4, p-value = 1
Primero verificamos si hay normalidad en los datos con la prueba de Kolmogorov-Smirnov.
Aplicación 1
aplicacion_1 <-
carlos_para %>%
filter(aplic_encuesta == "aplicacion_1") %>%
select(conducta_agresiva)
ks.test(aplicacion_1$conducta_agresiva,
"pnorm",
mean(aplicacion_1$conducta_agresiva),
sd(aplicacion_1$conducta_agresiva))
ties should not be present for the Kolmogorov-Smirnov test
One-sample Kolmogorov-Smirnov test
data: aplicacion_1$conducta_agresiva
D = 0.1206, p-value = 0.0003245
alternative hypothesis: two-sided
Aplicación 2
ks.test(aplicacion_2$conducta_agresiva,
"pnorm",
mean(aplicacion_2$conducta_agresiva),
sd(aplicacion_2$conducta_agresiva))
ties should not be present for the Kolmogorov-Smirnov test
One-sample Kolmogorov-Smirnov test
data: aplicacion_2$conducta_agresiva
D = 0.13184, p-value = 5.915e-05
alternative hypothesis: two-sided
Aplicación 3
aplicacion_3 <-
carlos_para %>%
filter(aplic_encuesta == "aplicacion_3") %>%
select(conducta_agresiva)
ks.test(aplicacion_3$conducta_agresiva,
"pnorm",
mean(aplicacion_3$conducta_agresiva),
sd(aplicacion_3$conducta_agresiva))
ties should not be present for the Kolmogorov-Smirnov test
One-sample Kolmogorov-Smirnov test
data: aplicacion_3$conducta_agresiva
D = 0.11536, p-value = 0.0006816
alternative hypothesis: two-sided
Aplicación 4
ks.test(aplicacion_4$conducta_agresiva,
"pnorm",
mean(aplicacion_4$conducta_agresiva),
sd(aplicacion_4$conducta_agresiva))
ties should not be present for the Kolmogorov-Smirnov test
One-sample Kolmogorov-Smirnov test
data: aplicacion_4$conducta_agresiva
D = 0.10366, p-value = 0.003171
alternative hypothesis: two-sided
aplicacion_5 <-
carlos_para %>%
filter(aplic_encuesta == "aplicacion_5") %>%
select(conducta_agresiva)
ks.test(aplicacion_5$conducta_agresiva,
"pnorm",
mean(aplicacion_5$conducta_agresiva),
sd(aplicacion_5$conducta_agresiva))
ties should not be present for the Kolmogorov-Smirnov test
One-sample Kolmogorov-Smirnov test
data: aplicacion_5$conducta_agresiva
D = 0.11373, p-value = 0.000852
alternative hypothesis: two-sided
Todos los p-valor son menores a 0.05, por lo tanto tienen una distribución normal.
Procedemos a aplicar una anova para determinar si hay diferencias significativas entre ellos.
Aplicamos una anova.
summary(carlos_para.anova)
Df Sum Sq Mean Sq F value Pr(>F)
carlos_para$aplic_encuesta 4 751.0 187.8 461811 <2e-16 ***
Residuals 1495 0.6 0.0
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
El p-valor es menor a 0.05, confirmando que la conducta agresiva varía significativamente a través de las intervenciones.
Para determinar entre cuáles tratamientos hay diferencias significativas se palica un post hoc Tukey.
TukeyHSD(carlos_para.anova)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = carlos_para$conducta_agresiva ~ carlos_para$aplic_encuesta)
$`carlos_para$aplic_encuesta`
diff lwr upr p adj
aplicacion_2-aplicacion_1 -0.5019667 -0.5064630 -0.4974703 0
aplicacion_3-aplicacion_1 -1.0013000 -1.0057963 -0.9968037 0
aplicacion_4-aplicacion_1 -1.4996333 -1.5041297 -1.4951370 0
aplicacion_5-aplicacion_1 -2.0028667 -2.0073630 -1.9983703 0
aplicacion_3-aplicacion_2 -0.4993333 -0.5038297 -0.4948370 0
aplicacion_4-aplicacion_2 -0.9976667 -1.0021630 -0.9931703 0
aplicacion_5-aplicacion_2 -1.5009000 -1.5053963 -1.4964037 0
aplicacion_4-aplicacion_3 -0.4983333 -0.5028297 -0.4938370 0
aplicacion_5-aplicacion_3 -1.0015667 -1.0060630 -0.9970703 0
aplicacion_5-aplicacion_4 -0.5032333 -0.5077297 -0.4987370 0
Por lo tanto hay diferencias significativas entre todos los tratamientos (p-valor < 0.05).
Volviendo a los promedios
carlos_para %>%
group_by(aplic_encuesta) %>%
summarize(cantidad = n(),
conducta_agresiva = mean(conducta_agresiva))
Las intervenciones han disminuido significativamente la conducta violenta.
Generamos los datos con distribuciones uniformes (no normales).
carlos_para_no_1 <-
tibble(conducta_agresiva = round(runif(300,
min = 4,
max = 5),
digits = 2),
aplic_encuesta = "aplicacion_1")
carlos_para_no_2 <-
tibble(conducta_agresiva = round(runif(300,
min = 3,
max = 4),
digits = 2),
aplic_encuesta = "aplicacion_2")
carlos_para_no_3 <-
tibble(conducta_agresiva = round(runif(300,
min = 3,
max = 4),
digits = 2),
aplic_encuesta = "aplicacion_3")
carlos_para_no_4 <-
tibble(conducta_agresiva = round(runif(300,
min = 2,
max = 3),
digits = 2),
aplic_encuesta = "aplicacion_4")
carlos_para_no_5 <-
tibble(conducta_agresiva = round(runif(300,
min = 2,
max = 3),
digits = 2),
aplic_encuesta = "aplicacion_5")
carlos_no_para <-
bind_rows(carlos_para_no_1,
carlos_para_no_2,
carlos_para_no_3,
carlos_para_no_4,
carlos_para_no_5)
Al parecer el tratamiento está teniendo una influencia. Sin embargo, parece que la aplicación 2 y 3 son similares y podría estar mostrando que no hay diferencias entre estas dos aplicaciones.
Primero verificamos si hay normalidad en los datos con la prueba de Kolmogorov-Smirnov.
Aplicación 1
aplicacion_1_no <-
carlos_no_para %>%
filter(aplic_encuesta == "aplicacion_1") %>%
select(conducta_agresiva)
ks.test(aplicacion_1_no$conducta_agresiva,
"pnorm",
mean(aplicacion_1_no$conducta_agresiva),
sd(aplicacion_1_no$conducta_agresiva))
ties should not be present for the Kolmogorov-Smirnov test
One-sample Kolmogorov-Smirnov test
data: aplicacion_1_no$conducta_agresiva
D = 0.079397, p-value = 0.04554
alternative hypothesis: two-sided
Aplicación 2
aplicacion_2_no <-
carlos_no_para %>%
filter(aplic_encuesta == "aplicacion_2") %>%
select(conducta_agresiva)
ks.test(aplicacion_2_no$conducta_agresiva,
"pnorm",
mean(aplicacion_2_no$conducta_agresiva),
sd(aplicacion_2_no$conducta_agresiva))
ties should not be present for the Kolmogorov-Smirnov test
One-sample Kolmogorov-Smirnov test
data: aplicacion_2_no$conducta_agresiva
D = 0.07492, p-value = 0.06893
alternative hypothesis: two-sided
Aplicación 3
aplicacion_3_no <-
carlos_no_para %>%
filter(aplic_encuesta == "aplicacion_3") %>%
select(conducta_agresiva)
ks.test(aplicacion_3_no$conducta_agresiva,
"pnorm",
mean(aplicacion_3_no$conducta_agresiva),
sd(aplicacion_3_no$conducta_agresiva))
ties should not be present for the Kolmogorov-Smirnov test
One-sample Kolmogorov-Smirnov test
data: aplicacion_3_no$conducta_agresiva
D = 0.063481, p-value = 0.1781
alternative hypothesis: two-sided
Aplicación 4
aplicacion_4_no <-
carlos_no_para %>%
filter(aplic_encuesta == "aplicacion_4") %>%
select(conducta_agresiva)
ks.test(aplicacion_4_no$conducta_agresiva,
"pnorm",
mean(aplicacion_4_no$conducta_agresiva),
sd(aplicacion_4_no$conducta_agresiva))
ties should not be present for the Kolmogorov-Smirnov test
One-sample Kolmogorov-Smirnov test
data: aplicacion_4_no$conducta_agresiva
D = 0.077714, p-value = 0.05337
alternative hypothesis: two-sided
Aplicación 5
aplicacion_5_no <-
carlos_no_para %>%
filter(aplic_encuesta == "aplicacion_5") %>%
select(conducta_agresiva)
ks.test(aplicacion_5_no$conducta_agresiva,
"pnorm",
mean(aplicacion_5_no$conducta_agresiva),
sd(aplicacion_5_no$conducta_agresiva))
ties should not be present for the Kolmogorov-Smirnov test
One-sample Kolmogorov-Smirnov test
data: aplicacion_5_no$conducta_agresiva
D = 0.090427, p-value = 0.0148
alternative hypothesis: two-sided
kruskal.test(aplic_encuesta ~ conducta_agresiva,
carlos_no_para)
Kruskal-Wallis rank sum test
data: aplic_encuesta by conducta_agresiva
Kruskal-Wallis chi-squared = 1372.7, df = 299, p-value < 2.2e-16
Como el p-valor es menor a 0.05 hay diferencias significativas.
Pos hoc - Wilcox
pairwise.wilcox.test(carlos_no_para$conducta_agresiva,
carlos_no_para$aplic_encuesta,
p.adjust.method = "BH")
Pairwise comparisons using Wilcoxon rank sum test with continuity correction
data: carlos_no_para$conducta_agresiva and carlos_no_para$aplic_encuesta
aplicacion_1 aplicacion_2 aplicacion_3 aplicacion_4
aplicacion_2 <2e-16 - - -
aplicacion_3 <2e-16 0.106 - -
aplicacion_4 <2e-16 <2e-16 <2e-16 -
aplicacion_5 <2e-16 <2e-16 <2e-16 0.067
P value adjustment method: BH
Se encontró que la aplicación 2 no tiene diferencia significativa con la aplicación 3 y también la aplicación 4 no tiene diferencia significativa con la aplicación 5. Esto quiere decir que no hay necesidad de hacer 5 aplicaciones sino 3, una al principio otra al final y otra en el medio.
Contrastarlos con otros estudios.