\documentclass[preprint, 3p,
authoryear]{elsarticle} %review=doublespace preprint=single 5p=2 column
%%% Begin My package additions %%%%%%%%%%%%%%%%%%%

\usepackage[hyphens]{url}

  \journal{Cátedra Técnicas y Herramientas Modernas
I} % Sets Journal name

\usepackage{lineno} % add

\usepackage{graphicx}
%%%%%%%%%%%%%%%% end my additions to header

\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\usepackage{fixltx2e} % provides \textsubscript
% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \usepackage[utf8]{inputenc}
\else % if luatex or xelatex
  \usepackage{fontspec}
  \ifxetex
    \usepackage{xltxtra,xunicode}
  \fi
  \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
  \newcommand{\euro}{€}
\fi
% use microtype if available
\IfFileExists{microtype.sty}{\usepackage{microtype}}{}
\usepackage[]{natbib}
\bibliographystyle{plainnat}

\usepackage{graphicx}
\ifxetex
  \usepackage[setpagesize=false, % page size defined by xetex
              unicode=false, % unicode breaks when used with xetex
              xetex]{hyperref}
\else
  \usepackage[unicode=true]{hyperref}
\fi
\hypersetup{breaklinks=true,
            bookmarks=true,
            pdfauthor={},
            pdftitle={TyHM - Programación en R-CRan},
            colorlinks=false,
            urlcolor=blue,
            linkcolor=magenta,
            pdfborder={0 0 0}}

\setcounter{secnumdepth}{5}
% Pandoc toggle for numbering sections (defaults to be off)

