Rubén Cuevas Menéndez Interpretación de los datos obtenidos Nuestro parseador generará un “listado_parseado.txt” que estará preparado para ser leído por cualquier programa. Utilizaremos R para el análisis del listado que hemos obtenido. Lo cargamos: listado <- read.table("/home/rcm/listado_parseado.txt", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) Necesitamos separar los datos de cada muestra: muestra1 <- subset(listado, subset=muestra==1) muestra2 <- subset(listado, subset=muestra==2) muestra3 <- subset(listado, subset=muestra==3) muestra4 <- subset(listado, subset=muestra==4) Análisis de los tiempos de transmisión de la muestra 1: > numSummary(muestra1[,"segundos"], statistics=c("mean", + "sd", "quantiles", "cv", "skewness", "kurtosis"), + quantiles=c(0,.25,.5,.75,1), type="2") mean sd cv skewness kurtosis 0% 25% 50% 2.210865 5.197003 2.350665 7.920689 98.01905 0.48 0.59 0.71 75% 100% n 1.37 104.7 2625 Resulta muy evidente que no se trata de una distribución normal de los datos. El coeficiente de asimetría toma un valor muy alto, por lo que la distribución es asimétrica a la derecha. Es decir, hay valores altos bastante alejados de la media, mientras que los valores bajos están más concentrados y cercanos al valor medio. El coeficiente de curtosis es extremadamente alto, lo que supone que hay una frecuencia muy alta de valores concentrados en el centro, mientras que los valores en los extremos son muy raros. Esta situación se ve fácilmente en los percentiles; el 75% de los tiempos son iguales o menores que 1.37 segundos, mientras que el valor máximo se sitúa en 104.7 segundos. Si decimos al programa que nos muestre también los percentiles 90 y 95, confirmaremos que los valores extremadamente altos representan menos de un 5% de los datos de la muestra. La media no resulta para nada representativa. El coeficiente de variación nos indica una dispersión relativa del 235% que indica que es preferible elegir la mediana (percentil 50) como valor central. Entonces podemos decir que la mitad de los tiempos fueron 0.71 segundos o menos, y la otra mitad 0.71 segundos o más. Dicho de otra forma, cada archivo fue transferido en un tiempo de alrededor de 0.71 segundos. Análisis de los tiempos de transmisión de la muestra 2: > numSummary(muestra2[,"segundos"], statistics=c("mean", + "sd", "quantiles", "cv", "skewness", "kurtosis"), + quantiles=c(0,.25,.5,.75,1), type="2") mean sd cv skewness kurtosis 0% 25% 50% 2.244107 5.206983 2.320292 7.883185 96.70875 0.5 0.6 0.74 75% 100% n 1.44 104.1 2603 Los resultados son casi idénticos a los de la muestra 1 por lo que su interpretación es exactamente la misma. Tenemos que escoger la mediana como valor central, por lo que en este caso decimos que los tiempos de transferencia se situaron en torno a 0.74 segundos. Análisis de los tiempos de transmisión de la muestra 3: > numSummary(muestra3[,"segundos"], statistics=c("mean", + "sd", "quantiles", "cv", "skewness", "kurtosis"), + quantiles=c(0,.25,.5,.75,1), type="2") mean sd cv skewness kurtosis 0% 25% 50% 1.370864 2.27998 1.66317 6.318308 62.94163 0.5 0.58 0.65 75% 100% n 1 40.52 2603 Los coeficientes de asimetría y de curtosis siguen siendo muy altos, aunque, al igual que la media y el coeficiente de variación, son menores respecto a las muestras anteriores. Esto no nos sorprende ya que en esta muestra ya se aplica la compresión de los ficheros, por lo que el tamaño de estos se reduce y por tanto se reduce su tiempo de transmisión. Aun así, los valores bajos siguen estando muy concentrados y cercanos al centro y representan la gran mayoría de los tiempos, mientras que los valores altos son escasos y muy alejados de la media. El coeficiente de variación nos indica una dispersión relativa del 228%, por lo que tenemos que escoger la mediana como medida de centro. Entonces decimos que los tiempos de transmisión de cada fichero se situaron en torno a los 0.65 segundos. Análisis de los tiempos de la muestra 4 > numSummary(muestra4[,"segundos"], statistics=c("mean", + "sd", "quantiles", "cv", "skewness", "kurtosis"), + quantiles=c(0,.25,.5,.75,1), type="2") mean sd cv skewness kurtosis 0% 25% 50% 1.29962 2.230094 1.715959 6.731863 72.45008 0.5 0.56 0.62 75% 100% n 0.91 41.9 2603 La curtosis es casi 10 puntos más alta que en la muestra 3. Esto implica que la frecuencia de valores que se acumulan en torno el centro es mucho mayor, lo que explica la notable disminución del coeficiente de variación, que ahora se sitúa en 171%. A pesar de todo este valor sigue siendo demasiado alto para considerar a la media como medida de centro fiable, por lo que volvemos a escoger la mediana. La mitad de los archivos tardaron 0.62 segundos o menos en transferirse y la otra mitad tardó 0.62 segundos o más. Ahora hacemos dos grupos de datos: uno con los datos de ‘scp ‘ y otro con los de ‘scp -C’ > sincompresion <- subset(listado, subset=(compresion==0)) > concompresion <- subset(listado, subset=(compresion==1)) Análisis de ‘scp’: > numSummary(sincompresion[,"segundos"], statistics=c("mean", "sd", + "quantiles", "cv", "skewness", "kurtosis"), quantiles=c(0,.25,.5,.75,1), + type="2") mean sd cv skewness kurtosis 0% 25% 50% 75% 100% n 2.227416 5.201503 2.335219 7.899602 97.2683 0.48 0.6 0.73 1.4 104.7 5228 Análisis de ‘scp –C’: > numSummary(concompresion[,"segundos"], statistics=c("mean", "sd", + "quantiles", "cv", "skewness", "kurtosis"), quantiles=c(0,.25,.5,.75,1), + type="2") mean sd cv skewness kurtosis 0% 25% 50% 75% 100% n 1.335242 2.25524 1.689012 6.516152 67.42107 0.5 0.57 0.63 0.96 41.9 5206 Se aprecia una disminución notable en la variación con ‘scp –C’, pero sigue siendo demasiado alta como para considerar a la media la mejor medida central. Tomamos la mediana como medida de centro en ambos casos y observamos que los tiempos con ‘scp –C’ fueron un 13,7 % más rápidos que con ‘scp’. Tenemos que estudiar ahora la posibilidad de predecir el tiempo de transmisión sabiendo el tamaño del fichero(en el listado el tamaño aparece en KB). No es necesario distinguir en este caso entre ‘scp’ y ‘scp –C’ ya que el uso de uno o de otro simplemente cambia el tamaño del fichero, con lo que este estudio lo haremos con el listado completo. Realizamos el ajuste lineal: > RegModel.1 <- lm(segundos~tamanio, data=listado) > summary(RegModel.1) Call: lm(formula = segundos ~ tamanio, data = listado) Residuals: Min 1Q Median 3Q Max -33.862 -0.110 -0.045 0.035 30.318 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 5.774e-01 1.684e-02 34.29 <2e-16 *** tamanio 7.704e-03 3.342e-05 230.53 <2e-16 *** --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 1.635 on 10432 degrees of freedom Multiple R-squared: 0.8359, Adjusted R-squared: 0.8359 F-statistic: 5.314e+04 on 1 and 10432 DF, p-value: < 2.2e-16 El coeficiente de determinación R^2 es 0.8359, esto es, el ajuste explica el 83.59% de los tiempos. Consideramos que el ajuste es válido, así que es posible predecir el tiempo de transferencia a partir del tamaño del fichero mediante la recta: > coef(RegModel.1) (Intercept) tamanio 0.577418115 0.007703998 y = 0.577418115 + 0.007703998x donde ‘x’ es el tamaño del fichero en KB e ‘y’ el tiempo en segundos. Gráficamente, se ve así: > plot(listado$tamanio, listado$segundos) > abline(RegModel.1) R también nos ofrece una manera más cómoda de predecir los resultados. Por ejemplo, si queremos saber el tiempo que tardará en transferirse un archivo de 100 KB: > predict(RegModel.1, data.frame(tamanio=100)) 1 1.347818 Un archivo de 100 KB tardará sobre 1.35 segundos en transferirse. Nuestro último objetivo será estudiar la relación entre la velocidad que marca ‘scp’ y la velocidad que nosotros calculamos a partir del tamaño del fichero y el tiempo que tarda en transferirse. vel <- listado$velocidad velcalc <- listado$tamanio / listado$tiempo relacion_vels <- vel/velcalc El listado mostraba la velocidad en KB/s solamente con un decimal. Por tanto, cuando la velocidad era inferior a 0.1 KB/s, se mostraba como 0.0 KB/s. Esos datos son inválidos pues no representan la velocidad real. Nos deshacemos de esos datos: relacion_vels <- subset(relacion_vels, subset=relacion_vels != 0) Ahora tenemos que observar los resultados: > numSummary(relacion_vels, statistics=c("mean","sd","quantiles", "cv", "skewness", "kurtosis")) mean sd cv skewness kurtosis 0% 25% 50% 1.529615 2.383405 1.558173 3.729632 14.68496 0.4064733 0.5827627 0.684297 75% 100% n 1.132244 18.34811 10394 La situación ideal sería que la media fuese 1, ya que indicaría que la velocidad indicada por ‘scp’ se ajustaría un 100% a la velocidad que nosotros hemos calculado. Aquí la media no sería representativa dada la variación y la asimetría, por lo que podríamos tomar la mediana como medida central y decir que la velocidad dada por scp se ajusta en un 68,4% a la relación tamaño/segundos. Si queremos deshacernos de los datos muy extremos, podemos utilizar la media recortada al 5%: mean(relacion_vels,trim=0.05) [1] 1.088427 Eliminando los datos extremos, la velocidad que marca ‘scp’ se ajusta casi perfectamente a nuestra velocidad.