Spaces:
Sleeping
Sleeping
FreddyHernandez
commited on
Commit
•
3e4571e
1
Parent(s):
bf6d097
Upload 6 files
Browse filesNuevos archivos
- include.html +0 -0
- include.md +22 -0
- server.R +92 -0
- ui.R +103 -0
- var.test.R +146 -0
- var_data.txt +101 -0
include.html
ADDED
The diff for this file is too large to render.
See raw diff
|
|
include.md
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Prueba de hipótesis para la varianza
|
2 |
+
|
3 |
+
Sea $X_1, X_2, \ldots, X_n$ una muestra aleatoria proveniente de una población normal con varianza $\sigma^2$ y supóngase que se desea probar la hipótesis de que $\sigma^2$ es igual a un valor de referencia $\sigma^2_0$, es decir, la hipótesis nula a estudiar es $H_0: \sigma^2 = \sigma_0^2$. En este problema las sospechas sobre la varianza $\sigma^2$ se resumen por medio de la hipótesis alterna ($H_a$) en una de tres situaciones como se muestra a continuación:
|
4 |
+
|
5 |
+
- $H_a: \sigma^2 < \sigma_0^2$,
|
6 |
+
- $H_a: \sigma^2 \neq \sigma_0^2$,
|
7 |
+
- $H_a: \sigma^2 > \sigma_0^2$,
|
8 |
+
|
9 |
+
El estadístico para realizar la prueba es:
|
10 |
+
|
11 |
+
$$
|
12 |
+
X_0^2=\frac{(n-1) S^2}{\sigma_0^2},
|
13 |
+
$$
|
14 |
+
|
15 |
+
donde $S$ corresponde a la desviación estándar muestral. Bajo la suposición de que $H_0$ es verdadera, el estadístico $X_0^2$ tiene distribución $\chi^2$ con $n-1$ grados de libertad.
|
16 |
+
|
17 |
+
Si el valor calculado para el estadístico dado en la ecuación anterior se denota por $\chi_0^2$, entonces el valor-$P$ de la prueba se calcula de acuerdo a la hipótesis alterna $H_a$ así:
|
18 |
+
|
19 |
+
- Si $H_a: \sigma^2 < \sigma_0^2$ entonces valor-$P$=$P(\chi^2_{n-1} < \chi_0^2)$.
|
20 |
+
- Si $H_a: \sigma^2 \neq \sigma_0^2$ entonces valor-$P$=$2 \times \min \left\{ P(\chi^2_{n-1} < \chi_0^2),~ P(\chi^2_{n-1} > \chi_0^2) \right\}$.
|
21 |
+
- Si $H_a: \sigma^2 > \sigma_0^2$ entonces valor-$P$=$P(\chi^2_{n-1} > \chi_0^2)$.
|
22 |
+
|
server.R
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
library(shiny)
|
2 |
+
source('var.test.R')
|
3 |
+
|
4 |
+
shinyServer(function(input,output,session){
|
5 |
+
|
6 |
+
observe({
|
7 |
+
inFile <- input$file1
|
8 |
+
if(is.null(inFile))
|
9 |
+
dt <- read.table('var_data.txt', header=T, sep='\t')
|
10 |
+
else dt <- read.csv(inFile$datapath, header=input$header,
|
11 |
+
sep=input$sep)
|
12 |
+
updateSelectInput(session, "variable", choices=names(dt))
|
13 |
+
})
|
14 |
+
|
15 |
+
output$statistic <- renderTable({
|
16 |
+
inFile <- input$file1
|
17 |
+
if(is.null(inFile))
|
18 |
+
dt <- read.table('var_data.txt', header=T, sep='\t')
|
19 |
+
else dt <- read.csv(inFile$datapath, header=input$header,
|
20 |
+
sep=input$sep)
|
21 |
+
y <- na.omit(dt[, input$variable]) # Para sacar los NA de la variable
|
22 |
+
res <- data.frame(Min=min(y), Var=var(y),
|
23 |
+
Max=max(y), n=length(y))
|
24 |
+
colnames(res) <- c('Mínimo', 'Varianza', 'Máximo', 'Número obs')
|
25 |
+
res
|
26 |
+
}, align='c', bordered=TRUE)
|
27 |
+
|
28 |
+
output$appPlot <- renderPlot({
|
29 |
+
inFile <- input$file1
|
30 |
+
if(is.null(inFile))
|
31 |
+
dt <- read.table('var_data.txt', header=T, sep='\t')
|
32 |
+
else dt <- read.csv(inFile$datapath, header=input$header, sep=input$sep)
|
33 |
+
par(mfrow=c(1, 2), bg='gray98')
|
34 |
+
y <- na.omit(dt[, input$variable]) # Para sacar los NA de la variable
|
35 |
+
hist(y, col='deepskyblue3', freq=F, las=1,
|
36 |
+
xlab=as.character(input$variable),
|
37 |
+
main='Histograma y densidad', ylab='Densidad')
|
38 |
+
lines(density(y), lwd=4, col='firebrick3')
|
39 |
+
qqnorm(y, las=1, main='QQplot',
|
40 |
+
pch=19, col='deepskyblue3',
|
41 |
+
ylab=as.character(input$variable))
|
42 |
+
qqline(y)
|
43 |
+
ks <- ks.test(x=y, y=pnorm)
|
44 |
+
legend('topleft', bty='n', col='red', text.col='deepskyblue3',
|
45 |
+
legend=paste('Valor P=', round(ks$p.value,2)))
|
46 |
+
})
|
47 |
+
|
48 |
+
output$inputData <- renderTable({
|
49 |
+
inFile <- input$file1
|
50 |
+
if(is.null(inFile))
|
51 |
+
dt <- read.table('var_data.txt', header=T, sep='\t')
|
52 |
+
else dt <- read.csv(inFile$datapath, header=input$header,
|
53 |
+
sep=input$sep)
|
54 |
+
dt
|
55 |
+
})
|
56 |
+
|
57 |
+
output$resul1 <- renderText({
|
58 |
+
inFile <- input$file1
|
59 |
+
if(is.null(inFile))
|
60 |
+
dt <- read.table('var_data.txt', header=T, sep='\t')
|
61 |
+
else dt <- read.csv(inFile$datapath, header=input$header,
|
62 |
+
sep=input$sep)
|
63 |
+
y <- na.omit(dt[, input$variable]) # Para sacar los NA de la variable
|
64 |
+
ph <- var.test(x=y, alternative=input$h0,
|
65 |
+
null.value=input$sigma20,
|
66 |
+
conf.level=input$alfa)
|
67 |
+
paste0('El estadístico de prueba es ', round(ph$statistic, 2),
|
68 |
+
' con un valor-P de ', round(ph$p.value, 4), '.')
|
69 |
+
})
|
70 |
+
|
71 |
+
output$resul2 <- renderText({
|
72 |
+
inFile <- input$file1
|
73 |
+
if(is.null(inFile))
|
74 |
+
dt <- read.table('var_data.txt', header=T, sep='\t')
|
75 |
+
else dt <- read.csv(inFile$datapath, header=input$header,
|
76 |
+
sep=input$sep)
|
77 |
+
y <- na.omit(dt[, input$variable]) # Para sacar los NA de la variable
|
78 |
+
ph <- var.test(x=y, alternative=input$h0,
|
79 |
+
null.value=input$sigma20,
|
80 |
+
conf.level=input$alfa)
|
81 |
+
intervalo <- paste("(", round(ph$conf.int[1], digits=4), ", ",
|
82 |
+
round(ph$conf.int[2], digits=4), ").", sep='')
|
83 |
+
paste0('El intervalo de confianza del ', 100*input$alfa,
|
84 |
+
'% para la varianza poblacional es ', intervalo)
|
85 |
+
})
|
86 |
+
|
87 |
+
output$miteoria <- renderUI({
|
88 |
+
HTML(markdown::markdownToHTML(knit(input='include.md', quiet=TRUE)))
|
89 |
+
})
|
90 |
+
|
91 |
+
})
|
92 |
+
|
ui.R
ADDED
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
library(shiny)
|
2 |
+
library(markdown)
|
3 |
+
|
4 |
+
shinyUI(pageWithSidebar(
|
5 |
+
headerPanel(title=HTML("Prueba de hipótesis para la varianza
|
6 |
+
σ<sup>2</sup>"),
|
7 |
+
windowTitle="PH varianza"),
|
8 |
+
sidebarPanel(
|
9 |
+
h5('Esta aplicación realiza la prueba de hipótesis para la
|
10 |
+
varianza de una variable cuantitativa con distribución normal.'),
|
11 |
+
|
12 |
+
h6('La aplicación usa una base de datos de ejemplo pero el usuario
|
13 |
+
puede cargar su propia base de datos.'),
|
14 |
+
|
15 |
+
fileInput(inputId='file1',
|
16 |
+
label='Use el siguiente botón para cargar su base de datos.',
|
17 |
+
accept = c(
|
18 |
+
'text/csv',
|
19 |
+
'text/comma-separated-values',
|
20 |
+
'text/tab-separated-values',
|
21 |
+
'text/plain',
|
22 |
+
'.csv',
|
23 |
+
'.tsv'
|
24 |
+
)),
|
25 |
+
|
26 |
+
checkboxInput(inputId='header',
|
27 |
+
label='¿Tiene encabezado la base de datos?',
|
28 |
+
value=TRUE),
|
29 |
+
|
30 |
+
selectInput(inputId="sep",
|
31 |
+
label = "¿Cuál es la separación de los datos?",
|
32 |
+
choices = list(Tab='\t', Comma=',',
|
33 |
+
Semicolon=';', 'Space'=' '),
|
34 |
+
selected = ';'),
|
35 |
+
|
36 |
+
selectInput(inputId="variable",
|
37 |
+
label="Elija la variable cuantitativa para realizar
|
38 |
+
la prueba de hipótesis.",
|
39 |
+
choices=""),
|
40 |
+
|
41 |
+
numericInput(inputId='sigma20',
|
42 |
+
label=HTML("Ingrese el valor de referencia
|
43 |
+
σ<sup>2</sup><sub>0</sub>
|
44 |
+
para probar H<sub>0</sub>:
|
45 |
+
σ<sup>2</sup> = σ
|
46 |
+
<sup>2</sup><sub>0</sub>"),
|
47 |
+
value=20, min=0, step=0.1),
|
48 |
+
|
49 |
+
selectInput(inputId="h0",
|
50 |
+
label=HTML("Elija la hipótesis alternativa
|
51 |
+
< , ≠ o >"),
|
52 |
+
choices=list("Menor" = "less",
|
53 |
+
"Diferente" = "two.sided",
|
54 |
+
"Mayor" = "greater"),
|
55 |
+
selected = "two.sided"),
|
56 |
+
|
57 |
+
sliderInput(inputId='alfa',
|
58 |
+
label=HTML("Opcional: elija un nivel de confianza para
|
59 |
+
construir el intervalo de confianza para
|
60 |
+
la varianza σ<sup>2</sup>"),
|
61 |
+
min=0.90, max=0.99,
|
62 |
+
value=0.95, step=0.01),
|
63 |
+
|
64 |
+
img(src="logo.png", height = 60, width = 120),
|
65 |
+
img(src="udea.png", height = 25, width = 70),
|
66 |
+
img(src="cua.png", height = 40, width = 110),
|
67 |
+
br(),
|
68 |
+
tags$a(href="https://srunal.github.io", "https://srunal.github.io")
|
69 |
+
|
70 |
+
),
|
71 |
+
|
72 |
+
mainPanel(
|
73 |
+
tabsetPanel(type = "pills",
|
74 |
+
|
75 |
+
tabPanel(title="Resultados",
|
76 |
+
h5('A continuación el histograma, la densidad,
|
77 |
+
el QQplot
|
78 |
+
y valor-P de la prueba de normalidad
|
79 |
+
Kolmogorov-Smirnov para la muestra.'),
|
80 |
+
plotOutput("appPlot",
|
81 |
+
width='500px',
|
82 |
+
height='300px'),
|
83 |
+
h4("- Tabla de resumen con los estadísticos muestrales:"),
|
84 |
+
tableOutput('statistic'),
|
85 |
+
|
86 |
+
h4("- Resultados de la prueba de hipótesis:"),
|
87 |
+
textOutput("resul1"),
|
88 |
+
|
89 |
+
h4(HTML("- Intervalo de confianza para la varianza
|
90 |
+
σ<sup>2</sup>:")),
|
91 |
+
textOutput("resul2")
|
92 |
+
|
93 |
+
),
|
94 |
+
|
95 |
+
tabPanel("Datos", "A continuación los datos que está usando
|
96 |
+
la aplicación.",
|
97 |
+
uiOutput('inputData')),
|
98 |
+
|
99 |
+
tabPanel("Teoría", includeHTML("include.html"))
|
100 |
+
)
|
101 |
+
)
|
102 |
+
|
103 |
+
))
|
var.test.R
ADDED
@@ -0,0 +1,146 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var.test <- function(x, alternative='two.sided',
|
2 |
+
null.value=1, conf.level=0.95) {
|
3 |
+
alpha <- 1 - conf.level
|
4 |
+
n <- length(x)
|
5 |
+
|
6 |
+
if (alternative == 'two.sided') {
|
7 |
+
alt <- 'not equal to'
|
8 |
+
quantiles <- c(qchisq(p=alpha/2, df=n-1, lower.tail=F),
|
9 |
+
qchisq(p=1-alpha/2, df=n-1, lower.tail=F))
|
10 |
+
conf.int <- (n-1) * var(x) / quantiles
|
11 |
+
statistic <- (n-1) * var(x) / null.value
|
12 |
+
p.value <- 2 * min(c(pchisq(statistic, n-1, lower.tail=F),
|
13 |
+
pchisq(statistic, n-1, lower.tail=T)))
|
14 |
+
}
|
15 |
+
|
16 |
+
if (alternative == 'less') {
|
17 |
+
alt <- 'less than'
|
18 |
+
quantiles <- c(qchisq(p=conf.level, df=n-1, lower.tail=F),
|
19 |
+
0)
|
20 |
+
conf.int <- (n-1) * var(x) / quantiles
|
21 |
+
statistic <- (n-1) * var(x) / null.value
|
22 |
+
p.value <- pchisq(statistic, n-1)
|
23 |
+
}
|
24 |
+
|
25 |
+
if (alternative == 'greater') {
|
26 |
+
alt <- 'greater than'
|
27 |
+
quantiles <- c(0,
|
28 |
+
qchisq(p=conf.level, df=n-1, lower.tail=T))
|
29 |
+
conf.int <- (n-1) * var(x) / quantiles
|
30 |
+
statistic <- (n-1) * var(x) / null.value
|
31 |
+
p.value <- pchisq(statistic, n-1, lower.tail=F)
|
32 |
+
}
|
33 |
+
|
34 |
+
res <- list(conf.int=conf.int, statistic=statistic, df=n-1,
|
35 |
+
alternative=alternative,
|
36 |
+
alt=alt, null.value=null.value,
|
37 |
+
conf.level=conf.level,
|
38 |
+
data.name=deparse(substitute(x)),
|
39 |
+
p.value=p.value, sample.var=var(x))
|
40 |
+
class(res) <- "vartest"
|
41 |
+
res
|
42 |
+
}
|
43 |
+
|
44 |
+
|
45 |
+
|
46 |
+
var_test_one <- function(varx, nx, alternative, conf.level, null.value) {
|
47 |
+
alpha <- 1 - conf.level
|
48 |
+
# Alternative two.sided
|
49 |
+
if (alternative == 'two.sided') {
|
50 |
+
quantiles <- c(qchisq(p=alpha/2, df=nx-1, lower.tail=F),
|
51 |
+
qchisq(p=1-alpha/2, df=nx-1, lower.tail=F))
|
52 |
+
conf.int <- (nx-1) * varx / quantiles
|
53 |
+
statistic <- (nx-1) * varx / null.value
|
54 |
+
p.value <- 2 * min(c(pchisq(statistic, nx-1, lower.tail=F),
|
55 |
+
pchisq(statistic, nx-1, lower.tail=T)))
|
56 |
+
}
|
57 |
+
# Alternative less
|
58 |
+
if (alternative == 'less') {
|
59 |
+
quantiles <- c(qchisq(p=conf.level, df=nx-1, lower.tail=T),
|
60 |
+
0)
|
61 |
+
conf.int <- (nx-1) * varx / quantiles
|
62 |
+
statistic <- (nx-1) * varx / null.value
|
63 |
+
p.value <- pchisq(statistic, nx-1)
|
64 |
+
}
|
65 |
+
# Alternative greater
|
66 |
+
if (alternative == 'greater') {
|
67 |
+
quantiles <- c(Inf,
|
68 |
+
qchisq(p=conf.level, df=nx-1, lower.tail=F))
|
69 |
+
conf.int <- (nx-1) * varx / quantiles
|
70 |
+
statistic <- (nx-1) * varx / null.value
|
71 |
+
p.value <- pchisq(statistic, nx-1, lower.tail=F)
|
72 |
+
}
|
73 |
+
|
74 |
+
# To ensure that the output values are in the correct form
|
75 |
+
names(statistic) <- 'X-squared'
|
76 |
+
parameter <- nx - 1
|
77 |
+
names(parameter) <- 'df'
|
78 |
+
attr(conf.int, 'conf.level') <- conf.level
|
79 |
+
estimate <- varx
|
80 |
+
names(estimate) <- 'variance of x'
|
81 |
+
method <- 'X-squared test for variance'
|
82 |
+
data.name <- paste('varx =', varx, 'and nx =', nx)
|
83 |
+
|
84 |
+
res <- list(statistic=statistic,
|
85 |
+
parameter=parameter,
|
86 |
+
p.value=p.value,
|
87 |
+
conf.int=conf.int,
|
88 |
+
estimate=estimate,
|
89 |
+
null.value=null.value,
|
90 |
+
alternative=alternative,
|
91 |
+
method=method,
|
92 |
+
data.name=data.name)
|
93 |
+
return(res)
|
94 |
+
}
|
95 |
+
|
96 |
+
var_test_two <- function(varx, nx, vary, ny,
|
97 |
+
alternative, conf.level, null.value) {
|
98 |
+
alpha <- 1 - conf.level
|
99 |
+
# Alternative two.sided
|
100 |
+
if (alternative == 'two.sided') {
|
101 |
+
quantiles <- c(qf(p=alpha/2, df1=nx-1, df2=ny-1, lower.tail=F),
|
102 |
+
qf(p=1-alpha/2, df1=nx-1, df2=ny-1, lower.tail=F))
|
103 |
+
conf.int <- (varx / vary) / quantiles
|
104 |
+
statistic <- (varx / vary) / null.value
|
105 |
+
p.value <- 2 * min(c(pf(statistic, nx-1, ny-1, lower.tail=F),
|
106 |
+
pf(statistic, nx-1, ny-1, lower.tail=T)))
|
107 |
+
}
|
108 |
+
# Alternative less
|
109 |
+
if (alternative == 'less') {
|
110 |
+
quantiles <- c(Inf,
|
111 |
+
qf(p=conf.level, df1=nx-1, df2=ny-1, lower.tail=F))
|
112 |
+
conf.int <- (varx / vary) / quantiles
|
113 |
+
statistic <- (varx / vary) / null.value
|
114 |
+
p.value <- pf(q=statistic, df1=nx-1, df2=ny-1, lower.tail=T)
|
115 |
+
}
|
116 |
+
# Alternative greater
|
117 |
+
if (alternative == 'greater') {
|
118 |
+
quantiles <- c(qf(p=conf.level, df1=nx-1, df2=ny-1, lower.tail=T),
|
119 |
+
0)
|
120 |
+
conf.int <- (varx / vary) / quantiles
|
121 |
+
statistic <- (varx / vary) / null.value
|
122 |
+
p.value <- pf(q=statistic, df1=nx-1, df2=ny-1, lower.tail=F)
|
123 |
+
}
|
124 |
+
|
125 |
+
# To ensure that the output values are in the correct form
|
126 |
+
names(statistic) <- 'F'
|
127 |
+
parameter <- c(nx-1, ny-1)
|
128 |
+
names(parameter) <- c('num df', 'denom df')
|
129 |
+
attr(conf.int, 'conf.level') <- conf.level
|
130 |
+
estimate <- varx / vary
|
131 |
+
names(estimate) <- 'ratio of variances'
|
132 |
+
method <- 'F test to compare two variances'
|
133 |
+
data.name <- paste('varx =', varx, ', nx =', nx,
|
134 |
+
', vary =', vary, 'and ny =', ny)
|
135 |
+
|
136 |
+
res <- list(statistic=statistic,
|
137 |
+
parameter=parameter,
|
138 |
+
p.value=p.value,
|
139 |
+
conf.int=conf.int,
|
140 |
+
estimate=estimate,
|
141 |
+
null.value=null.value,
|
142 |
+
alternative=alternative,
|
143 |
+
method=method,
|
144 |
+
data.name=data.name)
|
145 |
+
return(res)
|
146 |
+
}
|
var_data.txt
ADDED
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Weigth Heigth
|
2 |
+
53.09817 168.9792
|
3 |
+
60.2536 154.0794
|
4 |
+
60.57112 178.5135
|
5 |
+
53.55212 145.6071
|
6 |
+
63.95424 145.1823
|
7 |
+
68.62175 146.6526
|
8 |
+
59.3937 150.1703
|
9 |
+
54.85139 154.1393
|
10 |
+
56.18212 211.1142
|
11 |
+
57.94596 155.6074
|
12 |
+
60.05633 180.7278
|
13 |
+
56.65037 153.8238
|
14 |
+
59.14473 160.6151
|
15 |
+
60.85186 172.8011
|
16 |
+
63.4691 168.2495
|
17 |
+
68.87719 190.7063
|
18 |
+
53.22856 193.0385
|
19 |
+
61.98031 152.1141
|
20 |
+
61.3466 178.4211
|
21 |
+
70.6553 162.0479
|
22 |
+
53.94735 138.9784
|
23 |
+
65.30227 178.686
|
24 |
+
67.90827 177.2521
|
25 |
+
60.19456 182.7935
|
26 |
+
63.14799 168.6113
|
27 |
+
50.74211 161.106
|
28 |
+
54.37209 149.4436
|
29 |
+
61.80647 162.5439
|
30 |
+
66.44006 204.6559
|
31 |
+
69.32612 180.8448
|
32 |
+
56.43465 166.6911
|
33 |
+
59.92681 162.9765
|
34 |
+
67.89035 159.6578
|
35 |
+
50.20544 162.7743
|
36 |
+
65.17708 162.8984
|
37 |
+
64.21323 189.4598
|
38 |
+
60.07455 150.462
|
39 |
+
57.61265 148.8138
|
40 |
+
66.2314 176.9834
|
41 |
+
53.15213 182.6959
|
42 |
+
56.11033 161.2404
|
43 |
+
55.2948 190.1691
|
44 |
+
60.50972 169.5429
|
45 |
+
63.83561 148.3607
|
46 |
+
65.33804 164.7481
|
47 |
+
54.50226 167.4611
|
48 |
+
65.59086 174.1593
|
49 |
+
55.52423 167.5852
|
50 |
+
67.02337 175.3402
|
51 |
+
62.62035 170.9605
|
52 |
+
68.87993 170.869
|
53 |
+
53.89413 169.9824
|
54 |
+
54.96583 172.2888
|
55 |
+
52.12436 188.0458
|
56 |
+
50.40455 196.4013
|
57 |
+
62.84082 165.8279
|
58 |
+
56.22349 155.3835
|
59 |
+
57.65475 156.3143
|
60 |
+
61.75107 175.7196
|
61 |
+
60.88272 170.8627
|
62 |
+
62.35261 170.2354
|
63 |
+
60.57066 176.973
|
64 |
+
63.32021 181.3175
|
65 |
+
68.06532 184.0032
|
66 |
+
62.78009 165.8424
|
67 |
+
52.65252 182.4191
|
68 |
+
66.70305 154.5413
|
69 |
+
51.62308 145.1807
|
70 |
+
56.02632 178.2507
|
71 |
+
57.55016 155.53
|
72 |
+
59.998 209.5686
|
73 |
+
62.53957 140.5118
|
74 |
+
61.46648 167.0732
|
75 |
+
70.13264 166.7734
|
76 |
+
60.09332 177.3142
|
77 |
+
61.39649 158.3873
|
78 |
+
60.20784 175.4754
|
79 |
+
51.45882 153.2652
|
80 |
+
49.993 163.1174
|
81 |
+
61.18023 150.3906
|
82 |
+
55.6152 161.9006
|
83 |
+
61.40898 149.1997
|
84 |
+
57.55849 180.9661
|
85 |
+
55.819 178.2533
|
86 |
+
59.39731 176.8483
|
87 |
+
59.94743 150.9343
|
88 |
+
56.59401 146.71
|
89 |
+
68.53324 175.1023
|
90 |
+
62.87226 173.1839
|
91 |
+
65.50766 169.1627
|
92 |
+
61.04492 168.7064
|
93 |
+
62.38285 185.0806
|
94 |
+
55.54364 162.3449
|
95 |
+
53.17127 175.9443
|
96 |
+
56.12465 162.7634
|
97 |
+
63.39455 182.122
|
98 |
+
61.88589 140.1003
|
99 |
+
67.47816 154.0689
|
100 |
+
60.24467 184.4114
|
101 |
+
64.1793 171.2866
|