TRABAJO
TRABAJO
TEÓRICO/PRÁCTICO
1
ÍNDICE PAGS
2. REGRESIÓN 19
3. CLASIFICACIÓN 34
3.1 K-NN 34
3.2 LDA 36
3.3 QDA 38
2
4. APÉNDICE 40
3
1. ANÁLISIS EXPLORATORIO DE DATOS
Convertimos las líneas que empiecen por “@” en comentarios, aplicamos la lectura
según los símbolos ya apuntados anteriormente. Y además incluimos header=FALSE
puesto que de no hacerlo la primera línea de los datos la cogería como cabecera y los
perderíamos. Acto seguido cambio el nombre a las variables para hacer más práctico el
desarrollo del análisis.
En primer lugar, comprobamos que estamos trabajando con un dataframe y
mostramos sus características más generales.
class(mortgage)
[1] "[Link]"
> typeof(mortgage)
[1] "list"
> str(mortgage)
'[Link]': 1049 obs. of 16 variables:
$ X1 : num 8.72 13.85 6.59 17.43 3.16 ...
$ X2 : num 90.7 109.4 88 96.1 85.1 ...
$ X3 : num 9.69 17.19 9.94 15.07 8.21 ...
$ X4 : num 7.62 12.06 5.74 15.2 2.97 ...
$ X5 : num 7.6 12.47 5.67 15.01 2.94 ...
$ X6 : num 7.72 13.94 7.42 13.13 4.93 ...
$ X7 : num 7.69 13.82 7.73 12.89 5.85 ...
$ X8 : num 2606 1347 2280 1237 2938 ...
$ X9 : num 223 124 199 116 289 ...
$ X10: num 280 231 287 242 336 ...
$ X11: num 8.52 14.35 6.77 18.12 2.96 ...
$ X12: num 794 443 756 410 1012 ...
$ X13: num 565 315 551 291 716 ...
$ X14: num 2020 1034 1744 933 2110 ...
$ X15: num 895 344 936 378 1180 ...
$ Y : num 7.66 13.73 6.65 14.24 3.5 ...
4
variables de entrada y una de salida. Además está claro que dentro del dataframe
disponemos exclusivamente de tipos de datos numéricos.
Es importante ver si existen missing values en el dataframe puesto que a la hora d
e realizar cualquier operación con los datos esta devolvería un resultado NA. Por tanto
voy a ver si hay NA en el dataframe:
length(mortgage[[Link](mortgage)])
0
Con este resultado podemos ver que no hay missing values en el dataframe y
despreocuparnos al realizar operaciones con los datos. En caso contrario, hubiese
bastado con añadir como argumento a las operaciones: [Link]=TRUE. Para ignorar los
valores ausentes durante el cálculo.
Estadisticamortgage
media desviacion varianza mediana
X1 7.521945 3.377216 1.140559e+01 6.610
X2 97.353633 14.471441 2.094226e+02 92.526
X3 10.400848 2.958872 8.754926e+00 9.900
X4 6.851220 2.954287 8.727812e+00 5.810
X5 6.829342 2.942284 8.657036e+00 5.770
X6 8.117378 2.883880 8.316764e+00 7.440
X7 8.359104 2.766248 7.652127e+00 7.760
X8 2639.677312 1010.520574 1.021152e+06 2616.100
X9 256.847664 114.575372 1.312752e+04 224.400
X10 308.115443 59.805094 3.576649e+03 287.700
X11 7.549495 3.538662 1.252213e+01 6.640
X12 813.330410 258.688545 6.691976e+04 796.000
X13 549.687417 157.072519 2.467178e+04 567.400
X14 1959.121830 720.531058 5.191650e+05 2023.900
X15 954.669399 372.292523 1.386017e+05 947.900
Y 7.543937 3.105787 9.645915e+00 6.710
minimo maximo
X1 3.020 20.760
X2 77.055 142.645
X3 6.490 18.630
X4 2.670 16.750
X5 2.690 16.760
X6 4.090 16.470
X7 4.170 16.130
X8 1130.900 4809.200
5
X9 105.600 533.000
X10 225.800 412.100
X11 2.860 20.060
X12 381.100 1154.100
X13 269.900 803.400
X14 868.100 3550.300
X15 175.600 1758.100
Y 3.020 17.150
X1 X2 X3 X4
0% 3.02 77.055 6.49 2.67
25% 5.37 86.799 7.88 4.99
50% 6.61 92.526 9.90 5.81
75% 8.82 104.736 12.80 8.14
100% 20.76 142.645 18.63 16.75
X5 X6 X7 X8
0% 2.69 4.09 4.17 1130.9
25% 4.98 5.89 6.14 1746.3
50% 5.77 7.44 7.76 2616.1
75% 8.09 9.69 9.98 3350.2
100% 16.76 16.47 16.13 4809.2
X9 X10 X11 X12
0% 105.6 225.8 2.86 381.1
25% 156.8 258.2 5.30 555.3
50% 224.4 287.7 6.64 796.0
75% 357.9 377.1 8.98 1080.5
100% 533.0 412.1 20.06 1154.1
X13 X14 X15 Y
0% 269.9 868.1 175.6 3.02
25% 394.7 1339.6 721.0 5.45
50% 567.4 2023.9 947.9 6.71
75% 658.8 2407.5 1197.4 9.03
100% 803.4 3550.3 1758.1 17.15
Al obtener estos datos ya podemos ver el rango de datos que tenemos para cada
variable y algo de información en cuanto a la distribución de los mismos. En particular
sabiendo que la media es más sensible a la presencia de outliers, notamos esto en las
variables X9 y X10.
También con la desviación estándar podemos ver cuán lejos están los valores de
la media.
6
En este caso, voy a utilizar el paquete ggplot para representar los datos. En el título
abreviaré, MortgageRate por M.R por cuestiones de estética.
[Link]("gridExtra")
library(gridExtra)
p1=ggplot(data=mortgage,aes(x=X1,y=Y))+geom_point(colour="red")+labs(title="M.R
vs MonthCDRate real",x="MonthCDRate real",y="MortgageRate real")
p2=ggplot(data=mortgage,aes(x=X2,y=Y))+geom_point(colour="green")+labs(title="M.
R vs 1Y-CMaturityRate real ",x="1Y-CMaturityRate real",y="MortgageRate real")
p3=ggplot(data=mortgage,aes(x=X3,y=Y))+geom_point(colour="blue")+labs(title="M.R
vs RateAuctionAveragereal",x="Rate-AuctionAverage real",y="MortgageRate real")
p4=ggplot(data=mortgage,aes(x=X4,y=Y))+geom_point(colour="yellow")+labs(title="M
.R vs RateSecondaryMarketreal ",x="Rate-SecondaryMarket real",y="MortgageRate
real")
[Link](p1,p2,p3,p4,nrow=2,ncol=2)
7
Al acabar de mostrar los diferentes gráficos incluiré una descripción en base a lo
obtenido.
p5=ggplot(data=mortgage,aes(x=X5,y=Y))+geom_point(colour="violet")+lab
s(title="M.R vs 3Y-CMaturityRate real",x="3Y-CMaturityRate real",y="Mo
rtgageRate real")
p6=ggplot(data=mortgage,aes(x=X6,y=Y))+geom_point(colour="black")+labs
(title="M.R vs 5Y-CMaturityRate real",x="5Y-CMaturityRate real",y="Mo
rtgageRate real")
p7=ggplot(data=mortgage,aes(x=X7,y=Y))+geom_point(colour="orange")+lab
s(title="M.R vs bankCredit real",x="bankCredit real",y="MortgageRate r
eal")
p8=ggplot(data=mortgage,aes(x=X8,y=Y))+geom_point(colour="purple")+lab
s(title="M.R vs currency real ",x="currency real",y="MortgageRate real
")
[Link](p5,p6,p7,p8,nrow=2,ncol=2)
p9=ggplot(data=mortgage,aes(x=X9,y=Y))+geom_point(colour="gray")+labs(title="M.R
vs demandDeposits real",x="demandDeposits real",y="MortgageRate real")
8
p10=ggplot(data=mortgage,aes(x=X10,y=Y))+geom_point(colour="cyan")+labs(title="M
.R vs federalFunds real",x="federalFunds real",y="MortgageRate real")
p11=ggplot(data=mortgage,aes(x=X11,y=Y))+geom_point(colour="brown")+labs(title="
M.R vs moneyStock real",x="moneyStock real",y="MortgageRate real")
p12=ggplot(data=mortgage,aes(x=X12,y=Y))+geom_point(colour="pink")+labs(title="M
.R vs checkableDeposits real ",x="checkableDeposits real",y="MortgageRate real")
[Link](p9,p10,p11,p12,nrow=2,ncol=2)
p13=ggplot(data=mortgage,aes(x=X13,y=Y))+geom_point(colour="aquamarine")+labs(t
itle="M.R vs loansLeases real",x="loansLeases real",y="MortgageRate real")
p14=ggplot(data=mortgage,aes(x=X14,y=Y))+geom_point(colour="turquoise")+labs(titl
e="M.R vs savingsDeposits real",x="savingsDeposits real",y="MortgageRate real")
p15=ggplot(data=mortgage,aes(x=X11,y=Y))+geom_point(colour="red")+labs(title="M.
R vs tradeCurrencies real",x="tradeCurrencies real",y="MortgageRate real")
[Link](p13,p14,p15,nrow=3,ncol=1)
9
Una vez obtenidas todas las relaciones entre las variables de entrada y la de salida
estamos en condiciones de poder describir las formas variadas que toman las
distribuciones de puntos.
En la primera imagen estamos representando la tasa de interés hipotecario frente a
la tasa de mes real, apreciamos una monotonía en el crecimiento creciente de los puntos
y a priori una relación de proporcionalidad directa, cuya validación comprobaremos en
el transcurso del trabajo. Asimismo también encontramos mayor concentración de
puntos en la parte inferior que en la parte superior, puede ser debido a una menor
extracción de datos para esa parte.
El segundo gráfico, situado a la derecha del primero, muestra la relación entre la tasa
de interés hipotecario y la tasa de vencimiento (1Y), en este caso vemos que hay una
distribución de puntos concentrada en la parte inferior hasta que se trunca y se bifurca
en dos ramificaciones. En estudios más concretos veremos si existe alguna tendencia
aunque en un primer vistazo parece que no hay demasiada relación.
El tercer gráfico se encuentra debajo del primero, en este se dibuja de nuevo la
variable de salida, la cual es la misma para todos los gráficos, frente a la tasa del
promedio de subasta. Encontramos una monotonía creciente hasta casi el final donde
vemos una dispersión aleatoria de los puntos.
10
El siguiente gráfico se encuentra a continuación del anterior, la tasa de interés se
representa frente a la tasa de mercado secundario real. Aquí a simple vista apreciamos
una posible relación de proporcionalidad directa entre las dos variables.
Vamos a comentar la segunda tanda de gráficos, en primer lugar tenemos uno en el
que aparece la tasa de interés frente a la tasa de vencimiento (3Y) y a su lado frente a la
tasa de vencimiento (5Y) en las dos encontramos repetido el caso comentado
anteriormente: monotonía creciente con una posible relación de proporcionalidad
directa entre la dos variables. Tiene lógica que aumente la tasa de vencimiento a medida
que aumenta el interés hipotecario, aunque lo cotejaremos en el siguiente apartado.
11
1.2 ANÁLISIS DEL DATASET: “vowel”
class(vowel)
[1] "[Link]"
typeof(vowel)
[1] "list"
> str(vowel)
'[Link]': 990 obs. of 14 variables:
$ TT integer : int 0 0 0 0 0 0 0 0 0 0 ...
$ SpeakerNumber integer: int 0 0 0 0 0 0 0 0 0 0 ...
$ Sex integer : int 0 0 0 0 0 0 0 0 0 0 ...
$ F0 : num -3.64 -3.33 -2.12 -2.29 -2.6 ...
$ F1 : num 0.418 0.496 0.894 1.809 1.938 ...
$ F2 : num -0.67 -0.694 -1.576 -1.498 -0.846 ...
$ F3 : num 1.779 1.365 0.147 1.012 1.062 ...
$ F4 : num -0.168 -0.265 -0.707 -1.053 -1.633 ...
$ F5 : num 1.627 1.933 1.559 1.06 0.764 ...
$ F6 : num -0.388 -0.363 -0.579 -0.567 0.394 0.217
0.322 -0.435 -0.512 -0.466 ...
$ F7 : num 0.529 0.51 0.676 0.235 -0.15 -0.246 0.4
5 0.992 0.928 0.702 ...
$ F8 : num -0.874 -0.621 -0.809 -0.091 0.277 0.238
0.377 0.575 -0.167 0.06 ...
$ F9 : num -0.814 -0.488 -0.049 -0.795 -0.396 -0.3
65 -0.366 -0.301 -0.434 -0.836 ...
$ Class : int 0 1 2 3 4 5 6 7 8 9 ...
Tenemos un data frame con 990 filas y 14 columnas, dentro de su estructura vem
os cuatro variables de tipo enteras y el resto numéricas. Además tenemos 13 variables
de entrada y una variable de salida, la cual es integer.
A continuación mostraremos las primeras seis filas del data frame para corroborar
lo que he puntualizado.
12
TT integer SpeakerNumber integer Sex integer F0
1 0 0 0 -3.639
2 0 0 0 -3.327
3 0 0 0 -2.120
4 0 0 0 -2.287
5 0 0 0 -2.598
6 0 0 0 -2.852
F1 F2 F3 F4
1 0.418 -0.670 1.779 -0.168
2 0.496 -0.694 1.365 -0.265
3 0.894 -1.576 0.147 -0.707
4 1.809 -1.498 1.012 -1.053
5 1.938 -0.846 1.062 -1.633
6 1.914 -0.755 0.825 -1.588
F5 F6 F7 F8
1 1.627 -0.388 0.529 -0.874
2 1.933 -0.363 0.510 -0.621
3 1.559 -0.579 0.676 -0.809
4 1.060 -0.567 0.235 -0.091
5 0.764 0.394 -0.150 0.277
6 0.855 0.217 -0.246 0.238
F9 Class
1 -0.814 0
2 -0.488 1
3 -0.049 2
4 -0.795 3
5 -0.396 4
6 -0.365 5
any([Link](vowel))
[1] FALSE
El resultado es que no hay ningún missing value dentro del data frame.
estadisticavowel=[Link]("media"=sapply(vowel[,4:13],mean),"desviac
ion"=sapply(vowel[,4:13],sd),
+ "varianza"=sapply(vowel[,4:13],var),"
mediana"=sapply(vowel[,4:13],median),"minimo"=sapply(vowel[,4:13],min)
,"maximo"=sapply(vowel[,4:13],max))
Estadisticavowel
media desviacion varianza mediana minimo maximo
F0 -3.203740404 0.8689872 0.7551388 -3.1455 -5.211 -0.941
F1 1.881763636 1.1752720 1.3812643 1.8765 -1.274 5.074
F2 -0.507769697 0.7119483 0.5068703 -0.5725 -2.487 1.431
F3 0.515482828 0.7592613 0.5764778 0.4335 -1.409 2.377
F4 -0.305657576 0.6646023 0.4416962 -0.2990 -2.127 1.831
F5 0.630244444 0.6038711 0.3646603 0.5520 -0.836 2.327
F6 -0.004364646 0.4619268 0.2133764 0.0220 -1.537 1.403
13
F7 0.336552525 0.5733020 0.3286752 0.3280 -1.293 2.039
F8 -0.302975758 0.5701616 0.3250843 -0.3025 -1.613 1.309
F9 -0.071339394 0.6039855 0.3647985 -0.1565 -1.680 1.396
sapply(vowel[,4:13],quantile)
F0 F1 F2 F3 F4 F5
0% -5.21100 -1.2740 -2.48700 -1.4090 -2.1270 -0.8360
25% -3.88775 1.0515 -0.97575 -0.0655 -0.7690 0.1960
50% -3.14550 1.8765 -0.57250 0.4335 -0.2990 0.5520
75% -2.60250 2.7380 -0.06875 1.0960 0.1695 1.0285
100% -0.94100 5.0740 1.43100 2.3770 1.8310 2.3270
F6 F7 F8 F9
0% -1.5370 -1.29300 -1.61300 -1.6800
25% -0.3070 -0.09575 -0.70400 -0.5480
50% 0.0220 0.32800 -0.30250 -0.1565
75% 0.2965 0.77000 0.09375 0.3710
100% 1.4030 2.03900 1.30900 1.3960
Como en el caso anterior vamos a graficar las variables para ver que podemos
deducir en un primer momento de los datos en relación a sus correlaciones.
14
par(mfrow=c(2,1))
barplot(table(vowel[,1],vowel[,14]),beside=T,col=c("blue","red"),legen
d=c("0","1"),main="TT integer vs Class",xlab="Class")
barplot(table(vowel[,3],vowel[,14]),beside=T,col=c("white","black"),le
gend=c("0","1"),main="Sex integer vs Class",xlab="Class")
barplot(table(vowel[,2],vowel[,14]),col=c("dark blue","blue","cyan","g
reen","yellow","orange","brown","white","black","gray","pink","magenta
","red","violet","purple"),legend=c(paste("Speaker",c(0:14))),main="Sp
eak Number vs Class",xlab="Class")
15
Ahora mostraré las gráficas correspondientes a la variables numéricas del data fra-
me y al final procederé a realizar una descripción general de los datos teniendo en cuen
-ta todas las representaciones.
c1=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,4]))+geom_bo
xplot([Link]="red")+labs(title="F0 VS Class",x="Class",y="F0")
c2=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,5]))+geom_bo
xplot([Link]="blue")+labs(title="F1 VS Class",x="Class",y="F1"
)
c3=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,6]))+geom_bo
xplot([Link]="yellow")+labs(title="F2 VS Class",x="Class",y="F
2")
c4=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,7]))+geom_bo
xplot([Link]="orange")+labs(title="F3 VS Class",x="Class",y="F
3")
[Link](c1,c2,c3,c4,nrow=2,ncol=2)
16
c5=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,8]))+geom_bo
xplot([Link]="purple")+labs(title="F4 VS Class",x="Class",y="F
4")
c6=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,9]))+geom_bo
xplot([Link]="brown")+labs(title="F5 VS Class",x="Class",y="F5
")
c7=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,10]))+geom_b
oxplot([Link]="black")+labs(title="F6 VS Class",x="Class",y="F
6")
c8=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,11]))+geom_b
oxplot([Link]="pink")+labs(title="F7 VS Class",x="Class",y="F7
")
[Link](c5,c6,c7,c8,nrow=2,ncol=2)
17
c9=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,12]))+geom_boxplot(outli
[Link]="dark blue")+labs(title="F8 VS Class",x="Class",y="F8")
c10=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,13]))+geom_boxplot(outl
[Link]="red")+labs(title="F9 VS Class",x="Class",y="F9")
[Link](c9,c10,nrow=2,ncol=1)
18
Los dos primeros gráficos de barras tienen la misma estructura. He representado
la frecuencia de 0’s y 1’s asignados a cada clase distinguiéndolos por colores, como
marca la leyenda. Es fácil de ver que tanto en el primer como en el segundo gráfico
encontramos que hay más cantidad de ceros que de unos. En el primer caso los ceros
corresponden a la variable “TT integer” y en el segundo a “Sex integer”.
La tercera gráfica es totalmente distinta a las anteriores y a las que vienen después.
Se está representando la frecuencia de speakers respecto a cada clase pero como hay
15 tipos de speakers distintos para agruparlos a cada clase los he puesto uno encima de
otro en lugar uno a continuación del otro como en el caso anterior debido a una decisión
estética. Se puede ver por la forma que todos tienen la misma frecuencia.
Para las siguientes figuras he utilizado un boxplot para determinar el rango de
valores que toma cada F para cada clase. Y en el primer caso, F0 vs Class, observamos la
notable presencia de outliers y un comportamiento oscilante de una clase a otra. Lo
mismo podemos decir para las siguientes F’s en mayor o menor medida tienen el mismo
comportamiento con más o menos presencia de outliers, los cuales son bastante visibles
por los distintos colores. Posiblemente aunque no tenga referencias para corroborarlo
19
por el tipo de valores que tienen las F’s sean frecuencias de tono. Donde cuanto más
negativo es más y viceversa.
2. REGRESIÓN
summary(fit1)
Estos comandos de encima los aplicaré a todas las variables X’s e Y. Para obtener s
con summary el coeficiente de correlación R-squared y el error residual estándar (ECM)
.
R-squared ECM
Y~X1 0.9551 0.6585
20
Y~X9 0.5148 2.164
En un principio podemos ver que existen 6 variables que se ajustan muy bien al
modelo lineal debido a que el R-squared supera el 0,9. Pero llegados a este punto me
quedaré con los cinco mejores: X4, X5, X6, X1 y X11. Estás serán las variables que
construirán un modelo lineal simple, cada una de ellas.
Como sabemos en ocasiones los números no son suficiente representativos por lo
que es necesario graficar el ajuste para tomar consciencia de él. (M.R=mortgage rate)
Y~X4:
21
Y~X5:
ggplot(mortgage, aes(x=X5, y=Y))+
labs(title="M.R vs 3Y-CMaturityRate",x="3Y-CMaturityRate",y="M.R")+
geom_point(shape = 1)+
22
Y~X6:
ggplot(mortgage, aes(x=X6, y=Y))+
labs(title="M.R vs 5Y-CMaturityRate real",x="5Y-CMaturityRate real",y=
"M.R")+
geom_point(shape = 1)+
Y~X1:
23
Y~X11:
24
Como conclusion de este subapartado puedo decir que el modelo más adecuado
para nuestro conjunto de datos es: Y~X5. Donde estudiamos la tasa de interés
hipotecario frente a la tasa de vencimiento, maturity rate (3Y).
En esta sección vamos a estudiar si un modelo múltiple lineal puede mejorar nuestro
modelo lineal. Para eso consideraré un modelo múltiple con todas las variables del
conjunto de datos con el fin de mostrar explícitamente la eliminación de variables en el
modelo.
fitm1=lm(Y~.,data=mortgage)
summary(fitm1)
25
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.031e-01 1.443e-01 2.793 0.005323 **
X1 4.595e-02 1.535e-02 2.994 0.002817 **
X2 -3.868e-03 5.035e-04 -7.683 3.59e-14 ***
X3 -4.183e-02 1.046e-02 -3.999 6.83e-05 ***
X4 7.983e-02 1.888e-02 4.228 2.57e-05 ***
X5 2.421e-01 2.282e-02 10.611 < 2e-16 ***
X6 1.444e+00 3.359e-02 42.986 < 2e-16 ***
X7 -7.311e-01 3.075e-02 -23.775 < 2e-16 ***
X8 1.365e-03 2.299e-04 5.939 3.92e-09 ***
X9 8.598e-03 5.132e-03 1.675 0.094170 .
X10 1.046e-03 2.903e-04 3.603 0.000329 ***
X11 -1.022e-02 1.192e-02 -0.857 0.391503
X12 -1.088e-02 5.109e-03 -2.130 0.033395 *
X13 1.029e-02 5.146e-03 2.000 0.045736 *
X14 -1.424e-03 2.126e-04 -6.699 3.45e-11 ***
X15 -2.883e-04 5.142e-05 -5.607 2.64e-08 ***
Para descartar las variables sobrantes del modelo múltiple hay que fijarse en los p-
values que se encuentran en la última columna. Por comparación se puede decir que X5,
X6 y X7 son las únicas variables que rechazan la hipótesis nula, por ello nos quedaremos
con esas variables para un posible modelo múltiple.
Los parámetros básicos que se obtienen son:
R-squared: 0.998 ECM: 0.1408
Con respecto al modelo lineal simple este nuevo modelo mejora el ajuste lineal en
dos décimas. El siguiente modelo lo probaré con cuatro variables.
summary(lm(Y~X2+X5+X6+X7,mortgage)):
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.1390902 0.0295344 4.709 2.82e-06 ***
X2 -0.0046343 0.0003845 -12.052 < 2e-16 ***
X5 0.3828640 0.0066048 57.967 < 2e-16 ***
X6 1.4233879 0.0256668 55.456 < 2e-16 ***
X7 -0.7552100 0.0219498 -34.406 < 2e-16 ***
R-squared: 0.9982
Sin embargo este último modelo de 4 variables mejora en las milésimas por lo que n
o me quedaré con él puesto que añadir otra variable no lo mejora significativamente y
siempre será mejor un modelo con menos variables.
Así que probare la interacción con los posibles pares de variables entre: X5, X6 y X7.
summary(lm(Y~X5+X7,mortgage))
26
ggplot(mortgage, aes(x=X5+X7, y=Y))+labs(title="M.R vs 3Y-CMaturityRate real + ba
nkCredit real",x="3Y-CMaturityRate real + bankCredit real",y="M.R")+ geom_point(sha
pe = 1)+geom_smooth(method = lm,se = FALSE)+geom_text(x = 20, y = 16, aes(label ="
R-squared= 0.9927"))
Observando la interacción por pares el mejor ajuste lineal lo encontré con las varia-
bles, X5 y X7, la tasa de vencimiento y el crédito bancario, lo cual en un primer momen
-to nos puede parecer convincente. Y hasta ahora es el mejor modelo, incluso mejora e
l modelo encontrado en regresión lineal simple, Y~X5.
Predict1=predict(lm(Y~I(X8^(-1))+X5,mortgage))
ggplot(mortgage,aes(x=X8,y=Y))+
labs(title="M.R vs currency real",x="currency real",y="Mortage Rate re
al")+
geom_point()+
geom_point(y=predict3,colour="red")+
geom_text(x=2000,y=15,aes(label="R-quared=0.9777"))
27
Obtuve un modelo por interacciones con dos únicas variables que ajusta muy bien
. Las variables involucradas, en el ajuste, son la moneda y la tasa de vencimiento. Como
vemos en la comparativa en la gráfica de la derecha hay un ajuste: lm(Y~I(X8^(-1)),
mortgage)).Es visible la gran diferencia que hay entre los dos ajustes y como la variab
le X5, tasa de vencimiento, explica las fluctuaciones de la relación entre la de salida y la
variable currency.
28
También si nos fijamos en el análisis exploratorio de datos la variable de salida con la
variable de entrada X12, chekeable deposits, tiene la misma forma que las anteriores p
or lo que también servirá el mismo tipo de ajuste.
Asimismo también con el mismo ajuste vemos que la variable X13 y X14, loans lea
ses y savings deposits, se ajustan perfectamente como en los anteriores casos.
29
Como conclusión para cerrar este apartado queda constatado que la variable X5,
la tasa de vencimiento, interacciona con muchas variables lo cual quiere decir que está
muy presenta en las relaciones entre la variable de salida y las de entrada que hemos
comentado hasta ahora.
En este apartado voy a aplicar el algoritmo KNN para regresión el mejor modelo de
regresión lineal múltiple obtenido. El cual recordemos que fue: Y~X5+X7. Teniendo en
cuenta que este algoritmo depende del parámetro k, los vecinos más cercanos, vamos
a tener que ver como varía el ajuste dependiendo de ese parámetro y realizar una
comparación cuantitativa entre los dos algoritmos mediante el error cuadrático medio.
mortgagetrain1<-[Link]("[Link]",
[Link]="@",sep=",",dec=".",header=FALSE)
names(mortgagetrain1)=c(paste(rep("X",15),c(1:15),sep=""),"Y")
30
mortgagetest1<-[Link]("[Link]",
[Link]="@",sep=",",dec=".",header=FALSE)
names(mortgagetest1)=c(paste(rep("X",15),c(1:15),sep=""),"Y")
Aplicaré knn al mejor modelo de regresión múltiple con diferentes k’s, predecimos
valores con knn y calculamos el error cuadrático medio, con el siguiente código:
fitknn1=kknn(mortgagetrain1$Y~mortgagetrain1$X5+mortgagetrain1$X7,mortgagetrai
n1,mortgagetest1,k=1,distance=2,kernel = "optimal", scale=TRUE)
yprime=predict(fitknn1)
sum(abs(mortgagetest1-yprime)^2)/length(yprime)
A continuación expondré una tabla con los resultados de aplicar diferentes k’s para
ajustar los datos.
k ECM
1 17.92246
2 17.9335
5 17.89185
10 17.84467
15 17.78577
20 17.7202
Está claro con estos valores que por muchos vecinos que pongamos el error no
cambia sustancialmente por lo que no importará, en este caso, que k escojamos. Así que
voy mostrar gráficamente cómo se comporta knn con mis datos.
31
El ajuste está representado por las líneas azules y como vemos el ajuste es
bastante aceptable aunque si lo comparamos con el que hice en regresión, este último
es mucho mejor, puesto que el error cuadrático es sustancialmente menor. Era un valor
de ECM=0.2658.
knnMSEtrain 0.01724081
knnMSEtest 0.03513957
lmMSEtrain 0.07041235
lmMSEtest 0.07078912
Con estos resultados podemos establecer una comparación y ver que se ajusta
mejor al modelo de regresión múltiple lineal escogido el método knn puesto que el error
es menor tanto para un conjunto como para el otro en contraste con la regresión.
32
2.4 COMPARACIÓN ENTRE ALGORITMOS
Esto significa que existe un 68% de confianza en que los métodos sean distintos, lo
cual es demasiado grande y nos hace ver que posiblemente los errores cuadráticos
medios calculados puede que su valor no sea del todo correcto.
p-value 0.01241
Con este resultado puedo decir que existen diferencias entre al menos un par de
algoritmos.
33
data: [Link](tablatst) and groups
1 2
2 0.442 -
3 0.071 0.108
P value adjustment method: holm
En 2vs3 podemos decir que tenemos un 90% y 3vs1 también, aproximadamente. Sin
embargo como ya adelantamos antes tenemos una diferencia muy significativa entre el
1 y el 2.
3. CLASIFICACIÓN
3.1 K-NN
34
boxplot(voweltra1_n[,c("F0","F1","F2")])
summary(voweltest1_n[,c("F0","F1","F2")])
boxplot(voweltest1_n[,c("F0","F1","F2")])
Después de probar varios k’s sin conseguir una precisión aceptable de clasifica-
Ción utilizarés cross validation para obtener el mejor k. Incluimos la variable de salida
En el conjunto training que he normalizado. No sin antes convertir los elementos ente-
ros de la variable clase en carácter.
voweltra1_n$Class=voweltra1[,14]
Knnmodel1=train(Class~.,method="knn", tuneGrid=[Link](k=1:30),trControl=trCo
ntrol1,metric="Accuracy",voweltra1_n)
Knnmodel1
prediction=predict(Knnmodel1)
matrizconf=confusionMatrix(table(prediction,voweltra1_n[1:length(prediction),11]))
35
prediction 0 1 2 3 4 5 6 7 8 9 10
0 81 0 0 0 0 0 0 0 0 0 0
1 0 81 0 0 0 0 0 0 0 0 0
2 0 0 81 0 0 0 0 0 0 0 0
3 0 0 0 81 0 0 0 0 0 0 0
4 0 0 0 0 81 0 0 0 0 0 0
5 0 0 0 0 0 81 0 0 0 0 0
6 0 0 0 0 0 0 81 0 0 0 0
7 0 0 0 0 0 0 0 81 0 0 0
8 0 0 0 0 0 0 0 0 81 0 0
9 0 0 0 0 0 0 0 0 0 81 0
10 0 0 0 0 0 0 0 0 0 0 81
Overall Statistics
Accuracy : 1
95% CI : (0.9959, 1)
No Information Rate : 0.0909
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 1
3.2 LDA
En este caso se debe mirar el p-value. Si este es mayor que 0.05, no se rechaza
la hipótesis nula y entonces podemos asumir normalidad.
[Link](vowel[,4])
VARIABLES p-VALUE
F0 9.807e-05
F1 0.0312
36
F2 4.245e-05
F3 4.324e-09
F4 0.07073
F5 5.435e-08
F6 0.0225
F7 0.0005086
F8 0.001437
F9 2.208e-12
0 1 2 3 4 5 6 7 8 9 10
0 62 19 0 0 0 0 0 0 0 5 0
1 13 48 12 0 0 1 0 0 1 6 0
2 4 15 63 3 0 5 3 0 0 0 5
3 0 0 10 69 5 8 0 0 0 0 4
4 0 0 0 0 50 20 17 0 0 0 0
5 0 0 2 12 16 39 4 0 0 0 14
6 0 0 0 0 17 6 59 6 1 0 2
7 0 0 0 0 0 0 3 72 17 7 0
8 0 0 0 0 0 0 2 8 46 10 3
9 11 0 0 0 0 0 0 0 14 59 0
10 0 8 3 6 2 11 2 4 11 3 62
Overall Statistics
Accuracy : 0.6354
95% CI : (0.6045, 0.6654)
No Information Rate : 0.0909
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.5989
Vemos que la precisión obtenida con este método aproximadamente del 64%, muy
inferior a la obtenida por el procedimiento anterior, knn.
37
Ahora hago lo mismo con los conjuntos de test y entrenamiento para utilizar cross
validation y ver el resultado.
prediction 0 1 10 2 3 4 5 6 7 8 9
0 58 16 0 0 0 0 0 0 0 0 6
1 8 41 0 11 0 0 0 0 0 1 5
10 0 9 56 2 5 2 11 0 3 9 1
2 4 15 3 60 3 0 4 2 0 0 0
3 0 0 4 6 61 6 7 0 0 0 0
4 0 0 0 0 0 46 16 18 0 0 0
5 0 0 14 2 12 11 36 7 0 0 0
6 0 0 1 0 0 16 7 49 5 1 0
7 0 0 0 0 0 0 0 3 68 15 5
8 0 0 3 0 0 0 0 2 5 40 9
9 11 0 0 0 0 0 0 0 0 15 55
Overall Statistics
Accuracy : 0.6397
95% CI : (0.6072, 0.6713)
No Information Rate : 0.0909
P-Value [Acc > NIR] : < 2.2e-16
3.3 QDA
0 1 2 3 4 5 6 7 8 9 10
0 85 1 0 0 0 1 0 0 0 0 0
38
1 5 87 7 0 0 0 0 0 0 0 0
2 0 2 83 0 0 0 0 0 0 0 0
3 0 0 0 90 1 1 0 0 0 0 0
4 0 0 0 0 81 9 4 0 0 0 0
5 0 0 0 0 2 74 0 0 0 0 1
6 0 0 0 0 5 0 84 4 1 0 2
7 0 0 0 0 0 0 2 85 5 0 0
8 0 0 0 0 0 0 0 1 83 1 0
9 0 0 0 0 0 0 0 0 1 88 1
10 0 0 0 0 1 5 0 0 0 1 86
Overall Statistics
Accuracy : 0.9354
95% CI : (0.9182, 0.9499)
No Information Rate : 0.0909
P-Value [Acc > NIR] : < 2.2e-16
prediction 0 1 10 2 3 4 5 6 7 8 9
0 78 1 0 0 0 0 1 0 0 0 0
1 3 78 0 7 0 0 0 0 0 0 0
10 0 0 76 0 0 1 4 0 0 0 1
2 0 2 0 74 0 0 0 0 0 0 0
3 0 0 0 0 81 0 1 0 0 0 0
4 0 0 0 0 0 74 9 3 0 0 0
5 0 0 2 0 0 3 66 0 0 0 0
6 0 0 2 0 0 3 0 76 3 1 0
7 0 0 0 0 0 0 0 2 78 4 0
8 0 0 0 0 0 0 0 0 0 75 1
9 0 0 1 0 0 0 0 0 0 1 79
Overall Statistics
Accuracy : 0.9371
95% CI : (0.9192, 0.9522)
No Information Rate : 0.0909
P-Value [Acc > NIR] : < 2.2e-16
La mejora con los conjuntos test y train es sustancialmente pequeña. Pero el método
nos brinda una precisión mucho más notable que con el método LDA.
4. APÉNDICE
library(caret)
library(gridExtra)
library(ggplot2)
library(MASS)
library(kknn)
library(ISLR)
#DATASET: MORTGAGE
#Caracteristicas generales:
#Variables:
40
#Month Rate real
#MaturityRate real
#savings Deposits
#trade Currencies
#Mortgage rate
class(mortgage)
typeof(mortgage)
str(mortgage)
length(mortgage[[Link](mortgage)]) #Comprobamos si hay missing values en
el dataframe
summary(mortgage)
estadisticamortgage=[Link]("media"=sapply(mortgage,mean),"desviacion"=sappl
y(mortgage,sd),
"varianza"=sapply(mortgage,var),"mediana"=sapply(mortgage,median),"minimo"=sap
ply(mortgage,min),"maximo"=sapply(mortgage,max))
41
sapply(mortgage,quantile)
#Primeros 4 graficos
p1=ggplot(data=mortgage,aes(x=X1,y=Y))+geom_point(colour="red")+labs(title="M.R
vs MonthCDRate real",x="MonthCDRate real",y="MortgageRate real")
p2=ggplot(data=mortgage,aes(x=X2,y=Y))+geom_point(colour="green")+labs(title="M.
R vs MaturityRate real ",x="MaturityRate real",y="MortgageRate real")
p3=ggplot(data=mortgage,aes(x=X3,y=Y))+geom_point(colour="blue")+labs(title="M.R
vs RateAuctionAveragereal",x="Rate-AuctionAverage real",y="MortgageRate real")
p4=ggplot(data=mortgage,aes(x=X4,y=Y))+geom_point(colour="yellow")+labs(title="M
.R vs RateSecondaryMarketreal ",x="Rate-SecondaryMarket real",y="MortgageRate
real")
[Link](p1,p2,p3,p4,nrow=2,ncol=2)
#segundos 4 graficos
p5=ggplot(data=mortgage,aes(x=X5,y=Y))+geom_point(colour="violet")+labs(title="M.
R vs 3Y-CMaturityRate real",x="3Y-CMaturityRate real",y="MortgageRate real")
p6=ggplot(data=mortgage,aes(x=X6,y=Y))+geom_point(colour="black")+labs(title="M.
R vs 5Y-CMaturityRate real",x="5Y-CMaturityRate real",y="MortgageRate real")
p7=ggplot(data=mortgage,aes(x=X7,y=Y))+geom_point(colour="orange")+labs(title="M
.R vs bankCredit real",x="bankCredit real",y="MortgageRate real")
p8=ggplot(data=mortgage,aes(x=X8,y=Y))+geom_point(colour="purple")+labs(title="M
.R vs currency real ",x="currency real",y="MortgageRate real")
[Link](p5,p6,p7,p8,nrow=2,ncol=2)
#terceros
42
p9=ggplot(data=mortgage,aes(x=X9,y=Y))+geom_point(colour="gray")+labs(title="M.R
vs demandDeposits real",x="demandDeposits real",y="MortgageRate real")
p10=ggplot(data=mortgage,aes(x=X10,y=Y))+geom_point(colour="cyan")+labs(title="M
.R vs federalFunds real",x="federalFunds real",y="MortgageRate real")
p11=ggplot(data=mortgage,aes(x=X11,y=Y))+geom_point(colour="brown")+labs(title="
M.R vs moneyStock real",x="moneyStock real",y="MortgageRate real")
p12=ggplot(data=mortgage,aes(x=X12,y=Y))+geom_point(colour="pink")+labs(title="M
.R vs checkableDeposits real ",x="checkableDeposits real",y="MortgageRate real")
[Link](p9,p10,p11,p12,nrow=2,ncol=2)
#ultimos
p13=ggplot(data=mortgage,aes(x=X13,y=Y))+geom_point(colour="aquamarine")+labs(t
itle="M.R vs loansLeases real",x="loansLeases real",y="MortgageRate real")
p14=ggplot(data=mortgage,aes(x=X14,y=Y))+geom_point(colour="turquoise")+labs(titl
e="M.R vs savingsDeposits real",x="savingsDeposits real",y="MortgageRate real")
p15=ggplot(data=mortgage,aes(x=X11,y=Y))+geom_point(colour="red")+labs(title="M.
R vs tradeCurrencies real",x="tradeCurrencies real",y="MortgageRate real")
[Link](p13,p14,p15,nrow=3,ncol=1)
#REGRESIÓN SIMPLE
fit1=lm(Y~X1,data=mortgage)
summary(fit1)
43
#REGRESION MULTIPLE
fitm1=lm(Y~.,data=mortgage)
summary(fitm1)
fitm2=lm(Y~X5+X6+X7,data=mortgage)
ggplot(mortgage, aes(x=X5+X6+X7, y=Y))+labs(title="M.R vs 3Y-CMaturityRate real+5Y-
CMaturityRate real+bankCredit real",x="3Y-CMaturityRate real+5Y-CMaturityRate
real+bankCredit real",y="M.R")+ geom_point(shape = 1)+geom_smooth(method =
lm,se = FALSE)+geom_text(x = 20, y = 16, aes(label ="R-squared= 0.998"))
summary(lm(Y~X5+X7,mortgage))
ggplot(mortgage, aes(x=X5+X7, y=Y))+labs(title="M.R vs 3Y-CMaturityRate real +
bankCredit real",x="3Y-CMaturityRate real + bankCredit real",y="M.R")+
geom_point(shape = 1)+geom_smooth(method = lm,se = FALSE)+geom_text(x = 20, y =
16, aes(label ="R-squared= 0.9927"))
#INTERACCIONES Y NO LINEALIDAD
summary(lm(Y~I(X8^(-1))+X1,mortgage))
summary(lm(Y~I(X8^(-1))+X4,mortgage))
summary(lm(Y~I(X8^(-1))+X5,mortgage))
nombre<-"mortgage"
run_knn_fold<-function(i, x, tt= "test") {
file <-paste(x, "-5-", i, "[Link]", sep="")
44
x_tra<-[Link](file, [Link]="@")
file <-paste(x, "-5-", i, "[Link]", sep="")
x_tst<-[Link](file, [Link]="@")
In <-length(names(x_tra)) -1
names(x_tra)[1:In] <-paste ("X", 1:In, sep="")
names(x_tra)[In+1] <-"Y"
names(x_tst)[1:In] <-paste ("X", 1:In, sep="")
names(x_tst)[In+1] <-"Y"
if (tt== "train") {
test <-x_tra
}
else {
test <-x_tst
}
fitMulti=kknn(Y~X5+X7,x_tra,test)
yprime=fitMulti$[Link]
sum(abs(test$Y-yprime)^2)/length(yprime)
}
knnMSEtest<-mean(sapply(1:5,run_knn_fold,nombre,"test"))
knnMSEtrain<-mean(sapply(1:5,run_knn_fold,nombre,"train"))
45
else { test <-x_tst}
fitMulti=lm(Y~X5+X7,x_tra)
yprime=predict(fitMulti,test)
sum(abs(test$Y-yprime)^2)/length(yprime)
}
lmMSEtrain<-mean(sapply(1:5,run_lm_fold,nombre,"train"))
lmMSEtest<-mean(sapply(1:5,run_lm_fold,nombre,"test"))
resultados<-[Link]("regr_test_alumnos.csv")
resultados[14,2]=lmMSEtest
resultados[14,3]=knnMSEtest
tablatst<-cbind(resultados[,2:dim(resultados)[2]])
colnames(tablatst) <-names(resultados)[2:dim(resultados)[2]]
rownames(tablatst) <-resultados[,1]
resultados<-[Link]("regr_train_alumnos.csv")
resultados[14,2]=lmMSEtrain
46
resultados[14,3]=knnMSEtrain
tablatra<-cbind(resultados[,2:dim(resultados)[2]])
colnames(tablatra) <-names(resultados)[2:dim(resultados)[2]]
rownames(tablatra) <-resultados[,1]
#TEST WILCONXON
head(wilc_1_2)
#APLICAMOS TEST
LMvsKNNtst<-[Link](wilc_1_2[,1], wilc_1_2[,2], alternative = "[Link]",
paired=TRUE)
Rmas<-LMvsKNNtst$statistic
pvalue<-LMvsKNNtst$[Link]
LMvsKNNtst<-[Link](wilc_1_2[,2], wilc_1_2[,1], alternative = "[Link]",
paired=TRUE)
Rmenos<-LMvsKNNtst$statistic
Rmas
Rmenos
pvalue
#TEST FRIEDMAN
47
test_friedman<-[Link]([Link](tablatst))
test_friedman
tam <-dim(tablatst)
groups <-rep(1:tam[2], each=tam[1])
#ALGORITMO KNN
mortgagetrain1<-[Link]("[Link]",
[Link]="@",sep=",",dec=".",header=FALSE)
names(mortgagetrain1)=c(paste(rep("X",15),c(1:15),sep=""),"Y")
mortgagetest1<-[Link]("[Link]",
[Link]="@",sep=",",dec=".",header=FALSE)
names(mortgagetest1)=c(paste(rep("X",15),c(1:15),sep=""),"Y")
fitknn1=kknn(Y~X5+X7,mortgagetrain1,mortgagetest1,k=1,distance=2,kernel =
"optimal", scale=TRUE)
yprime=predict(fitknn1)
48
sum(abs(mortgagetest1-yprime)^2)/length(yprime)
ggplot(mortgagetrain1, aes(x=mortgagetrain1$X5+mortgagetrain1$X7,
y=mortgagetrain1$Y))+labs(title="M.R vs 3Y-CMaturityRate real + bankCredit
real",x="3Y-CMaturityRate real + bankCredit real",y="M.R")+ geom_point(shape =
1)+geom_line(y=yprime)+geom_text(x = 20, y = 16, aes(label ="ECM= 17."))
#DATASET: VOWEL
#ANALISIS EXPLORATORIO
vowel<-[Link]("[Link]", [Link]="@",sep=",",dec=".",header=FALSE)
names(vowel)=c("TT integer","SpeakerNumber integer","Sex
integer",paste(rep("F",10),c(0:9),sep=""),"Class")
class(vowel)
typeof(vowel)
str(vowel)
any([Link](vowel))
estadisticavowel=[Link]("media"=sapply(vowel[,4:13],mean),"desviacion"=sapply
(vowel[,4:13],sd)
#GRAFICOS
par(mfrow=c(2,1))
barplot(table(vowel[,1],vowel[,14]),beside=T,col=c("blue","red"),legend=c("0","1"))
barplot(table(vowel[,3],vowel[,14]),beside=T,col=c("white","black"),legend=c("0","1"),
main="Sex integer vs Class",xlab="Class")
barplot(table(vowel[,2],vowel[,14]),col=c("dark
blue","blue","cyan","green","yellow","orange","brown","white","black","gray","pink","
magenta","red","violet","purple"),legend=c(paste("Speaker",c(0:14))))
49
c1=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,4]))+geom_boxplot(outlier
.colour="red")+labs(title="F0 VS Class",x="Class",y="F0")
c2=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,5]))+geom_boxplot(outlier
.colour="blue")+labs(title="F1 VS Class",x="Class",y="F1")
c3=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,6]))+geom_boxplot(outlier
.colour="yellow")+labs(title="F2 VS Class",x="Class",y="F2")
c4=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,7]))+geom_boxplot(outlier
.colour="orange")+labs(title="F3 VS Class",x="Class",y="F3")
[Link](c1,c2,c3,c4,nrow=2,ncol=2)
c5=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,8]))+geom_boxplot(outlier
.colour="purple")+labs(title="F4 VS Class",x="Class",y="F4")
c6=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,9]))+geom_boxplot(outlier
.colour="brown")+labs(title="F5 VS Class",x="Class",y="F5")
c7=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,10]))+geom_boxplot(outli
[Link]="black")+labs(title="F6 VS Class",x="Class",y="F6")
c8=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,11]))+geom_boxplot(outli
[Link]="pink")+labs(title="F7 VS Class",x="Class",y="F7")
[Link](c5,c6,c7,c8,nrow=2,ncol=2)
c9=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,12]))+geom_boxplot(outli
[Link]="dark blue")+labs(title="F8 VS Class",x="Class",y="F8")
c10=ggplot(data=vowel,aes(x=[Link](vowel[,14]),y=vowel[,13]))+geom_boxplot(outl
[Link]="red")+labs(title="F9 VS Class",x="Class",y="F9")
[Link](c9,c10,nrow=2,ncol=1)
#CLASIFICACION KNN
50
voweltra1<-[Link]("[Link]",
[Link]="@",sep=",",dec=".",header=FALSE)
names(voweltra1)=c("TT integer","SpeakerNumber integer","Sex
integer",paste(rep("F",10),c(0:9),sep=""),"Class")
voweltest1<-[Link]("[Link]",
[Link]="@",sep=",",dec=".",header=FALSE)
names(voweltest1)=c("TT integer","SpeakerNumber integer","Sex
integer",paste(rep("F",10),c(0:9),sep=""),"Class")
#Normalizacion
voweltra1$Class=[Link](voweltra1$Class)
voweltra1_n$Class=voweltra1[,14]
trControl1=trainControl(method="cv" , number=10)
Knnmodel1=train(Class~.,method="knn",
tuneGrid=[Link](k=1:30),trControl=trControl1,metric="Accuracy",voweltra1_n)
Knnmodel1
prediction=predict(Knnmodel1)
matrizconf=confusionMatrix(table(prediction,voweltra1_n[1:length(prediction),11]))
51
#LDA
[Link](voweltra1_n[,1])
plot([Link],col=c("blue","red","green","purple","cyan","brown","yellow","black","oran
ge","white"))
matrizconf
#QDA
52