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.

x <- gssft1$hrs1 ## asociamos a vector para no repetir el nombre de variable

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

test_t <- t.test(
    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

x <- gssnet2$emailhrs
y <- gssnet2$webhrs
z <- gssnet2$sex
z <- factor(z, labels = c("hombre", "mujer"))
output.levene <- leveneTest(x ~ z, data = gssnet2, center = mean) 
print(output.levene)
Levene's Test for Homogeneity of Variance (center = mean)
       Df F value Pr(>F)
group   1  0.5016  0.479
      982               
conflevel = 0.95 ##  se deben dar alternativas 0.90, 0.95, 0.9545, 0.99, 0.9975
pctrl = 1 - conflevel ## cálculo del valor de control
test_true <- t.test(
        x ~ z, ## atención al cambo, desaparace mu y cambia la forma de X que es formula x ~ z
        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 
t1 <- test_true[["statistic"]][["t"]]
print(t1)
[1] 0.2083198
df1 <- test_true[["parameter"]][["df"]]
print(df1)
[1] 982
effect.size.true <- sqrt((t1 ^ 2) / ((t1 ^ 2) + df1))
print(effect.size.true)
[1] 0.006647606

4.1.2.2 Varianzas no iguales

test_false <- t.test(
        x ~ z,
        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 
t2 <- test_false[["statistic"]][["t"]]
print(t2)
[1] 0.2068209
df2 <- test_false[["parameter"]][["df"]]
print(df2)
[1] 893.8837
## calculo del efecto
effect.size.false <- sqrt((t2 ^ 2) / ((t2 ^ 2) + df2))
print(effect.size.false)
[1] 0.00691741

4.1.3 Test t Student para la media de una muestra en grupos dependientes

x <- endorph1$before
y <- endorph1$after
media <- mean(x - y, na.rm = TRUE)
print(media)
[1] -18.73636
desviacion <- sd(x - y, na.rm = TRUE)
print(desviacion)
[1] 8.329739
errormedia <- sd(x - y, na.rm = TRUE) / (sqrt(length(x)))
print(errormedia)
[1] 2.511511
int_inf <- media - (2 * errormedia)
print(int_inf)
[1] -23.75939
int_sup <- media + (2 * errormedia)
print(int_sup)
[1] -13.71334
lillieforsx <- lillie.test(x) ##  kolgomorov-smirnov con la correción de lilliefors
print(lillieforsx)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  x
D = 0.17365, p-value = 0.4668
lillieforsy <- lillie.test(y)
print(lillieforsy)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  y
D = 0.12988, p-value = 0.87
shapirox <- shapiro.test(x) ##  shapiro - wilk
print(shapirox)

    Shapiro-Wilk normality test

data:  x
W = 0.86876, p-value = 0.07472
shapiroy <- shapiro.test(y)
print(shapiroy)

    Shapiro-Wilk normality test

data:  y
W = 0.96441, p-value = 0.8252
test <- t.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
t3 <- test[["statistic"]][["t"]]
print(t3)
[1] -7.460197
df3 <- test[["parameter"]][["df"]]
print(df3)
[1] 10
effect_size3 <- sqrt((t3 ^ 2) / ((t3 ^ 2) + df3))
print(effect_size3)
[1] 0.9206995

4.1.4 Correlación paramétrica de Pearson

##  correlaciones
x <- anxiety$TIEMPO
y <- anxiety$NOTA
z <- anxiety$ANSIEDAD
pearson.1 <- cor.test(
        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 
anxiety.filter <- select(anxiety, TIEMPO, NOTA, ANSIEDAD)
## p.coef <-cor(anxiety.filter, use = "complete.obs", method = "pearson")
## p.cor <- cor(anxiety.filter, use = "pairwise.complete.obs") 
p.pvalue <- rcorr(as.matrix(anxiety.filter), type = "pearson") ## se obtiene la matriz de correlación
p.pvalue[["r"]] ##  matriz de correlación
             TIEMPO       NOTA   ANSIEDAD
TIEMPO    1.0000000  0.3967207 -0.7092493
NOTA      0.3967207  1.0000000 -0.4409934
ANSIEDAD -0.7092493 -0.4409934  1.0000000
p.pvalue[["n"]] ##  pares analizados
         TIEMPO NOTA ANSIEDAD
TIEMPO      103  103      103
NOTA        103  103      103
ANSIEDAD    103  103      103
p.pvalue[["P"]] ##  pvalue de los coeficientes
               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.

hatco$X14f <- factor(hatco$X14, labels = c("nueva", "recompra modificada", "recompra"))
hatco$X13f <- factor(hatco$X13, labels = c("tipo 1", "tipo2"))
boxplot(hatco$X10 ~ hatco$X14f, col = "lightgray")

boxplot(hatco$X10 ~ hatco$X13f, col = "lightgray")

anova1 <- aov(hatco$X10 ~ hatco$X14f)
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)

anova2 <- aov(hatco$X10 ~ hatco$X14f + hatco$X13f)
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.

x <- c(28, 47, 80, 82, 47, 35)
y <- c(30, 50, 75, 75, 50, 30)
chisq000 <- chisq.test(x, p = y, rescale.p = TRUE)
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

tabla001 <-  table(data2$freedman, data2$sex)
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
chisq001 <- chisq.test(tabla001, correct = FALSE) ## prueba chi2 de tabla sin corrección de continuidad de Yates (solo en 2*2)
print(chisq001)

    Pearson's Chi-squared test

data:  tabla001
X-squared = 14.951, df = 3, p-value = 0.001859
chisq002 <- 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
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

otros <- assocstats(tabla001)
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

x <- grades$Estadística
y <- grades$Selectivo
spearman.1 <- cor.test(
        x,
        y,
        alternative = "two.sided",
        method = "spearman",
        exact = NULL,
        conf.level = 0.95,
        continuity = FALSE)

4.2.2.2 Correlación de Kendall

tau.b.kendall.1 <- cor.test(
        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

x <- bdi$sunbdi
y <- bdi$wedbdi
z <- bdi$droga

bdi.filter <- filter (bdi, bdi$droga == 1)
es <- bdi.filter$sunbdi ##  alcohol domingo

bdi.filter <- filter (bdi, bdi$droga == 2)
as <- bdi.filter$sunbdi ##  extasis domingo

bdi.filter <- filter (bdi, bdi$droga == 1)
ew <- bdi.filter$wedbdi ##  alcohol miercoles

bdi.filter <- filter (bdi, bdi$droga == 2)
aw <- bdi.filter$wedbdi ##  extasis miercoles

rm(bdi.filter)

lillie.sun.1 <- lillie.test(es)
print(lillie.sun.1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  es
D = 0.27585, p-value = 0.02986
shap.sun.1 <- shapiro.test(es)
print(shap.sun.1)

    Shapiro-Wilk normality test

data:  es
W = 0.81064, p-value = 0.01952
lillie.sun.2 <- lillie.test(as)
print(lillie.sun.2)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  as
D = 0.16992, p-value = 0.5687
shap.sun.2 <- shapiro.test(as)
print(shap.sun.2)

    Shapiro-Wilk normality test

data:  as
W = 0.95947, p-value = 0.7798
lillie.wed.1 <- lillie.test(ew)
print(lillie.wed.1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  ew
D = 0.23469, p-value = 0.1226
shap.wed.1 <- shapiro.test(ew)
print(shap.wed.1)

    Shapiro-Wilk normality test

data:  ew
W = 0.94114, p-value = 0.5658
lillie.wed.2 <- lillie.test(aw)
print(lillie.wed.2)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  aw
D = 0.30502, p-value = 0.00894
shap.wed.2 <- shapiro.test(aw)
print(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.

wilcox.test.1 <- wilcox.test(as, es, paired = FALSE, alternative = "two.sided", mu = 0, conf.int = 0.95)
print(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 
wilcox.test.2 <- wilcox.test(aw, ew, paired = FALSE, alternative = "two.sided", mu = 0, conf.int = 0.95)
print(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.

wilcox.test.3 <- wilcox.test(es, ew, paired = TRUE, alternative = "two.sided", mu = 0, conf.int = 0.99)
print(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 
wilcox.test.4 <- wilcox.test(as, aw, paired = TRUE, alternative = "two.sided", mu = 0, conf.int = 0.99)
print(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