%%% -*- eval: (fset 'sweave [?\C-x ?\C-s escape ?n ?s escape ?n ?P right return]) -*-
%%% -*- eval: (local-set-key "\C-c\C-c" 'sweave) -*- usar fuera de <<>>...@
\documentclass[12pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[spanish]{babel}
\usepackage{graphicx}
\usepackage[margin=5em,screen]{geometry}
\usepackage{kpfonts}
\usepackage{amsmath}            % para \text
%% Sweave no funciona bien de fábrica; hay que
%% copiar /usr/local/lib/R/share/texmf/tex/latex/Sweave.sty
%% a (por ejemplo) /usr/local/share/texmf/tex/latex/miSweave/Sweave.sty
%% y ejecutar: sudo mktexlsr
\usepackage{Sweave}
\begin{document}
\title{Análisis de MTCARS}\date{}
\maketitle

Obtener datos:
\begin{Schunk}
\begin{Sinput}
> library (datasets)     # necesario sólo si usas Rcmdr
> ? mtcars               # descripción
> M <- mtcars            # para ahorrar pulsaciones
\end{Sinput}
\end{Schunk}
Las variables de este dataframe son:
\begin{description}
\item[mpg] : millas por galón
\item[cyl] : número de cilindros
\item[disp] : cubicaje en pulgadas cúbicas (desplazamiento de los cilindros)
\item[hp] : potencia en caballos de vapor
\item[drat] : razón entre ejes (número de revoluciones de la
  trasmisión por cada vuelta de rueda)
\item[wt] : peso en miles de libras
\item[qsec] : segundos para recorrer un cuarto de milla
\item[vs] : tipo de cilindros (en V; en línea o Serie)
\item[am] : tipo de trasmisión (automática; manual)
\item[gear] : número de marchas hacia adelante 
\item[carb] : número de carburadores
\end{description}

\newpage
\section{Transformar millas por galón en litros por 100 km}

Consideraremos:
\begin{itemize}
\item \( 1\text{ milla} \simeq 1.609\text{ km}    \)
\item \( 1\text{ galón} \simeq 3.785\text{ litros}\)
\end{itemize}
Cadena de trasformaciones:
\begin{Schunk}
\begin{Sinput}
> km.galon       <-       M$mpg * 1.609         # kilómetros por galón
> km.litro       <-    km.galon / 3.785         # kilómetros por litro
> litros.km      <-           1 / km.litro      # litros por kilómetro
> litros.100km   <-   litros.km * 100           # litros por cada 100 km
\end{Sinput}
\end{Schunk}
o bien directamente
\begin{Schunk}
\begin{Sinput}
> M$L100k <- 100 * 3.785 / (1.61 * M$mpg)
\end{Sinput}
\end{Schunk}
Siempre conviene comprobar los resultados:
\begin{Schunk}
\begin{Sinput}
> head    (M[, c("mpg", "L100k")])
\end{Sinput}
\begin{Soutput}
                   mpg L100k
Mazda RX4         21.0  11.2
Mazda RX4 Wag     21.0  11.2
Datsun 710        22.8  10.3
Hornet 4 Drive    21.4  11.0
Hornet Sportabout 18.7  12.6
Valiant           18.1  13.0
\end{Soutput}
\begin{Sinput}
> summary (M[, c("mpg", "L100k")])
\end{Sinput}
\begin{Soutput}
      mpg           L100k      
 Min.   :10.4   Min.   : 6.93  
 1st Qu.:15.4   1st Qu.:10.31  
 Median :19.2   Median :12.24  
 Mean   :20.1   Mean   :12.75  
 3rd Qu.:22.8   3rd Qu.:15.24  
 Max.   :33.9   Max.   :22.61  
\end{Soutput}
\begin{Sinput}
> plot (M$mpg, M$L100k) 
\end{Sinput}
\end{Schunk}
\includegraphics{mtcars-fig1}
\newpage
\section {Transformar ``segundos hasta 1/4 de milla'' en
  ``segundos de 0 a 100 km/h''}
 
Suponiendo que se parte del reposo y que el movimiento es
uniformemente acelerado, las fórmulas que relacionan el espacio
recorrido, la velocidad alcanzada y el tiempo empleado son:
\begin{eqnarray*}
 e(t) &=& \frac{1}{2}\, a\, t^2 \\
 v(t) &=& a\,t
\end{eqnarray*}
Aplicaremos estas expresiones a los datos de \texttt{mtcars}.
Debemos tener cuidado sobre qué unidades usamos en las fórmulas:
\begin{enumerate}
\item espacio
  \[ \text{$\frac14$ de milla}=\frac{1.609}4\text{ km} = 0.402\text{ km} =
  e(\text{\tt qsec})= \frac{1}{2}\, a\, \text{\tt qsec}^2 \] 
  \[\Longrightarrow\qquad a = \frac {2\times0.402\text{ km}} {\text{\tt qsec}^2} =
  \frac {0.804\text{ km}} {\text{\tt qsec}^2} \]
  Esa aceleración \(a\)
  está expresada en km/s$^2$ (kilómetros por segundo cada segundo),
  por lo que vamos a expresar la velocidad en km/s (kilómetros por
  segundo) en vez de km/h.
\item velocidad
  \[ 100\text{ km/h} = \frac{100}{3600}\text{ km/s} =  \frac{1}{36}\text{ km/s} 
  = \frac{1\text{ km}}{36\text{ s}} = v(t) = a\,t = 
  \frac {0.804\text{ km}} {\text{\tt qsec}^2} \,t \] \[
  \Longrightarrow \qquad t=
  \frac {1\text{ km}\cdot\text{\tt qsec}^2}{0.804\text{ km}\cdot36\text{ s}} = 
  \frac {{\tt qsec}^2} {28.944\text{ s}} \]
\end{enumerate}
Cálculo y comprobación:
\begin{Schunk}
\begin{Sinput}
> M$T100k <- M$qsec^2 / 28.944         # tiempo en segundos de 0 a 100 km/h
> head    (M[, c("qsec", "T100k")])
\end{Sinput}
\begin{Soutput}
                  qsec T100k
Mazda RX4         16.5  9.36
Mazda RX4 Wag     17.0 10.01
Datsun 710        18.6 11.97
Hornet 4 Drive    19.4 13.06
Hornet Sportabout 17.0 10.01
Valiant           20.2 14.13
\end{Soutput}
\begin{Sinput}
> summary (M[, c("qsec", "T100k")])
\end{Sinput}
\begin{Soutput}
      qsec          T100k      
 Min.   :14.5   Min.   : 7.26  
 1st Qu.:16.9   1st Qu.: 9.86  
 Median :17.7   Median :10.84  
 Mean   :17.9   Mean   :11.11  
 3rd Qu.:18.9   3rd Qu.:12.34  
 Max.   :22.9   Max.   :18.12  
\end{Soutput}
\end{Schunk}
Un promedio de once segundos en pasar de 0 a 100 es razonable.
\newpage
\section {Transformar otras variables}
Ya que hemos hecho la trasformación de \texttt{mpg} y 
\texttt{qsec} a unidades europeas, haremos lo mismo con 
\begin{description}
\item [disp] (cubicaje): pulgadas cúbicas $\longrightarrow$ centímetros cúbicos 
\item [wt] (peso): miles de libras $\longrightarrow$ toneladas
\end{description}
%Así:
\begin{Schunk}
\begin{Sinput}
> M$cubi <- M$disp * 2.54^3
> M$peso <- M$wt   * 0.4536
> ## nos quedamos sólo con variables en unidades europeas:
> M      <- M [, c ("L100k", "cyl", "cubi", "hp", "drat", "peso",
+                   "T100k", "vs", "am", "gear", "carb")]
> round (head (M), 2)
\end{Sinput}
\begin{Soutput}
                  L100k cyl cubi  hp drat peso T100k vs am gear carb
Mazda RX4          11.2   6 2622 110 3.90 1.19  9.36  0  1    4    4
Mazda RX4 Wag      11.2   6 2622 110 3.90 1.30 10.01  0  1    4    4
Datsun 710         10.3   4 1770  93 3.85 1.05 11.97  1  1    4    1
Hornet 4 Drive     11.0   6 4228 110 3.08 1.46 13.06  1  0    3    1
Hornet Sportabout  12.6   8 5899 175 3.15 1.56 10.01  0  0    3    2
Valiant            13.0   6 3687 105 2.76 1.57 14.13  1  0    3    1
\end{Soutput}
\end{Schunk}
\newpage
\section{Descripción univariante}
\begin{Schunk}
\begin{Sinput}
> num.categ <- sapply (M, function (var) length (unique (var)))
> continuas <- num.categ > 10
> pdf ("graf1.pdf")
> for (i in which (continuas))
+     hist (M[,i], main=names(M)[i])
> for (i in which (!continuas))
+     barplot (table (M[,i]), main=names(M)[i])
> dev.off ()
\end{Sinput}
\begin{Soutput}
null device 
          1 
\end{Soutput}
\begin{Sinput}
> options (digits = 3)
> RcmdrMisc::numSummary (M)
\end{Sinput}
\begin{Soutput}
          mean       sd      IQR       0%     25%     50%     75%    100%  n
L100k   12.748    3.861    4.931    6.935   10.31   12.24   15.24   22.61 32
cyl      6.188    1.786    4.000    4.000    4.00    6.00    8.00    8.00 32
cubi  3780.854 2030.991 3362.216 1165.120 1979.97 3216.78 5342.18 7734.69 32
hp     146.688   68.563   83.500   52.000   96.50  123.00  180.00  335.00 32
drat     3.597    0.535    0.840    2.760    3.08    3.70    3.92    4.93 32
peso     1.459    0.444    0.467    0.686    1.17    1.51    1.64    2.46 32
T100k   11.114    2.252    2.482    7.264    9.86   10.84   12.34   18.12 32
vs       0.438    0.504    1.000    0.000    0.00    0.00    1.00    1.00 32
am       0.406    0.499    1.000    0.000    0.00    0.00    1.00    1.00 32
gear     3.688    0.738    1.000    3.000    3.00    4.00    4.00    5.00 32
carb     2.812    1.615    2.000    1.000    2.00    2.00    4.00    8.00 32
\end{Soutput}
\end{Schunk}
\newpage
\section{Relación de \texttt{L100k} con el resto}
\begin{Schunk}
\begin{Sinput}
> pdf ("graf2.pdf")
> for (i in which (continuas))
+     plot (M$L100k ~ M[,i], main=names(M)[i])
> for (i in which (!continuas))
+     boxplot (as.formula (paste ("L100k ~", names(M)[i])), M)
> dev.off ()
\end{Sinput}
\begin{Soutput}
null device 
          1 
\end{Soutput}
\begin{Sinput}
> cor (M) ["L100k", ]
\end{Sinput}
\begin{Soutput}
 L100k    cyl   cubi     hp   drat   peso  T100k     vs     am   gear   carb 
 1.000  0.814  0.880  0.763 -0.638  0.890 -0.384 -0.640 -0.540 -0.479  0.526 
\end{Soutput}
\end{Schunk}
\newpage
\section{Modelo para predecir \texttt{L100k}}
\begin{Schunk}
\begin{Sinput}
> R2 <- sapply (setdiff (names (M), "L100k"),
+               function (i)
+                   summary (lm (M$L100k ~ M[[i]])) $ r.squared)
> mejor <- names (which.max (R2))
> summary (lm (paste ("L100k ~", mejor), M))
\end{Sinput}
\begin{Soutput}
Call:
lm(formula = paste("L100k ~", mejor), data = M)

Residuals:
   Min     1Q Median     3Q    Max 
-4.228 -1.041  0.221  1.066  2.741 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)    1.450      1.104    1.31      0.2
peso           7.742      0.725   10.68  9.6e-12

Residual standard error: 1.79 on 30 degrees of freedom
Multiple R-squared:  0.792,	Adjusted R-squared:  0.785 
F-statistic:  114 on 1 and 30 DF,  p-value: 9.57e-12
\end{Soutput}
\end{Schunk}
\end{document}
