author: Javier Ballesteros, UPV/EHU date: Agosto - Septiembre 2015
Statistics are curious things…(They) tend to induce a strong emotional reaction in non-mathematical minds…It is exasperating, when we have studied a problem by methods that we have spent laborious years in mastering, to find our conclusions questioned, and perhaps refuted…There seems to be to me only one way of escape. The worker in medical problems, in the field of clinical as well as preventive medicine, must himself know something of statistical technique, both in experimental arrangements and in the interpretation of figures
En toda la presentación se asume que las variables a analizar son vectores, o están incluidas en una base de datos rectangular (individuos por variables)
data(iris)
names(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
[5] "Species"
class(iris$Species); class(iris$Sepal.Length) # estructura "datos$variable"
[1] "factor"
[1] "numeric"
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
tail(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
145 6.7 3.3 5.7 2.5 virginica
146 6.7 3.0 5.2 2.3 virginica
147 6.3 2.5 5.0 1.9 virginica
148 6.5 3.0 5.2 2.0 virginica
149 6.2 3.4 5.4 2.3 virginica
150 5.9 3.0 5.1 1.8 virginica
summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
data(mtcars)
which(mtcars$mpg > median(mtcars$mpg)) # identificación de valores extremos
[1] 1 2 3 4 8 9 18 19 20 21 26 27 28 30 32
Objetivos:
“Las reglas más importantes en estadística son utilizar el sentido común, y visualizar gráficamente los datos y asociaciones de interés”
stem(mtcars$mpg) # distribución valores observados
The decimal point is at the |
10 | 44
12 | 3
14 | 3702258
16 | 438
18 | 17227
20 | 00445
22 | 88
24 | 4
26 | 03
28 |
30 | 44
32 | 49
hist(mtcars$mpg) # forma de la distribución, tendencia central, y variabilidad
boxplot(mtcars$mpg) # mediana, IQR, máximos-mínimos según IQR, y observaciones extremas
qqnorm(mtcars$mpg); qqline(mtcars$mpg) # ajuste a distribución normal
summary(mtcars$mpg)
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.42 19.20 20.09 22.80 33.90
fivenum(mtcars$mpg)
[1] 10.40 15.35 19.20 22.80 33.90
mean(mtcars$mpg)
[1] 20.09062
median(mtcars$mpg)
[1] 19.2
Ambas son medidas de la tendencia central de la distribución de una variable cuantitativa. La media se afecta por valores extremos, no así la mediana
\[\large{\bar {X} = \frac {\sum_{i=1}^n {x_i}}{n}}\]
Mientras que la \(\bar x\), está afectada por valores extremos de \(x_i\), la mediana al ser el punto medio de los valores ordenados por rangos no se afecta
var(mtcars$mpg); sd(mtcars$mpg)
[1] 36.3241
[1] 6.026948
\[\large{S^2 = \frac{\sum_{i=1}^n (x_i - \bar{X})^2}{n-1}}\]
\[\large{S = \sqrt{S^2}}\]
La \(S^2\) presenta unidades al cuadrado lo que no es fácilmente interpretable. la \(S\) está en las mismas unidades que la \(\bar {X}\) lo que facilita su interpretación
La \(S\) al igual que la \(\bar {X}\) se afecta por valores extremos. Debido a la elevación al cuadrado de las distancias entre cada observación y la media de la distribución, los valores más alejados de la media contribuyen más a la desviación estándar que los valores cercanos a la media
mad(mtcars$mpg)
[1] 5.41149
IQR(mtcars$mpg)
[1] 7.375
Se basan en el ordenamiento de datos (de menor a mayor) y al igual que la mediana (percentil 50) no se afectan por valores extremos
El rango intercuartil (IQR) recoge los valores del primer al tercer cuartil de la distribución, el 50% de los datos (el box del gráfico boxplot), y no está afectado por valores extremos o outliers
Si una variable continua sigue una distribución normal, el 68% de los datos estarán comprendidos entre la media y 1 DE, el 95% entre la media y 2 DE, y el 99.7% entre la media y 3 DE
Un valor que presente más de 3 DE con respecto a la media puede ser un valor aberrante
group <- rep(1:2, each=10)
groupf <- factor(group)
plot(groupf)
table(groupf) # frecuencia de observaciones por grupo
groupf
1 2
10 10
barplot(table(groupf))
Inducción desde los valores de la muestra a los parámetros de la población. Tiene 2 posibles objetivos:
El \(SE\) depende del estadístico, y disminuye al aumentar el tamaño muestral, y aumenta cuando se incrementa la variabilidad
Error estándar de la diferencia de riesgos: \(SE_{RD} = \sqrt{\frac{p_1(1-p_1)}{n_1} + \frac{p_0(1-p_0)}{n_0}}\)
Error estándar del riesgo relativo: \(SE_{\ln{RR}} = \sqrt{\frac{1}{a} - \frac{1}{n_1} + \frac{1}{c} - \frac{1}{n_0}}\)
Error estándar de la odds-ratio: \(SE_{\ln{OR}} = \sqrt{\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}}\)
El \(SE\) depende del estadístico, y disminuye al aumentar el tamaño muestral, y aumenta cuando se incrementa la variabilidad
\[\large{f(x; \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}}{e^{-{\frac{(x -\mu)^2}{2\sigma^2}}}}}\]
La distribución de los valores observados \(x\), depende sólo de la media de su distribución teórica \(\mu\), y de su desviación estándar \(\sigma\)
La ecuación contiene 3 clásicos números irracionales:
El p-valor informa sobre la probabilidad de que el efecto observado (u otro más extremo) pudiera haber aparecido por azar si la hipótesis nula fuera cierta
\(\large{p = \Pr{(datos|H_0)}}\)
\[P_{valor} = Z = \frac{Efecto - H_0}{SE}\]
\[IC_{1-\alpha{2}} = Efecto \mp{Z_{\alpha{2}}} \times({SE})\]
\[Significance \propto{\frac{Effect \times{Sample}}{Variability}}\]
Tome 3 DE como definitivamente significativo
RA Fisher en su libro Statistical methods for research workers, con una primera edición en 1925, en el capítulo V titulado Tests of significance of means, differences of means, and regression coefficients, dice:
If the difference is many times greater than the standard error, it is certainly significant, and it is a convenient convention to take twice the standard error as the limit of significance; this is roughly equivalent to the corresponding limit \(\small{P = .05}\), already used for the \(\small{\chi^2}\) distribution
RA Fisher (1925): SMRW, sobre la tabla de la distribución \(\small{\chi^2}\):
In preparing this table we have borne in mind that in practice we do not want to know the exact value of \(\small{P}\) for any observed \(\small{\chi^2}\), but in the first place, whether or not the observed value is open to suspicion. If \(\small{P}\) is between 0.1 and 0.9 there is certainly no reason to suspect the hypothesis tested. If it is below 0.02 it is strongly indicated that the hypothesis fails to account for the whole of the facts. We shall not often be astray if we draw a conventional line at 0.05 and consider that higher values of \(\small{\chi^2}\) indicate a real discrepancy
RA Fisher (1929). The statistical method in psychical research. Proceedings of the Society for Psychical Research, xxxix:189-92
In the investigation of living beings by biological methods, statistical tests of significance are essential. Their function is to prevent us being deceived by accidental occurrences…It is a common practice to judge a result significant, if it is of such magnitude that it would have been produced by chance not more frequently than once in twenty trials
Cuanto más pequeño sea el p-valor menos probable es que el valor observado en el experimento sea generado por la distribución de la hipótesis nula. Es un indicador de la sorpresa del resultado versus \(H_0\)
En base a su valor se rechaza o no se rechaza \(H_0\) en favor de \(H_1\)
Significación versus relevancia del hallazgo
\[SMD=\frac{\widehat x_1 - \widehat x_2}{SD_{pooled}}\]
\[\large{P(datos|H_0)}\]
\[\large{P(H_0|datos)}\]
Por supuesto no es cierto que:
\[\large{P(datos|H_0) \ne P(H_0|datos)}\]
Lo que es curioso ya que bastantes veces se interpreta el p-valor bajo un punto de vista bayesiano en vex de frecuentista (falacia de la probabilidad inversa)
Algunos de los tests estadísticos que vamos a ver en este curso asumen distribuciones normales, y esto es especialmente importante en el caso de muestras pequeñas.
No todos los datos continuos se distribuyen normalmente!
?sleep # mejora en horas de sueño tras tratamiento
pre <- c(0.7, -1.6, -0.2, -1.2, -0.1, 3.4, 3.7, 0.8, 0.0, 2.0)
post <- c(1.9, 0.8, 1.1, 0.1, -0.1, 4.4, 5.5, 1.6, 4.6, 3.4)
t.test(pre, post, paired = TRUE)
Paired t-test
data: pre and post
t = -4.0621, df = 9, p-value = 0.002833
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-2.4598858 -0.7001142
sample estimates:
mean of the differences
-1.58
wilcox.test(pre, post, paired = TRUE)
Wilcoxon signed rank test with continuity correction
data: pre and post
V = 0, p-value = 0.009091
alternative hypothesis: true location shift is not equal to 0
Se podría haber analizado de otra forma que reduce el problema a contrastar la diferencia frente a un valor teórico
diff <- pre - post
hist(diff)
t.test(diff, mu = 0)
One Sample t-test
data: diff
t = -4.0621, df = 9, p-value = 0.002833
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
-2.4598858 -0.7001142
sample estimates:
mean of x
-1.58
wilcox.test(diff, mu = 0)
Wilcoxon signed rank test with continuity correction
data: diff
V = 0, p-value = 0.009091
alternative hypothesis: true location is not equal to 0
data(sleep)
boxplot(extra ~ factor(group), data = sleep)
bartlett.test(extra ~ factor(group), data = sleep) # igualdad de varianzas
Bartlett test of homogeneity of variances
data: extra by factor(group)
Bartlett's K-squared = 0.10789, df = 1, p-value = 0.7426
t.test(extra ~ factor(group), data = sleep, var.equal = TRUE)
Two Sample t-test
data: extra by factor(group)
t = -1.8608, df = 18, p-value = 0.07919
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-3.363874 0.203874
sample estimates:
mean in group 1 mean in group 2
0.75 2.33
t.test(extra ~ factor(group), data = sleep)
Welch Two Sample t-test
data: extra by factor(group)
t = -1.8608, df = 17.776, p-value = 0.07939
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-3.3654832 0.2054832
sample estimates:
mean in group 1 mean in group 2
0.75 2.33
wilcox.test(extra ~ factor(group), data = sleep)
Wilcoxon rank sum test with continuity correction
data: extra by factor(group)
W = 25.5, p-value = 0.06933
alternative hypothesis: true location shift is not equal to 0
\[\large{t_{n-1 gl} = \frac{\bar{D} - \mu_D}{S_{\bar{D}}}} \]
\[\large{t_{n_1 + n_2 -1 gl} = \frac{(\bar{X_1} - \bar{X_2}) - (\mu_1 - \mu_2)}{S_{(\bar{X_1}- \bar{X_2})}}} \]
\[\large{F_{n, m} \sim \frac{\sigma^2_{between}}{\sigma^2_{witin}}}\]
# Índice de pulsatilidad en la arteria cerebral media según exposición a cannabis
grupo <- c("control", "control", "control", "control", "control", "control", "activo", "activo", "activo", "activo", "activo", "activo", "ex", "ex", "ex", "ex", "ex", "ex")
index <- c(.9, .9, .9, .8, .8, NA, 1, 1, 1, 1, .9, NA, 1, 1, 1, 1, .9, .9)
pulsatilidad <- data.frame(grupo, index)
pulsatilidad
grupo index
1 control 0.9
2 control 0.9
3 control 0.9
4 control 0.8
5 control 0.8
6 control NA
7 activo 1.0
8 activo 1.0
9 activo 1.0
10 activo 1.0
11 activo 0.9
12 activo NA
13 ex 1.0
14 ex 1.0
15 ex 1.0
16 ex 1.0
17 ex 0.9
18 ex 0.9
boxplot(index ~ grupo, data = pulsatilidad)
bartlett.test(index ~ grupo, data = pulsatilidad)
Bartlett test of homogeneity of variances
data: index by grupo
Bartlett's K-squared = 0.15376, df = 2, p-value = 0.926
oneway.test(index ~ grupo, data = pulsatilidad)
One-way analysis of means (not assuming equal variances)
data: index and grupo
F = 7.4891, num df = 2.0000, denom df = 8.4798, p-value = 0.01338
pairwise.t.test(pulsatilidad$index, pulsatilidad$grupo)
Pairwise comparisons using t tests with pooled SD
data: pulsatilidad$index and pulsatilidad$grupo
activo control
control 0.0073 -
ex 0.6708 0.0082
P value adjustment method: holm
aov.res <- aov(index ~ grupo, data = pulsatilidad) # ANOVA clásico
summary(aov.res)
Df Sum Sq Mean Sq F value Pr(>F)
grupo 2 0.04417 0.022083 8.613 0.00415 **
Residuals 13 0.03333 0.002564
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
2 observations deleted due to missingness
TukeyHSD(aov.res)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = index ~ grupo, data = pulsatilidad)
$grupo
diff lwr upr p adj
control-activo -0.12000000 -0.20456166 -0.03543834 0.0064223
ex-activo -0.01333333 -0.09429496 0.06762830 0.9017863
ex-control 0.10666667 0.02570504 0.18762830 0.0105962
plot(TukeyHSD(aov.res))
kruskal.test(index ~ grupo, data = pulsatilidad)
Kruskal-Wallis rank sum test
data: index by grupo
Kruskal-Wallis chi-squared = 8.3714, df = 2, p-value = 0.01521
pairwise.wilcox.test(index, grupo, data = pulsatilidad)
Pairwise comparisons using Wilcoxon rank sum test
data: index and grupo
activo control
control 0.057 -
ex 0.724 0.057
P value adjustment method: holm
\[cov_{x,y} = \frac{\sum_{i=1} ^n{(x_i - \bar{x})(y_i - \bar{y})}}{n-1}\]
\[Var_x = cov_{x,x} = \frac{\sum_{i=1} ^n{(x_i - \bar{x})(x_i - \bar{x})}}{n-1}\]
\[r = \frac{cov_{x,y}}{S_x * S_y}\]
La covarianza tiene unidades que pueden ser difíciles de interpretar, mientras que la correlación es una covarianza estandarizada, y por lo tanto sin unidades
\[\large{\hat r = \frac{cov_{x,y}}{S_x * S_y} = \frac{\frac{\sum_{i=1} ^n (x_i - \bar x)(y_i - \bar y)}{n-1}}{\sqrt{\frac{\sum_{i=1} ^n (x_i - \bar x)^2}{n-1}}{\sqrt{\frac{\sum_{i=1} ^n (y_i - \bar y)^2}{n-1}}}}}\]
\(R^2 = \hat r ^2\) es una medida del ajuste del modelo, y refleja la proporción de variabilidad en la variable resultado que es explicada por la variable o variables explicativas
La obtención de correlaciones paramétrica/no paramétrica depende de sus argumentos:
El coeficiente de correlación es un número adimensional que presenta un rango entre -1 y +1, e indica la fortaleza de la relación lineal entre 2 variables numéricas. Gráficos de dispersión para valorar esa relación lineal antes de estimar su magnitud mediante los coeficientes de correlación aopropiados:
?anscombe # base de datos histórica en **R**
data(anscombe)
cor.test(anscombe$x1, anscombe$y1)
Pearson's product-moment correlation
data: anscombe$x1 and anscombe$y1
t = 4.2415, df = 9, p-value = 0.00217
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.4243912 0.9506933
sample estimates:
cor
0.8164205
plot(anscombe$x1, anscombe$y1)
abline(lm(y1 ~ x1, data=anscombe))
cor.test(anscombe$x2, anscombe$y2)
Pearson's product-moment correlation
data: anscombe$x2 and anscombe$y2
t = 4.2386, df = 9, p-value = 0.002179
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.4239389 0.9506402
sample estimates:
cor
0.8162365
plot(anscombe$x2, anscombe$y2)
abline(lm(y2 ~ x2, data=anscombe))
cor.test(anscombe$x3, anscombe$y3)
Pearson's product-moment correlation
data: anscombe$x3 and anscombe$y3
t = 4.2394, df = 9, p-value = 0.002176
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.4240623 0.9506547
sample estimates:
cor
0.8162867
plot(anscombe$x3, anscombe$y3)
abline(lm(y3 ~ x3, data=anscombe))
cor.test(anscombe$x4, anscombe$y4)
Pearson's product-moment correlation
data: anscombe$x4 and anscombe$y4
t = 4.243, df = 9, p-value = 0.002165
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.4246394 0.9507224
sample estimates:
cor
0.8165214
plot(anscombe$x4, anscombe$y4)
abline(lm(y4 ~ x4, data=anscombe))
births <- c(4, 20, 60, 30, 7, 6, 14, 20, 18) # número de nacimientos
nests <- c(2, 6, 8, 7, 0, 1, 2, 2, 3) # número de nidos
plot(nests, births) # ¿hay asociación?
cor.test(nests, births) # correlación de Pearson por defecto
Pearson's product-moment correlation
data: nests and births
t = 4.1991, df = 7, p-value = 0.00404
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.4152802 0.9668960
sample estimates:
cor
0.8460611
cor.test(nests, births, method = "spearman")
Spearman's rank correlation rho
data: nests and births
S = 20.928, p-value = 0.006122
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
0.8255992
cor.test(nests, births, method = "kendall")
Kendall's rank correlation tau
data: nests and births
z = 2.5669, p-value = 0.01026
alternative hypothesis: true tau is not equal to 0
sample estimates:
tau
0.7061879
\(r\): 0.50 - 0.70 - 0.90
\(r^2\): 0.25 - 0.49 - 0.81
\(1-r^2\): 0.75 - 0.51 - 0.19
\[\large{r = \frac {\sum (x_i - \bar x)(y_i - \bar y)}{\sqrt{\sum(x_i - \bar x)^2 \sum(y_i - \bar y)^2}}}\]
\[\large{r = \frac {S_{xy}}{S_x S_y}}\]
\[\large{t_{n-2} = \frac{r \sqrt{n-2}}{\sqrt{1-r^2}}}\]
\[\large{z = \frac{1}{2} [\ln{(1+r)} - \ln{(1-r)}]}\]
\[\large{\sigma_z = \frac{1}{\sqrt{n-3}}}\]
Un modelo de regresión implica la existencia de una variable dependiente o resultado \(y\), y otra variable independiente o explicativa \(x\), (o un conjunto de variables explicativas), en un modelo \(y \sim x\)
Un modelo de regresión no es más que un modelo de diferencia de medias. Los coeficientes de regresión se interpretan como (a) la diferencia de medias en la variable resultado cuando se incrementa en 1 punto el valor de la variable explicativa cuando esta es numérica, o (b) la media del grupo de referencia \(b_0\), o la diferencia de medias entre el grupo de referencia y el de contraste \(b_1\) cuando la variable explicativa es categórica
\[\large{E(y_i|x_i) = \alpha + \beta x_i}\]
\(\alpha\) es el intercepto, el valor de \(y\), cuando \(x = 0\)
\(\beta\) es la pendiente que refleja el cambio en \(y\) por cada cambio de 1 unidad en \(x\)
\[\large{\hat y_i = \alpha + \beta x_i + \epsilon_i}\]
\(\hat y_i\) es el valor predicho para una observación en base al valor \(x_i\)
\(\epsilon_i\) es el error aleatorio (residual) que sigue una distribución normal
\[\large{\hat \beta = \frac{cov_{x,y}}{Var_x}}\]
\[\large{\hat \alpha = \bar y - \hat \beta \bar x}\]
La línea de regresión siempre cruza por el punto \((\bar x, \bar y)\)
\[\large{\hat r = \hat \beta \frac{SD_x}{SD_y}}\]
Las diferencias de medias para 2 grupos (t-test), o para más de 2 grupos (ANOVA), no son más que situaciones particulares del modelo general de regresión lineal
Los siguientes ejemplos lo aclararán mejor
ind <- c(1:20)
arm <- rep(0:1, each = 10)
jump.time <- c(6.7, 3.8, 5.2, 4.2, 5.3, 3.2, 7.6, 7.4, 3.1, 4.2, 5.9, 6, 5.2, 6.8, 14.7, 15.5, 4.2, 14, 4.7, 4.7)
rats <- data.frame(ind, arm, jump.time)
head(rats)
ind arm jump.time
1 1 0 6.7
2 2 0 3.8
3 3 0 5.2
4 4 0 4.2
5 5 0 5.3
6 6 0 3.2
t.test(jump.time ~ factor(arm), data = rats, var.equal = T)
Two Sample t-test
data: jump.time by factor(arm)
t = -2.0019, df = 18, p-value = 0.0606
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-6.3533931 0.1533931
sample estimates:
mean in group 0 mean in group 1
5.07 8.17
print(lm(jump.time ~ factor(arm), data = rats))
Call:
lm(formula = jump.time ~ factor(arm), data = rats)
Coefficients:
(Intercept) factor(arm)1
5.07 3.10
ind <- c(1:18)
arm <- rep(0:2, each = 6) # 0:control, 1:ex-usuarios, 2:usuarios activos
pulse <- c(.9, .9, .9, .8, .8, NA, 1, 1, 1, 1, .9, .9, 1, 1, 1, 1, .9, NA)
drug <- data.frame(ind, arm, pulse)
head(drug)
ind arm pulse
1 1 0 0.9
2 2 0 0.9
3 3 0 0.9
4 4 0 0.8
5 5 0 0.8
6 6 0 NA
summary(aov(pulse ~ factor(arm), data = drug))
Df Sum Sq Mean Sq F value Pr(>F)
factor(arm) 2 0.04417 0.022083 8.612 0.00415 **
Residuals 13 0.03333 0.002564
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
2 observations deleted due to missingness
anova(lm(pulse ~ factor(arm), data = drug))
Analysis of Variance Table
Response: pulse
Df Sum Sq Mean Sq F value Pr(>F)
factor(arm) 2 0.044167 0.0220833 8.6125 0.004152 **
Residuals 13 0.033333 0.0025641
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
print(lm(pulse ~ factor(arm), data = drug))
Call:
lm(formula = pulse ~ factor(arm), data = drug)
Coefficients:
(Intercept) factor(arm)1 factor(arm)2
0.8600 0.1067 0.1200
Francis Galton: Law of universal regression
“Each peculiarity in a man is shared by his kinsman, but on the average in a less degree”
En Friedman, Pisani & Purves (1978). smoke es el número de cigarrillos per capita consumidos en 1930. lungcancer.deaths son las muertes por cáncer de pulmon (por 106) en 1950
pais <- c("Australia", "Canada", "Dinamarca", "Finlandia", "Inglaterra",
"Holanda", "Islandia", "Noruega", "Suecia", "Suiza", "USA")
smoke <- c(480, 500, 380, 1100, 1100, 490, 230, 250, 300, 510, 1300)
lungcancer.deaths <- c(180, 150, 170, 350, 460, 240, 60, 90, 110, 250, 200)
Doll1955 <- data.frame(pais, smoke, lungcancer.deaths, stringsAsFactors = FALSE)
Doll1955
pais smoke lungcancer.deaths
1 Australia 480 180
2 Canada 500 150
3 Dinamarca 380 170
4 Finlandia 1100 350
5 Inglaterra 1100 460
6 Holanda 490 240
7 Islandia 230 60
8 Noruega 250 90
9 Suecia 300 110
10 Suiza 510 250
11 USA 1300 200
fit <- lm(lungcancer.deaths ~ smoke, data = Doll1955)
plot(Doll1955$smoke, Doll1955$lungcancer.deaths)
abline(coef(fit))
binom.test(x=22, n=31, p=0.61) # 22/31 es el éxito en DAM; 0.61 es el exito en MET
Exact binomial test
data: 22 and 31
number of successes = 22, number of trials = 31, p-value = 0.2761
alternative hypothesis: true probability of success is not equal to 0.61
95 percent confidence interval:
0.5196393 0.8577715
sample estimates:
probability of success
0.7096774
r <- c(22, 19); tot <- c(31, 31) # DAM/MET
prop.test(r, tot)
2-sample test for equality of proportions with continuity
correction
data: r out of tot
X-squared = 0.28804, df = 1, p-value = 0.5915
alternative hypothesis: two.sided
95 percent confidence interval:
-0.1698584 0.3634068
sample estimates:
prop 1 prop 2
0.7096774 0.6129032
heroin <- matrix(c(22, 19, 9, 12), nrow = 2, byrow = T)
colnames(heroin) <- c("DAM", "MET")
rownames(heroin) <- c("success", "failure")
heroin
DAM MET
success 22 19
failure 9 12
barplot(heroin)
chisq.test(heroin)
Pearson's Chi-squared test with Yates' continuity correction
data: heroin
X-squared = 0.28804, df = 1, p-value = 0.5915
fisher.test(heroin)
Fisher's Exact Test for Count Data
data: heroin
p-value = 0.5921
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.4723836 5.1300383
sample estimates:
odds ratio
1.532994
p1 <- 22/31; p0 <- 19/31
n1 <- 31; n0 <- 31
RD <- p1 - p0
SE.RD <- sqrt(((p1*(1-p1))/n1) + ((p0*(1-p0))/n0))
CI95.RD <- RD + c(-1, 1) * (1.96 * SE.RD)
RD; CI95.RD
[1] 0.09677419
[1] -0.1376046 0.3311530
p1 <- 22/31; p0 <- 19/31
lnRR <- log(p1 / p0)
SE.lnRR <- sqrt((1/22)-(1/31)+(1/19)-(1/31))
CI95.lnRR <- lnRR + c(-1, 1) * (1.96 * SE.lnRR)
lnRR; CI95.lnRR
[1] 0.1466035
[1] -0.212510 0.505717
RR <- exp(0.1466035)
RR95.low <- exp(-0.212510)
RR95.high <- exp(0.505717)
RR; RR95.low; RR95.high
[1] 1.157895
[1] 0.8085522
[1] 1.658174
odds1 <- 22/9; odds0 <- 19/12
lnOR <- log(odds1 / odds0)
SE.lnOR <- sqrt((1/22)+(1/9)+(1/19)+(1/12))
CI95.lnOR <- lnOR + c(-1, 1) * (1.96 * SE.lnOR)
lnOR; CI95.lnOR
[1] 0.4342855
[1] -0.6258019 1.4943730
OR <- exp(0.4342855)
OR95.low <- exp(-0.6258019)
OR95.high <- exp(1.4943730)
OR; OR95.low; OR95.high
[1] 1.54386
[1] 0.5348324
[1] 4.456541
paralisis <- c(33, 115) # casos de parálisis en vacuna / placebo respectivamente
N <- c(200745, 201229) # Número total de sujetos aleatorizados a vacuna / placebo
(risk.vacuna <- 33 / 200745 * 100000)
[1] 16.43877
(risk.placebo <- 115 / 201229 * 100000)
[1] 57.14882
(RD <- risk.placebo - risk.vacuna)
[1] 40.71005
(NNT <- ceiling(1/RD))
[1] 1
prop.test(paralisis, N)
2-sample test for equality of proportions with continuity
correction
data: paralisis out of N
X-squared = 44.153, df = 1, p-value = 3.038e-11
alternative hypothesis: two.sided
95 percent confidence interval:
-0.0005306031 -0.0002835980
sample estimates:
prop 1 prop 2
0.0001643877 0.0005714882
El modelo de regresión lineal para una variable numérica de resultado, el modelo de regresión logística para una variable binaria/dicotómica de resultado, y el modelo de regresión de Poisson para contajes, no son más que aspectos específicos del modelo lineal general(GLM). En R se pueden ajustar con la función glm() que tiene el argumento family que describe la distribución del error y el argumento link que define la unión entre el resultado y la parte explicativa del modelo
R tiene la librería survival para realizar análisis de supervivencia, con funciones para obtener estimaciones de Kaplan-Meier (survfit()), log-rank test (survdiff()), regresión de Cox (coxph()), y para modelos paramétricos de supervivencia con la función survreg()
Los modelos se estructuran en base a una fórmula, que es una descripción simbólica del modelo, y representa algebraicamente los efectos aditivos de acuerdo a los objetos que almacenan los datos:
Funciones para el ajuste de modelos lineales, y para extraer información de ellos
Funciones para el ajuste de modelos lineales, y para extraer información de ellos
La librería lessR() tiene como lema menos código, más resultados. Presenta funciones útiles para el análisis descriptivo y para tests estadísticos clásicos. Es recomendable tanto como herramienta de análisis como herrramienta de docencia
Como para cualquier package en CRAN, primero habría que descargarlo (install.packages(“lessR”)), y luego cargarlo en memoria (library(lessR)), para poder trabajar con él
data(sleep)
t.test(extra ~ factor(group), data = sleep, var.equal = TRUE)
Two Sample t-test
data: extra by factor(group)
t = -1.8608, df = 18, p-value = 0.07919
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-3.363874 0.203874
sample estimates:
mean in group 1 mean in group 2
0.75 2.33
library(lessR)
ttest(extra ~ group, data=sleep, brief=TRUE)
------------------------------------------------------------
Compare extra across group levels 2 and 1
------------------------------------------------------------
extra for group 2: n.miss = 0, n = 10, mean = 2.33, sd = 2.00
extra for group 1: n.miss = 0, n = 10, mean = 0.75, sd = 1.79
---
t-cutoff: tcut = 2.101
Standard Error of Mean Difference: SE = 0.85
Hypothesis Test of 0 Mean Diff: t = 1.861, df = 18, p-value = 0.079
Margin of Error for 95% Confidence Level: 1.78
95% Confidence Interval for Mean Difference: -0.20 to 3.36
Sample Mean Difference of extra: 1.58
Standardized Mean Difference of extra, Cohen's d: 0.83
95% Confidence Interval for smd: -0.10 to 1.74
--------------------------------------------------
La función t.test() devuelve el valor t, sus grados de libertad y el p-valor asociado, las medias de cada grupo, y el IC al 95% de su diferencia
La función ttest() de lessR, versión breve, devuelve además la media, DE, y número de observaciones por grupo, la diferencia de medias bruta y estandarizada, y su IC al 95%. Incluye un gráfico que permite apreciar la separación entre grupos
La función ttest() de lessR, versión extendida, añade además (1) un análisis de las asunciones subyacentes (distribución normal de la variable resultado en cada grupo, igualdad de varianzas entre los grupos en comparación), (2) los resultados asumiendo - y sin asumir - igualdad de varianzas, y (3) un análisis de la importancia práctica de la diferencia de medias, y de la diferencia estandarizada de medias, en caso de que se hubieran establecido previamente
A diferencia de otros programas, R tiene una curva de aprendizaje larga. Aprender R es utilizarlo, cometer errores y resolverlos, sea por uno mismo, o con el apoyo de la muy extensa comunidad de R. En mi experiencia, la mejor forma de aprender los rudimentos de un nuevo programa ha sido siempre el utilizarlo en un proyecto nuevo, y desarrollarlo enteramente con ese programa
El objetivo de este curso ha sido introducir R como herramienta de análisis estadístico y como tal no ha desarrollado contenidos de estadística teórica (teorema central del límite, probabilidad y pruebas de hipótesis), ni contenidos aplicados de interés para estudiantes de ramas biomédicas (regresión logística, análisis de supervivencia…). Tampoco ha presentado los aspectos de programación y simulación que son uno de los principales recursos de R en el trabajo académico. Para quién quiera profundizar en esos aspectos, las referencias bibliográficas del curso son un buen camino a seguir…
Se realizan múltiples pruebas de hipótesis cuando:
Enjoy the result you have found by exploratory data analysis, for you will not find it again
Stephen Senn