<- gssft1$hrs1 ## asociamos a vector para no repetir el nombre de variable x
4 Inferencia S01 y S02
El siguiente documento muestra todos los cálculos estadísticos que entre la primera y la segunda sesión de la asignatura Técnicas multivariantes en Investigación de Mercados dentro del máster oficial en Marketing e Investigación de mercados se observan. Este documento intenta ser una guía ilustrativa y demostrativa de como se trabaja con R, magnificando todas las virtudes de este software.
4.1 Inferencia paramétrica
Pruebas inferenciales realizadas con variables que cumplen los crirerios de nromalidad y/o homoscedasticidad.
4.1.1 Test t Student para la media de una muestra
<- t.test(
test_t
x,mu = 40, ## debe ser un parámetro abierto, es el valor de control
na.rm = TRUE,
alternative = "two.sided", ## alternativas cerradas: "two.sided", "less", "greater"
paired = FALSE,
var.equal = FALSE, ## alternativas TRUE / FALSE
conf.level = 0.95) ## se deben dar alternativas 0.90, 0.95, 0.9545, 0.99, 0.9975
print(test_t)
One Sample t-test
data: x
t = 14.069, df = 438, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 40
95 percent confidence interval:
46.22201 48.24268
sample estimates:
mean of x
47.23235
4.1.2 Test t Student para la media de una muestra en grupos independientes
El test puede hacerse con varianzas iguales o diferentes, x con z, varianzas iguales / diferentes; para saber si optamos por una u otra opción hacemos el test de Levene; este test necesita que la variable de grupos sea no numérica, por lo que creamos un factor para ella.
- si la probabilidad es mayor que 0.05, escogemos la prueba t de varianzas iguales;
- si la probabilidad es menor o igual que 0.05, escogemos la prueba t de varianzas distintas;
- atención si el nivel de confianza es 0.95, el valor de comparación de Levene es 1-0.95=0.05
4.1.2.1 Varianzas iguales
<- gssnet2$emailhrs
x <- gssnet2$webhrs
y <- gssnet2$sex
z <- factor(z, labels = c("hombre", "mujer"))
z <- leveneTest(x ~ z, data = gssnet2, center = mean)
output.levene print(output.levene)
Levene's Test for Homogeneity of Variance (center = mean)
Df F value Pr(>F)
group 1 0.5016 0.479
982
= 0.95 ## se deben dar alternativas 0.90, 0.95, 0.9545, 0.99, 0.9975
conflevel = 1 - conflevel ## cálculo del valor de control
pctrl <- t.test(
test_true ~ z, ## atención al cambo, desaparace mu y cambia la forma de X que es formula x ~ z
x na.rm = TRUE,
alternative = "two.sided", ## alternativas cerradas: "two.sided", "less", "greater"
paired = FALSE,
var.equal = TRUE,
conf.level = conflevel)
print(test_true)
Two Sample t-test
data: x by z
t = 0.20832, df = 982, p-value = 0.835
alternative hypothesis: true difference in means between group hombre and group mujer is not equal to 0
95 percent confidence interval:
-0.9158859 1.1334347
sample estimates:
mean in group hombre mean in group mujer
3.371057 3.262282
<- test_true[["statistic"]][["t"]]
t1 print(t1)
[1] 0.2083198
<- test_true[["parameter"]][["df"]]
df1 print(df1)
[1] 982
<- sqrt((t1 ^ 2) / ((t1 ^ 2) + df1))
effect.size.true print(effect.size.true)
[1] 0.006647606
4.1.2.2 Varianzas no iguales
<- t.test(
test_false ~ z,
x na.rm = TRUE,
alternative = "two.sided",
paired = FALSE,
var.equal = FALSE,
conf.level = conflevel)
print(test_false)
Welch Two Sample t-test
data: x by z
t = 0.20682, df = 893.88, p-value = 0.8362
alternative hypothesis: true difference in means between group hombre and group mujer is not equal to 0
95 percent confidence interval:
-0.9234377 1.1409865
sample estimates:
mean in group hombre mean in group mujer
3.371057 3.262282
<- test_false[["statistic"]][["t"]]
t2 print(t2)
[1] 0.2068209
<- test_false[["parameter"]][["df"]]
df2 print(df2)
[1] 893.8837
## calculo del efecto
<- sqrt((t2 ^ 2) / ((t2 ^ 2) + df2))
effect.size.false print(effect.size.false)
[1] 0.00691741
4.1.3 Test t Student para la media de una muestra en grupos dependientes
<- endorph1$before
x <- endorph1$after
y <- mean(x - y, na.rm = TRUE)
media print(media)
[1] -18.73636
<- sd(x - y, na.rm = TRUE)
desviacion print(desviacion)
[1] 8.329739
<- sd(x - y, na.rm = TRUE) / (sqrt(length(x)))
errormedia print(errormedia)
[1] 2.511511
<- media - (2 * errormedia)
int_inf print(int_inf)
[1] -23.75939
<- media + (2 * errormedia)
int_sup print(int_sup)
[1] -13.71334
<- lillie.test(x) ## kolgomorov-smirnov con la correción de lilliefors
lillieforsx print(lillieforsx)
Lilliefors (Kolmogorov-Smirnov) normality test
data: x
D = 0.17365, p-value = 0.4668
<- lillie.test(y)
lillieforsy print(lillieforsy)
Lilliefors (Kolmogorov-Smirnov) normality test
data: y
D = 0.12988, p-value = 0.87
<- shapiro.test(x) ## shapiro - wilk
shapirox print(shapirox)
Shapiro-Wilk normality test
data: x
W = 0.86876, p-value = 0.07472
<- shapiro.test(y)
shapiroy print(shapiroy)
Shapiro-Wilk normality test
data: y
W = 0.96441, p-value = 0.8252
<- t.test(
test
x,
y,na.rm = TRUE,
alternative = "two.sided", ## alternativas cerradas: "two.sided", "less", "greater"
paired = TRUE, ## nótese que aquí es TRUE porque estamos en muestras pareadas
conf.level = 0.95)
print(test)
Paired t-test
data: x and y
t = -7.4602, df = 10, p-value = 2.159e-05
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
-24.33236 -13.14037
sample estimates:
mean difference
-18.73636
## cálculo del efecto tamaño
<- test[["statistic"]][["t"]]
t3 print(t3)
[1] -7.460197
<- test[["parameter"]][["df"]]
df3 print(df3)
[1] 10
<- sqrt((t3 ^ 2) / ((t3 ^ 2) + df3))
effect_size3 print(effect_size3)
[1] 0.9206995
4.1.4 Correlación paramétrica de Pearson
## correlaciones
<- anxiety$TIEMPO
x <- anxiety$NOTA
y <- anxiety$ANSIEDAD
z .1 <- cor.test(
pearson
x,
y,alternative = "two.sided", ## alternativas cerradas: "two.sided", "less", "greater"
method = "pearson", ## alternativas cerradas: "pearson", "kendall", "spearman"
exact = NULL,
conf.level = 0.95,
continuity = FALSE)
print(pearson.1)
Pearson's product-moment correlation
data: x and y
t = 4.3434, df = 101, p-value = 3.343e-05
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.2200938 0.5481602
sample estimates:
cor
0.3967207
<- select(anxiety, TIEMPO, NOTA, ANSIEDAD)
anxiety.filter ## p.coef <-cor(anxiety.filter, use = "complete.obs", method = "pearson")
## p.cor <- cor(anxiety.filter, use = "pairwise.complete.obs")
<- rcorr(as.matrix(anxiety.filter), type = "pearson") ## se obtiene la matriz de correlación
p.pvalue "r"]] ## matriz de correlación p.pvalue[[
TIEMPO NOTA ANSIEDAD
TIEMPO 1.0000000 0.3967207 -0.7092493
NOTA 0.3967207 1.0000000 -0.4409934
ANSIEDAD -0.7092493 -0.4409934 1.0000000
"n"]] ## pares analizados p.pvalue[[
TIEMPO NOTA ANSIEDAD
TIEMPO 103 103 103
NOTA 103 103 103
ANSIEDAD 103 103 103
"P"]] ## pvalue de los coeficientes p.pvalue[[
TIEMPO NOTA ANSIEDAD
TIEMPO NA 3.343451e-05 0.000000e+00
NOTA 3.343451e-05 NA 3.127873e-06
ANSIEDAD 0.000000e+00 3.127873e-06 NA
plot(anxiety.filter) ## se obtiene el gráfico de dispersión
4.1.5 Análisis de varianza de un factor (vía)
Nota: la variable de grupos ha de ser factor; si no es así no funciona el análisis.
$X14f <- factor(hatco$X14, labels = c("nueva", "recompra modificada", "recompra"))
hatco$X13f <- factor(hatco$X13, labels = c("tipo 1", "tipo2"))
hatcoboxplot(hatco$X10 ~ hatco$X14f, col = "lightgray")
boxplot(hatco$X10 ~ hatco$X13f, col = "lightgray")
<- aov(hatco$X10 ~ hatco$X14f)
anova1 print(anova1)
Call:
aov(formula = hatco$X10 ~ hatco$X14f)
Terms:
hatco$X14f Residuals
Sum of Squares 39.0068 33.4591
Deg. of Freedom 2 97
Residual standard error: 0.5873152
Estimated effects may be unbalanced
summary(anova1)
Df Sum Sq Mean Sq F value Pr(>F)
hatco$X14f 2 39.01 19.503 56.54 <2e-16 ***
Residuals 97 33.46 0.345
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
model.tables(anova1, "means")
Tables of means
Grand mean
4.771
hatco$X14f
nueva recompra modificada recompra
3.929 5.003 5.394
rep 34.000 32.000 34.000
4.1.6 Análisis de varianza de dos factores (vías)
<- aov(hatco$X10 ~ hatco$X14f + hatco$X13f)
anova2 print(anova2)
Call:
aov(formula = hatco$X10 ~ hatco$X14f + hatco$X13f)
Terms:
hatco$X14f hatco$X13f Residuals
Sum of Squares 39.00680 0.85383 32.60527
Deg. of Freedom 2 1 96
Residual standard error: 0.5827849
Estimated effects may be unbalanced
summary(anova2)
Df Sum Sq Mean Sq F value Pr(>F)
hatco$X14f 2 39.01 19.503 57.424 <2e-16 ***
hatco$X13f 1 0.85 0.854 2.514 0.116
Residuals 96 32.61 0.340
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
model.tables(anova2, "means")
Tables of means
Grand mean
4.771
hatco$X14f
nueva recompra modificada recompra
3.929 5.003 5.394
rep 34.000 32.000 34.000
hatco$X13f
tipo 1 tipo2
4.863 4.679
rep 50.000 50.000
4.2 Inferencia no paramétrica
4.2.1 Prueba Chi
4.2.1.1 Prueba Chi2 de una muestra
El test chi2 para una muestra, compara los resultados de una distribución marginal con los resultados proporcionados de forma externa.
<- c(28, 47, 80, 82, 47, 35)
x <- c(30, 50, 75, 75, 50, 30)
y <- chisq.test(x, p = y, rescale.p = TRUE)
chisq000 print(chisq000)
Chi-squared test for given probabilities
data: x
X-squared = 1.9941, df = 5, p-value = 0.85
4.2.1.2 Prueba Chi2 de una tabla
<- table(data2$freedman, data2$sex)
tabla001 print(tabla001)
Male Female
Don't know 28 36
No Answer 1 10
Allowing people freedom of expression/tolerate bad manners 268 232
Enforcing good manners/limit freedom of expression 195 240
<- chisq.test(tabla001, correct = FALSE) ## prueba chi2 de tabla sin corrección de continuidad de Yates (solo en 2*2)
chisq001 print(chisq001)
Pearson's Chi-squared test
data: tabla001
X-squared = 14.951, df = 3, p-value = 0.001859
<- chisq.test(tabla001, correct = TRUE) ## prueba chi2 de tabla con corrección de continuidad, como es 2*2 aplica por defecto, si no fuera 2*2 no aplica la corrección
chisq002 print(chisq002)
Pearson's Chi-squared test
data: tabla001
X-squared = 14.951, df = 3, p-value = 0.001859
4.2.1.3 Otros test derivados
<- assocstats(tabla001)
otros print(otros)
X^2 df P(> X^2)
Likelihood Ratio 16.138 3 0.0010623
Pearson 14.951 3 0.0018586
Phi-Coefficient : NA
Contingency Coeff.: 0.121
Cramer's V : 0.122
4.2.2 Correlaciones no paramétricas
4.2.2.1 Correlación de Spearman
<- grades$Estadística
x <- grades$Selectivo
y .1 <- cor.test(
spearman
x,
y,alternative = "two.sided",
method = "spearman",
exact = NULL,
conf.level = 0.95,
continuity = FALSE)
4.2.2.2 Correlación de Kendall
.1 <- cor.test(
tau.b.kendall
x,
y,alternative = "two.sided",
method = "kendall",
exact = NULL,
conf.level = 0.95,
continuity = FALSE)
4.2.3 Test de diferencias de una muestra en grupos independientes
Probamos la normalidad de los grupos a comparar. Probamos la normalidad de cada grupo en cada variable y una vez probado que existen problemas de normalidad en algunos de los grupos, calculamos la prueba W de Wilcoxon.
4.2.3.1 Lilliefors y Shapiro-Wilk
<- bdi$sunbdi
x <- bdi$wedbdi
y <- bdi$droga
z
<- filter (bdi, bdi$droga == 1)
bdi.filter <- bdi.filter$sunbdi ## alcohol domingo
es
<- filter (bdi, bdi$droga == 2)
bdi.filter <- bdi.filter$sunbdi ## extasis domingo
as
<- filter (bdi, bdi$droga == 1)
bdi.filter <- bdi.filter$wedbdi ## alcohol miercoles
ew
<- filter (bdi, bdi$droga == 2)
bdi.filter <- bdi.filter$wedbdi ## extasis miercoles
aw
rm(bdi.filter)
.1 <- lillie.test(es)
lillie.sunprint(lillie.sun.1)
Lilliefors (Kolmogorov-Smirnov) normality test
data: es
D = 0.27585, p-value = 0.02986
.1 <- shapiro.test(es)
shap.sunprint(shap.sun.1)
Shapiro-Wilk normality test
data: es
W = 0.81064, p-value = 0.01952
.2 <- lillie.test(as)
lillie.sunprint(lillie.sun.2)
Lilliefors (Kolmogorov-Smirnov) normality test
data: as
D = 0.16992, p-value = 0.5687
.2 <- shapiro.test(as)
shap.sunprint(shap.sun.2)
Shapiro-Wilk normality test
data: as
W = 0.95947, p-value = 0.7798
.1 <- lillie.test(ew)
lillie.wedprint(lillie.wed.1)
Lilliefors (Kolmogorov-Smirnov) normality test
data: ew
D = 0.23469, p-value = 0.1226
.1 <- shapiro.test(ew)
shap.wedprint(shap.wed.1)
Shapiro-Wilk normality test
data: ew
W = 0.94114, p-value = 0.5658
.2 <- lillie.test(aw)
lillie.wedprint(lillie.wed.2)
Lilliefors (Kolmogorov-Smirnov) normality test
data: aw
D = 0.30502, p-value = 0.00894
.2 <- shapiro.test(aw)
shap.wedprint(shap.wed.2)
Shapiro-Wilk normality test
data: aw
W = 0.75347, p-value = 0.003933
4.2.3.2 Prueba W de Wilcoxon - U Mann-Withney
Aunque la probabilidad no es exactamente la misma, es muy aproximada.
.1 <- wilcox.test(as, es, paired = FALSE, alternative = "two.sided", mu = 0, conf.int = 0.95)
wilcox.testprint(wilcox.test.1)
Wilcoxon rank sum test with continuity correction
data: as and es
W = 35.5, p-value = 0.2861
alternative hypothesis: true location shift is not equal to 0
95 percent confidence interval:
-5.000069 1.000079
sample estimates:
difference in location
-1.000027
.2 <- wilcox.test(aw, ew, paired = FALSE, alternative = "two.sided", mu = 0, conf.int = 0.95)
wilcox.testprint(wilcox.test.2)
Wilcoxon rank sum test with continuity correction
data: aw and ew
W = 4, p-value = 0.000569
alternative hypothesis: true location shift is not equal to 0
95 percent confidence interval:
-28.99996 -18.00005
sample estimates:
difference in location
-23.50122
4.2.4 Test de diferencias de una muestra en grupos dependientes
4.2.4.1 Prueba V de Wilcoxon
Atención, resultado de la prueba es suma de rangos negativos. no es el mismo resultado que SPSS el valor, pero si la probabilidad aproximada.
.3 <- wilcox.test(es, ew, paired = TRUE, alternative = "two.sided", mu = 0, conf.int = 0.99)
wilcox.testprint(wilcox.test.3)
Wilcoxon signed rank test with continuity correction
data: es and ew
V = 0, p-value = 0.01403
alternative hypothesis: true location shift is not equal to 0
95 percent confidence interval:
-19.99999 -10.49998
sample estimates:
(pseudo)median
-15.67111
.4 <- wilcox.test(as, aw, paired = TRUE, alternative = "two.sided", mu = 0, conf.int = 0.99)
wilcox.testprint(wilcox.test.4)
Wilcoxon signed rank test with continuity correction
data: as and aw
V = 47, p-value = 0.05248
alternative hypothesis: true location shift is not equal to 0
95 percent confidence interval:
-0.4999518 10.9999380
sample estimates:
(pseudo)median
7.499968