% Pandoc syntax highlighting
\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% Add ',fontsize=\small' for more characters per line
\usepackage{framed}
\definecolor{shadecolor}{RGB}{248,248,248}
\newenvironment{Shaded}{\begin{snugshade}}{\end{snugshade}}
\newcommand{\AlertTok}[1]{\textcolor[rgb]{0.94,0.16,0.16}{#1}}
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.77,0.63,0.00}{#1}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}}
\newcommand{\BuiltInTok}[1]{#1}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textit{#1}}}
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}}
\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{\textbf{#1}}}
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{#1}}
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}}
\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{0.64,0.00,0.00}{\textbf{#1}}}
\newcommand{\ExtensionTok}[1]{#1}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}}
\newcommand{\ImportTok}[1]{#1}
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{\textbf{#1}}}
\newcommand{\NormalTok}[1]{#1}
\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.81,0.36,0.00}{\textbf{#1}}}
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{#1}}
\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textit{#1}}}
\newcommand{\RegionMarkerTok}[1]{#1}
\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}}
\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}}
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}

% tightlist command for lists without linebreak
\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}






\begin{document}


\begin{frontmatter}

  \title{TyHM - Programación en R-CRan}
    \author[Instituto de Ingeniería Industrial]{Ricardo R. Palma%
  \corref{cor1}%
  \fnref{1}}
   \ead{rpalma@uncu.edu.ar} 
    \author[IMESC FFyL]{Gustavo Masera}
   \ead{gustavo.masera@filosofia.uncuyo.edu.ar} 
    \author[Centro de Estudios y Aplicaciones Logísticas
UNCuyo]{Alejandro Gonzales%
  %
  \fnref{2}}
   \ead{eclesur@gmail.com} 
    \author[Some Institute of Technology]{Derek Zoolander%
  %
  \fnref{2}}
   \ead{derek@example.com} 
      \affiliation[Some Institute of Technology]{Department, Street,
City, State, Zip}
    \affiliation[Another University]{Department, Street, City, State,
Zip}
    \cortext[cor1]{Corresponding author}
    \fntext[1]{This is the first author footnote.}
    \fntext[2]{Another author footnote.}
  
  \begin{abstract}
  This is the abstract.

  It consists of two paragraphs.
  \end{abstract}
    \begin{keyword}
    keyword1 \sep 
    keyword2
  \end{keyword}
  
 \end{frontmatter}

\hypertarget{elementos-buxe1sicos-de-programaciuxf3n}{%
\section{Elementos básicos de
programación}\label{elementos-buxe1sicos-de-programaciuxf3n}}

En este breve tutorial examinaremos algunos elementos del lenguaje de
programación R y como valernos de ello para resolver problemas de la
vida cotidiana. Apelaremos a ejemplos bien conocidos, pero además
mostraremos las soluciones que desarrollaremos contra las misma que ya
están implementadas en R. Comparando el costo computacional, medido como
tiempo de ejecución. Esto nos permitirá entender la calidad del
algoritmo que implementemos. Como excusa para introducirnos propondremos
realizar tres experimentos y medir el tiempo ejecución.

Veremos:

\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist
\item
  Generar un vector secuencia
\item
  Implementación de una serie Fibonacci
\item
  Diseñar un algoritmo para la pesadilla de Gauss
\item
  Ordenación de un vector por método burbuja
\item
  Progresión geométrica del COVid-19
\item
  Algoritmo de funciones estadísticas (media y varianza)
\item
  Caso de estudio de r-pubs o rblogers
\end{enumerate}

\hypertarget{algunas-ideas-de-como-medir-el-tiempo-de-ejecucion}{%
\subsection{Algunas ideas de como medir el tiempo de
ejecucion}\label{algunas-ideas-de-como-medir-el-tiempo-de-ejecucion}}

Michos de ustedes están familiarizados con Octave o Matlab. Algunos
recordarán que para invertir matrices y saber que método era más
eficiente su utilizan los comandos tic y toc. \textbf{Por ejemplo:} se
generaba una matriz A, se ejecutaba el comando tic que disparaba una
especie de cronómetro interno, luego se invertía siguiendo una algoritmo
de determinante y finalmente se ejecutaba el tomando toc que detenía el
reloj y entregaba el tiempo de ejecución. Luego se repetía el mismo
procedimiento, pero en lugar de hacerlo con determinante se usaba un
algoritmo de matriz LU.

Una búsqueda rápida en línea nos revela al menos tres paquetes R para
comparar performance del código

\begin{itemize}
\tightlist
\item
  R (rbenchmark, microbenchmark y tictoc).
\end{itemize}

Estos además de medir el tiempo nos indican porcentaje de memoria y
microprocesador utilizados.

Además, la base R proporciona al menos dos métodos para medir el tiempo
de ejecución del código R

*(Sys.time y system.time), que es una aproximación bastante útil para un
curso como el que desarrollamos.

A continuación, paso brevemente por la sintaxis del uso de cada una de
las cinco opciones, y presento mis conclusiones al final.

\hypertarget{usando-sys.time}{%
\subsection{Usando Sys.time}\label{usando-sys.time}}

El tiempo de ejecución de un fragmento de c?digo se puede medir tomando
la diferencia entre el tiempo al inicio y al final del fragmento de
c?digo leyendo los registros del RTC (Real Time Clock. Simple pero
flexible: como un relojito de arena :.

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{duermete\_un\_minuto }\OtherTok{\textless{}{-}} \ControlFlowTok{function}\NormalTok{() \{ }\FunctionTok{Sys.sleep}\NormalTok{(}\DecValTok{5}\NormalTok{) \}}

\NormalTok{start\_time }\OtherTok{\textless{}{-}} \FunctionTok{Sys.time}\NormalTok{()}
\FunctionTok{duermete\_un\_minuto}\NormalTok{()}
\NormalTok{end\_time }\OtherTok{\textless{}{-}} \FunctionTok{Sys.time}\NormalTok{()}

\NormalTok{end\_time }\SpecialCharTok{{-}}\NormalTok{ start\_time}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Time difference of 5.008747 secs
\end{verbatim}

Hemos generado una función que antes no existía y la hemos usado.

\textbf{Deficiencias:} Si usas el comando dentro de un documento en
R-Studio te demorarás mucho tiempo cuando compiles un PDF o una
presentación.

\hypertarget{biblioteca-tictoc}{%
\subsection{Biblioteca tictoc}\label{biblioteca-tictoc}}

Esto de usar una biblioteca es llamar u cargar una procedimientos que
generará comando nuevos en R. Como ya fue comentado, cargar una
biblioteca implica ejecutar el comando install.packages() o usar en
r-studio el menú de Herramientas y Luego Instalar paquetes. Las
funciones tic y toc son de la misma biblioteca de Octave/Matlab y se
usan de la misma manera para la evaluación comparativa que el tiempo de
sistema recién demostrado. Sin embargo, tictoc agrega mucha más
comodidad al usuario y armonía al conjunto.

La versiín de desarrollo más reciente de tictoc se puede instalar desde
github:

\begin{quote}
install packages (tictoc)
\end{quote}

\begin{figure}
\centering
\includegraphics{tictoc_1.png}
\caption{Biblioteca Tic Toc}
\end{figure}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{library}\NormalTok{(tictoc)}

\FunctionTok{tic}\NormalTok{(}\StringTok{"sleeping"}\NormalTok{)}
\NormalTok{A}\OtherTok{\textless{}{-}}\DecValTok{20}
\FunctionTok{print}\NormalTok{(}\StringTok{"dormire una siestita..."}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1] "dormire una siestita..."
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{Sys.sleep}\NormalTok{(}\DecValTok{2}\NormalTok{)}
\FunctionTok{print}\NormalTok{(}\StringTok{"...suena el despertador"}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1] "...suena el despertador"
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{toc}\NormalTok{()}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## sleeping: 2.016 sec elapsed
\end{verbatim}

Uno puede cronometrar solamente un fragmento de código a la vez:

\hypertarget{biblioteca-rbenchmark}{%
\section{Biblioteca rbenchmark}\label{biblioteca-rbenchmark}}

La documentación de la función benchmark del paquete rbenchmark R lo
describe como \emph{``un simple contenedor alrededor de system.time''}.
Sin embargo, agrega mucha conveniencia en comparación con las llamadas
simples a system.time. Por ejemplo, requiere solo una llamada de
referencia para cronometrar múltiples repeticiones de múltiples
expresiones. Además, los resultados devueltos se organizan
convenientemente en un marco de datos.

\begin{quote}
Recuerda antes de ejecutar \textbf{\emph{library ( cualquiercosa )}}
debes haber cargado en tu máquina la biblioteca que quieres invocar
usando install.packages (cualquiercosa)
\end{quote}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{library}\NormalTok{(rbenchmark)}
\CommentTok{\# lm crea una regresi?n lineal}
\FunctionTok{benchmark}\NormalTok{(}\StringTok{"lm"} \OtherTok{=}\NormalTok{ \{}
\NormalTok{            X }\OtherTok{\textless{}{-}} \FunctionTok{matrix}\NormalTok{(}\FunctionTok{rnorm}\NormalTok{(}\DecValTok{1000}\NormalTok{), }\DecValTok{100}\NormalTok{, }\DecValTok{10}\NormalTok{)}
\NormalTok{            y }\OtherTok{\textless{}{-}}\NormalTok{ X }\SpecialCharTok{\%*\%} \FunctionTok{sample}\NormalTok{(}\DecValTok{1}\SpecialCharTok{:}\DecValTok{10}\NormalTok{, }\DecValTok{10}\NormalTok{) }\SpecialCharTok{+} \FunctionTok{rnorm}\NormalTok{(}\DecValTok{100}\NormalTok{)}
\NormalTok{            b }\OtherTok{\textless{}{-}} \FunctionTok{lm}\NormalTok{(y }\SpecialCharTok{\textasciitilde{}}\NormalTok{ X }\SpecialCharTok{+} \DecValTok{0}\NormalTok{)}\SpecialCharTok{$}\NormalTok{coef}
\NormalTok{          \},}
          \StringTok{"pseudoinverse"} \OtherTok{=}\NormalTok{ \{}
\NormalTok{            X }\OtherTok{\textless{}{-}} \FunctionTok{matrix}\NormalTok{(}\FunctionTok{rnorm}\NormalTok{(}\DecValTok{1000}\NormalTok{), }\DecValTok{100}\NormalTok{, }\DecValTok{10}\NormalTok{)}
\NormalTok{            y }\OtherTok{\textless{}{-}}\NormalTok{ X }\SpecialCharTok{\%*\%} \FunctionTok{sample}\NormalTok{(}\DecValTok{1}\SpecialCharTok{:}\DecValTok{10}\NormalTok{, }\DecValTok{10}\NormalTok{) }\SpecialCharTok{+} \FunctionTok{rnorm}\NormalTok{(}\DecValTok{100}\NormalTok{)}
\NormalTok{            b }\OtherTok{\textless{}{-}} \FunctionTok{solve}\NormalTok{(}\FunctionTok{t}\NormalTok{(X) }\SpecialCharTok{\%*\%}\NormalTok{ X) }\SpecialCharTok{\%*\%} \FunctionTok{t}\NormalTok{(X) }\SpecialCharTok{\%*\%}\NormalTok{ y}
\NormalTok{          \},}
          \StringTok{"linear system"} \OtherTok{=}\NormalTok{ \{}
\NormalTok{            X }\OtherTok{\textless{}{-}} \FunctionTok{matrix}\NormalTok{(}\FunctionTok{rnorm}\NormalTok{(}\DecValTok{1000}\NormalTok{), }\DecValTok{100}\NormalTok{, }\DecValTok{10}\NormalTok{)}
\NormalTok{            y }\OtherTok{\textless{}{-}}\NormalTok{ X }\SpecialCharTok{\%*\%} \FunctionTok{sample}\NormalTok{(}\DecValTok{1}\SpecialCharTok{:}\DecValTok{10}\NormalTok{, }\DecValTok{10}\NormalTok{) }\SpecialCharTok{+} \FunctionTok{rnorm}\NormalTok{(}\DecValTok{100}\NormalTok{)}
\NormalTok{            b }\OtherTok{\textless{}{-}} \FunctionTok{solve}\NormalTok{(}\FunctionTok{t}\NormalTok{(X) }\SpecialCharTok{\%*\%}\NormalTok{ X, }\FunctionTok{t}\NormalTok{(X) }\SpecialCharTok{\%*\%}\NormalTok{ y)}
\NormalTok{          \},}
          \AttributeTok{replications =} \DecValTok{1000}\NormalTok{,}
          \AttributeTok{columns =} \FunctionTok{c}\NormalTok{(}\StringTok{"test"}\NormalTok{, }\StringTok{"replications"}\NormalTok{, }\StringTok{"elapsed"}\NormalTok{,}
                      \StringTok{"relative"}\NormalTok{, }\StringTok{"user.self"}\NormalTok{, }\StringTok{"sys.self"}\NormalTok{))}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
##            test replications elapsed relative user.self sys.self
## 3 linear system         1000    0.12    1.000     0.120    0.000
## 1            lm         1000    0.84    7.000     0.832    0.007
## 2 pseudoinverse         1000    0.16    1.333     0.156    0.004
\end{verbatim}

En el informe de salida nos dice que cantidad de tiempo consume cada
parte del código.

\hypertarget{biblioteca-microbenchmark}{%
\section{Biblioteca Microbenchmark}\label{biblioteca-microbenchmark}}

La versión de desarrollo más reciente de microbenchmark se puede
instalar desde github:

Al igual que el punto de referencia del paquete rbenchmark, la función
microbenchmark se puede usar para comparar tiempos de ejecución de
múltiples fragmentos de código R. Pero ofrece una gran comodidad y
funcionalidad adicional. Es más \textbf{``beta''} (inestable), pero como
todo lo que hoy es nuevo poco a poco se hará más estable y no complicará
tanto las cosas para el usuario final.

Una cosa interesante es que se puede ver la salida gráfica del uso de
recursos. Ver líneas finales del código.

Me parece que una característica particularmente agradable de
microbenchmark es la capacidad de verificar automáticamente los
resultados de las expresiones de referencia con una función especificada
por el usuario. Esto se demuestra a continuación, donde nuevamente
comparamos tres métodos que computan el vector de coeficientes de un
modelo lineal.

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{library}\NormalTok{(microbenchmark)}

\FunctionTok{set.seed}\NormalTok{(}\DecValTok{2017}\NormalTok{)}
\NormalTok{n }\OtherTok{\textless{}{-}} \DecValTok{10000}
\NormalTok{p }\OtherTok{\textless{}{-}} \DecValTok{100}
\NormalTok{X }\OtherTok{\textless{}{-}} \FunctionTok{matrix}\NormalTok{(}\FunctionTok{rnorm}\NormalTok{(n}\SpecialCharTok{*}\NormalTok{p), n, p)}
\NormalTok{y }\OtherTok{\textless{}{-}}\NormalTok{ X }\SpecialCharTok{\%*\%} \FunctionTok{rnorm}\NormalTok{(p) }\SpecialCharTok{+} \FunctionTok{rnorm}\NormalTok{(}\DecValTok{100}\NormalTok{)}

\NormalTok{check\_for\_equal\_coefs }\OtherTok{\textless{}{-}} \ControlFlowTok{function}\NormalTok{(values) \{}
\NormalTok{  tol }\OtherTok{\textless{}{-}} \FloatTok{1e{-}12}
\NormalTok{  max\_error }\OtherTok{\textless{}{-}} \FunctionTok{max}\NormalTok{(}\FunctionTok{c}\NormalTok{(}\FunctionTok{abs}\NormalTok{(values[[}\DecValTok{1}\NormalTok{]] }\SpecialCharTok{{-}}\NormalTok{ values[[}\DecValTok{2}\NormalTok{]]),}
                     \FunctionTok{abs}\NormalTok{(values[[}\DecValTok{2}\NormalTok{]] }\SpecialCharTok{{-}}\NormalTok{ values[[}\DecValTok{3}\NormalTok{]]),}
                     \FunctionTok{abs}\NormalTok{(values[[}\DecValTok{1}\NormalTok{]] }\SpecialCharTok{{-}}\NormalTok{ values[[}\DecValTok{3}\NormalTok{]])))}
\NormalTok{  max\_error }\SpecialCharTok{\textless{}}\NormalTok{ tol}
\NormalTok{\}}

\NormalTok{mbm }\OtherTok{\textless{}{-}} \FunctionTok{microbenchmark}\NormalTok{(}\StringTok{"lm"} \OtherTok{=}\NormalTok{ \{ b }\OtherTok{\textless{}{-}} \FunctionTok{lm}\NormalTok{(y }\SpecialCharTok{\textasciitilde{}}\NormalTok{ X }\SpecialCharTok{+} \DecValTok{0}\NormalTok{)}\SpecialCharTok{$}\NormalTok{coef \},}
               \StringTok{"pseudoinverse"} \OtherTok{=}\NormalTok{ \{}
\NormalTok{                 b }\OtherTok{\textless{}{-}} \FunctionTok{solve}\NormalTok{(}\FunctionTok{t}\NormalTok{(X) }\SpecialCharTok{\%*\%}\NormalTok{ X) }\SpecialCharTok{\%*\%} \FunctionTok{t}\NormalTok{(X) }\SpecialCharTok{\%*\%}\NormalTok{ y}
\NormalTok{               \},}
               \StringTok{"linear system"} \OtherTok{=}\NormalTok{ \{}
\NormalTok{                 b }\OtherTok{\textless{}{-}} \FunctionTok{solve}\NormalTok{(}\FunctionTok{t}\NormalTok{(X) }\SpecialCharTok{\%*\%}\NormalTok{ X, }\FunctionTok{t}\NormalTok{(X) }\SpecialCharTok{\%*\%}\NormalTok{ y)}
\NormalTok{               \},}
               \AttributeTok{check =}\NormalTok{ check\_for\_equal\_coefs)}

\NormalTok{mbm}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Unit: milliseconds
##           expr      min       lq     mean   median       uq      max neval cld
##             lm 135.2209 142.1973 158.1678 147.4084 176.6980 227.6477   100  b 
##  pseudoinverse 172.0731 183.9908 200.4098 189.6819 212.8177 339.0755   100   c
##  linear system 101.9518 108.4413 120.1552 112.7312 119.4219 235.2787   100 a
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{library}\NormalTok{(ggplot2)}
\FunctionTok{autoplot}\NormalTok{(mbm)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
\end{verbatim}

\includegraphics{Elsevier_files/figure-latex/unnamed-chunk-4-1.pdf}

\hypertarget{consigan-del-trabajo-de-evaluaciuxf3n-del-muxf3dulo}{%
\section{Consigan del trabajo de evaluación del
módulo}\label{consigan-del-trabajo-de-evaluaciuxf3n-del-muxf3dulo}}

El trabajo de hay que presentar implica revisar los algoritmos que se
presentan a continuación. Deberá ejecutarlos primero en la línea de
comando de la consola.

Luego deberá elegir alguno de los métodos vistos para medir la
performance y comparar los resultados con otros compañeros que hayan
usado otros métodos para medir la performance.

Luego todo deberá entregarse en un informe en formato pdf construido con
RStudio, usando la platilla del paquete \textbf{rticles} template
Elsevier.

\hypertarget{generar-un-vector-secuencia}{%
\subsection{1 Generar un vector
secuencia}\label{generar-un-vector-secuencia}}

De echo R. tiene un comando para generar secuencias llamado
\emph{``seq''}. Recomendamos ejecutar la ayuda del comando en RStudio.

Pero utilizaremos el clásico método de secuenecias de anidamiento
\textbf{for, while, do , until}.

Generaremos una secuencia de números que de dos en dos entre 1 y
100.000.

\hypertarget{secuencias-generada-con-for}{%
\subsubsection{Secuencias generada con
for}\label{secuencias-generada-con-for}}

\begin{Shaded}
\begin{Highlighting}[]
\ControlFlowTok{for}\NormalTok{ (i }\ControlFlowTok{in} \DecValTok{1}\SpecialCharTok{:}\DecValTok{50000}\NormalTok{) \{ A[i] }\OtherTok{\textless{}{-}}\NormalTok{ (i}\SpecialCharTok{*}\DecValTok{2}\NormalTok{)\}}
\FunctionTok{head}\NormalTok{ (A)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1]  2  4  6  8 10 12
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{tail}\NormalTok{ (A)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1]  99990  99992  99994  99996  99998 100000
\end{verbatim}

\hypertarget{secuencia-generada-con-r}{%
\subsubsection{Secuencia generada con
R}\label{secuencia-generada-con-r}}

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{A }\OtherTok{\textless{}{-}} \FunctionTok{seq}\NormalTok{(}\DecValTok{1}\NormalTok{,}\DecValTok{1000000}\NormalTok{, }\DecValTok{2}\NormalTok{)}
\FunctionTok{head}\NormalTok{ (A)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1]  1  3  5  7  9 11
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{tail}\NormalTok{ (A)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1] 999989 999991 999993 999995 999997 999999
\end{verbatim}

\begin{quote}
Recomendación para esta CONSIGNA: Comparar la performance con systime
\end{quote}

\hypertarget{implementacin-de-una-serie-fibonacci}{%
\subsection{2 Implementaci?n de una serie
Fibonacci}\label{implementacin-de-una-serie-fibonacci}}

En matemáticas, la sucesión o serie de Fibonacci es la siguiente
sucesión infinita de números naturales:

\[``0,1,1,2,3,5,8 ... 89,144,233 ...''\]

La sucesión comienza con los números 0 y 1,2 a partir de estos,
\textbf{«cada término es la suma de los dos anteriores»}, es la relación
de recurrencia que la define.

A los elementos de esta sucesi?n se les llama números de Fibonacci. Esta
sucesi?n fue descrita en Europa por Leonardo de Pisa, matemático
italiano del siglo XIII también conocido como Fibonacci. Tiene numerosas
aplicaciones en ciencias de la computación, matemática y teoría de
juegos. También aparece en configuraciones biológicas, como por ejemplo
en las ramas de los árboles, en la disposición de las hojas en el tallo,
en las flores de alcachofas y girasoles, en las inflorescencias del
brécol romanesco, en la configuración de las piñas de las coníferas, en
la reproducción de los conejos y en cómo el ADN codifica el crecimiento
de formas orgánicas complejas. De igual manera, se encuentra en la
estructura espiral del caparazón de algunos moluscos, como el nautilus.

{[}Códice del Fibonacci - Univ. de Florencia{]}\{fibonachi.jpg\}

\hypertarget{definiciuxf3n-matemuxe1tica-recurrente}{%
\subsubsection{Definición matemática
recurrente}\label{definiciuxf3n-matemuxe1tica-recurrente}}

\[f_{0}=0 \]

\[f_{1}=1 \]

\[f_{n+1}=f_{n} + f_{n-1} \]

\begin{Shaded}
\begin{Highlighting}[]
\ControlFlowTok{for}\NormalTok{(i }\ControlFlowTok{in} \DecValTok{0}\SpecialCharTok{:}\DecValTok{5}\NormalTok{)}
\NormalTok{\{ a}\OtherTok{\textless{}{-}}\NormalTok{i}
\NormalTok{b }\OtherTok{\textless{}{-}}\NormalTok{i}\SpecialCharTok{+}\DecValTok{1}
\NormalTok{c }\OtherTok{\textless{}{-}}\NormalTok{ a}\SpecialCharTok{+}\NormalTok{b}
\CommentTok{\# comentar esta l?nea para conocer el número más grande hallado}
\FunctionTok{print}\NormalTok{(c)}
\NormalTok{\}}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1] 1
## [1] 3
## [1] 5
## [1] 7
## [1] 9
## [1] 11
\end{verbatim}

\begin{quote}
CONSIGNA: ¿Cuantas iteraciones se necesitan para generar un número de la
serie mayor que 1.000.000 ?
\end{quote}

\hypertarget{ordenaciuxf3n-de-un-vector-por-muxe9todo-burbuja}{%
\subsection{Ordenación de un vector por método
burbuja}\label{ordenaciuxf3n-de-un-vector-por-muxe9todo-burbuja}}

La Ordenación de burbuja \textbf{(Bubble Sort en inglés)} es un sencillo
algoritmo de ordenamiento. Funciona revisando cada elemento de la lista
que va a ser ordenada con el siguiente, intercambiándolos de posición si
están en el orden equivocado. Es necesario revisar varias veces toda la
lista hasta que no se necesiten más intercambios, lo cual significa que
la lista está ordenada. Este algoritmo obtiene su nombre de la forma con
la que suben por la lista los elementos durante los intercambios, como
si fueran pequeñas ``burbujas''. También es conocido como el método del
intercambio directo. Dado que solo usa comparaciones para operar
elementos, se lo considera un algoritmo de comparación, siendo uno de
los más sencillos de implementada.

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\# Tomo una muestra de 10 números ente 1 y 100}
\NormalTok{x}\OtherTok{\textless{}{-}}\FunctionTok{sample}\NormalTok{(}\DecValTok{1}\SpecialCharTok{:}\DecValTok{100}\NormalTok{,}\DecValTok{10}\NormalTok{)}
\CommentTok{\# Creo una funci?n para ordenar}
\NormalTok{burbuja }\OtherTok{\textless{}{-}} \ControlFlowTok{function}\NormalTok{(x)\{}
\NormalTok{  n}\OtherTok{\textless{}{-}}\FunctionTok{length}\NormalTok{(x)}
  \ControlFlowTok{for}\NormalTok{(j }\ControlFlowTok{in} \DecValTok{1}\SpecialCharTok{:}\NormalTok{(n}\DecValTok{{-}1}\NormalTok{))\{}
    \ControlFlowTok{for}\NormalTok{(i }\ControlFlowTok{in} \DecValTok{1}\SpecialCharTok{:}\NormalTok{(n}\SpecialCharTok{{-}}\NormalTok{j))\{}
      \ControlFlowTok{if}\NormalTok{(x[i]}\SpecialCharTok{\textgreater{}}\NormalTok{x[i}\SpecialCharTok{+}\DecValTok{1}\NormalTok{])\{}
\NormalTok{        temp}\OtherTok{\textless{}{-}}\NormalTok{x[i]}
\NormalTok{        x[i]}\OtherTok{\textless{}{-}}\NormalTok{x[i}\SpecialCharTok{+}\DecValTok{1}\NormalTok{]}
\NormalTok{        x[i}\SpecialCharTok{+}\DecValTok{1}\NormalTok{]}\OtherTok{\textless{}{-}}\NormalTok{temp}
\NormalTok{      \}}
\NormalTok{    \}}
\NormalTok{  \}}
  \FunctionTok{return}\NormalTok{(x)}
\NormalTok{\}}
\NormalTok{res}\OtherTok{\textless{}{-}}\FunctionTok{burbuja}\NormalTok{(x)}
\CommentTok{\#Muestra obtenida}
\NormalTok{x}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
##  [1]  7 71 10 72 37 28 64 82 19 88
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\#Muestra Ordenada}
\NormalTok{res}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
##  [1]  7 10 19 28 37 64 71 72 82 88
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\#Ordanaci?n con el coamando SORT de R{-}Cran}

\FunctionTok{sort}\NormalTok{(x)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
##  [1]  7 10 19 28 37 64 71 72 82 88
\end{verbatim}

\begin{quote}
CONSIGNA: Compara la performance de ordenaci?n del método burbuja vs el
método sort de R Usar método microbenchmark para una muestra de tamaño
20.000
\end{quote}

\hypertarget{progresiuxf3n-geomuxe9trica-del-covid-19}{%
\section{3 Progresión geométrica del
COVid-19}\label{progresiuxf3n-geomuxe9trica-del-covid-19}}

\hypertarget{modelado-matemuxe1tico-de-una-epidema}{%
\subsection{Modelado matemático de una
epidema\}}\label{modelado-matemuxe1tico-de-una-epidema}}

La cantidad delta represent la variación de casos registrados de un dia
para otro

\[\Delta_n=I_{n+1}-I_n \]

Esta cantidad está influenciada por dos variables que llamaremos E
(exposión) y p (probabilidad de contagio), representaremos a los
Infectados por I

\[\Delta_n=I_n*E*p \]

Pero antes habíamos calculado \(\Delta n\) , de modo que lo
reemplazaremos.

\[\Delta_n=I_{n+1}-I_n = I_n*E*p \]

Podemos pronosticar que cantidad de infectados habrá mañana en un país
si despejamos

\[I_{n+q} \]

Despejando tenemos \ldots{}

\[ I_{n+1}=I_n(E*p) + I_n \]

Luego

\[ I_{n+1}= I_n ( 1 + E*p) \]

Llamaremos factor de contagio \(F\) a :

\[ F=(1+ E*p) \]

Con estos valores prodemos predecir cuando la epidemia terminará de
contagiar a todos los habitantes de un país. \(F\) es siempre mayor que
1 y podr?amos pensar que E y p son una probabilidad conjunta.

Así tenemos entonces

\[I_{n+1}=I_n*F \]

Ecuación general de una epidemia

Recuperaremos los datos de Argentina entre el inicio de la epidemia y la
fecha actual.

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{library}\NormalTok{(readr)}
\CommentTok{\#casos\_A \textless{}{-} read\_delim("C:casos.csv", ";", escape\_double = FALSE, trim\_ws = TRUE, skip = 1)}

\NormalTok{location }\OtherTok{\textless{}{-}} \FunctionTok{getwd}\NormalTok{()}
\FunctionTok{setwd}\NormalTok{(location) }
\NormalTok{casos\_A }\OtherTok{\textless{}{-}} \FunctionTok{read\_delim}\NormalTok{(}\StringTok{"casos.csv"}\NormalTok{, }\StringTok{";"}\NormalTok{, }\AttributeTok{escape\_double =} \ConstantTok{FALSE}\NormalTok{, }\AttributeTok{trim\_ws =} \ConstantTok{TRUE}\NormalTok{, }\AttributeTok{skip =} \DecValTok{1}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## 
## -- Column specification --------------------------------------------------------
## cols(
##   Fecha = col_character(),
##   Casos = col_double(),
##   `E_P+1` = col_logical()
## )
\end{verbatim}

Estadística de casos

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{summary}\NormalTok{(casos\_A}\SpecialCharTok{$}\NormalTok{Casos)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00   36.75  245.50  514.71  995.50 1715.00
\end{verbatim}

Se puede calcular \(F\) dividiendo los infectados de hoy sobre los de
ayer

\[ F=I_{n+1}/I_n \]

De modo que

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{m }\OtherTok{\textless{}{-}} \FunctionTok{length}\NormalTok{(casos\_A}\SpecialCharTok{$}\NormalTok{Casos)}
\NormalTok{F }\OtherTok{\textless{}{-}}\NormalTok{ (casos\_A}\SpecialCharTok{$}\NormalTok{Casos[}\DecValTok{2}\SpecialCharTok{:}\NormalTok{m])}\SpecialCharTok{/}\NormalTok{(casos\_A}\SpecialCharTok{$}\NormalTok{Casos[}\DecValTok{1}\SpecialCharTok{:}\NormalTok{m}\DecValTok{{-}1}\NormalTok{])}
\end{Highlighting}
\end{Shaded}

Estadísticos de F

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{mean}\NormalTok{(F,}\AttributeTok{na.rm =} \ConstantTok{TRUE}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1] 1.350739
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{sd}\NormalTok{(F,}\AttributeTok{na.rm =} \ConstantTok{TRUE}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1] 0.8554107
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{var}\NormalTok{(F,}\AttributeTok{na.rm =} \ConstantTok{TRUE}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1] 0.7317275
\end{verbatim}

\hypertarget{accediendo-a-los-datos-actualizados-del-covi-19}{%
\subsection{Accediendo a los datos actualizados del
Covi-19\}}\label{accediendo-a-los-datos-actualizados-del-covi-19}}

Los datos más actualizados del avance de la epidemia se pueden encontrar
en el sitio :

\%\url{<https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_time_series>}\{
GitHub accedido 9 de Marzo 2020\}.

Prueba acceder al link y guardarlo en una carpeta conocida.

\begin{quote}
CONSIGNA: usando las ecuaciones de la epidemia \textbackslash{}
determinar en que fecha se contagiar?an \textbackslash{} 40 millones de
personas \textbackslash{} usar los tados de F=1.62\}
\end{quote}

\hypertarget{resolucion-de-ejercicios}{%
\section{Resolucion de Ejercicios}\label{resolucion-de-ejercicios}}

\hypertarget{ejercicio-n1}{%
\subsection{Ejercicio N°1}\label{ejercicio-n1}}

\hypertarget{ejercicio-n2}{%
\subsection{Ejercicio N°2\}}\label{ejercicio-n2}}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{print}\NormalTok{(}\StringTok{"Aún sin resolver"}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1] "Aún sin resolver"
\end{verbatim}

\hypertarget{ejercicio-n3}{%
\section{Ejercicio N°3}\label{ejercicio-n3}}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{print}\NormalTok{(}\StringTok{"Resolver"}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1] "Resolver"
\end{verbatim}

\hypertarget{ejercicio-n4}{%
\subsection{Ejercicio N°4}\label{ejercicio-n4}}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{print}\NormalTok{(}\StringTok{"Resolver"}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1] "Resolver"
\end{verbatim}

\hypertarget{ejercicio-n5}{%
\subsection{Ejercicio N°5}\label{ejercicio-n5}}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{print}\NormalTok{(}\StringTok{"Resolver"}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## [1] "Resolver"
\end{verbatim}

\hypertarget{conclusiones}{%
\section{Conclusiones}\label{conclusiones}}

\renewcommand\refname{References}
\bibliography{mybibfile.bib}


\end{document}
