Universidad de Costa Rica
|
|
ID,NOMBRE,KG,MTS 1,Ana,45,1.5 2,Karla,47,1.49 3,Luisa,48,1.51 4,Carlos,51,1.51 5,Enrique,54,1.52 6,María,54,1.54 7,Daniel,57,1.55 8,Silvia,56,1.56 9,Ronald,60,1.56 10,Laura,63,1.58 11,Leo,66,1.57 12,Sandra,64,1.6 13,Eddy,69,1.59 14,Mauro,70,1.62 15,Patricia,62,1.61 16,Julia,61,1.64 |
17,Roberto,70,1.65 18,Francisco,66,1.66 19,Andrea,57,1.68 20,Juan,63,1.67 21,Raúl,64,1.7 22,Ivannia,60,1.71 23,Jorge,67,1.72 24,Luis,69,1.74 25,Guillermo,67,1.75 26,Rosa,63,1.76 27,Elena,65,1.75 28,Rodolfo,75,1.76 29,Mario,78,1.77 30,Ileana,69,1.78 31,Santiago,81,1.78 32,William,84,1.79 |
33,Mayela,72,1.79 34,Flor,75,1.8 35,Javier,87,1.81 36,Isabel,77,1.82 37,Fabricio,88,1.82 38,Sonia,81,1.83 39,Claudia,83,1.84 40,Víctor,90,1.83 41,Fernando,93,1.84 42,Beatriz,86,1.85 43,Diego,95,1.86 44,Mariana,90,1.88 45,Teodora,92,1.87 46,Federico,99,1.88 47,Danilo,102,1.9 48,Jaime,107,1.92 |
En esta tabla están las mediciones que se
les hizo a un grupo de personas con el fin de determinar si es
posible predecir el peso de una persona a partir de su altura.
Para lograr un mejor ajuste, en el modelo de regresión lineal múltiple se usa tanto la
altura, como el cuadrado de la altura y el cubo de la altura. En
fórmulas matemáticas, el modelo es el siguiente:
peso = a + b*altura + c * (altura)*(altura) + d (altura)*(altura)*(altura) + err
Aquí, el valor (err) es el error de ajuste. Si usamos la
notación abreviada Y==peso y X==altura, la fórmula
matemática de la regresión es la siguiente:
Yi = a + bXi + cXi2 +
dXi3 + err
Al hacer la regresión lineal múltiple se logra
encontrar los valores óptimos para el vector B[]=(a,b,c,d)
que tiene 4 valores porque la cantidad de columnas de X[][] es 4.
Para obtener la regresión, usted debe construir primero la matriz X a partir de los valores de la tabla. La matriz X tiene 48 filas porque se dispone de las mediciones (peso:altura) para 48 personas. X tiene estas 4 columnas:
Para implementar su programa, usted debe grabar en el archivo
"p1-ta-7.csv"
el contenido de la tabla de valores (puede copiar
todos esos valores al editor de DrJava para luego guardarlos).
Luego utilize la clase Scanner
junto con el método String.split()
para leer todos el contenido del
archivo almacenado en formato
CSV:
String ln = null, str[] = null; Scanner sc = new Scanner( new File("p1-ta-7.csv") ); // lee ID,NOMBRE,KG,MTS ln = sc.nextLine(); // desecha el primer renglón del archivo while ( sc.hasNextLine() ) { ln = sc.nextLine(); str = ln.split( "," ); // etc... }
PesoAltura.java
, use el programa
FiboMatrix.java
de la Figura 2 de este artículo:
http://www.di-mare.com/adolfo/p/ingbib-LACCEI-10.pdf
http://www.di-mare.com/adolfo/p/ingbib/ingbib.zip
.jar
" completo de JAMA:
http://math.nist.gov/javanumerics/jama/
.jar
" que forman la
biblioteca JAMA en su carpeta de trabajo..jar
" en la sección "Extra
Classpath" de Project→Properties. Colóquelo en en su
carpeta de trabajo.PesoAltura.drjava
(está escrito en formato
XML). Si la versión de DrJava no es tan nueva, es
posible que el archivo del proyecto sea
PesoAltura.xml
o
PesoAltura.pjt
.
PesoAltura.java
para que quede incluido en el
proyecto PesoAltura.drjava
.PesoAltura.drjava
para que DrJava lo guarde en el
disco duro.
PesoAltura.java
..jar
" que están en su carpeta son
los nombres que se mencionan en el proyecto DrJava. Por ejemplo,
si en su carpeta está el archivo
"Jama-1.0.2.jar
" es necesario que en el proyecto
DrJava sea ese el nombre que se menciona en la etiqueta
"classpath" del proyecto:
<classpath> <file absolute="false" name="Jama-1.0.2.jar"/> <classpath/>
PesoAltura.java
:
import Jama.*; // paquete JAMA de matrices import java.io.*; // Clases para leer del teclado import java.util.Scanner; // Clases para leer del teclado import java.lang.Math.*; // Math.abs()
PesoAltura.drjava
PesoAltura.java
Jama-1.0.2.jar
Scanner
es necesario declarar que el método main()
tira
la excepción IOException
.PesoAltura.drjava
con DrJava,
compílelo y ejecútelo.Para esta tarea programada usted debe enviarme estos archivos:
String.split()
, ¿puedo usar la biblioteca
JavaCSV?
String.split()
. Podés jalar la biblioteca
completa de aquí:
http://sourceforge.net/projects/javacsv/
// Se brinca el renglón inicial ID,NOMBRE,KG,MTS final int nFILS = cuentaLineas(ARCHIVO)-1; // no cuenta ID, final int nCOLS = 4; Matrix X = new Matrix( nFILS, nCOLS ); // Y = X * B Matrix Y = new Matrix( nFILS, 1 );En este ejemplo,
cuentaLineas()
es un método
estático. Sí es muy importante acordarse de cerrar
el archivo después de leerlo en
cuentaLineas()
, pues de lo contrario en la segunda
lectura ya no quedaría nada por leer.
"p1-ta-7.csv"
pero no me abre. ¿Qué hago?
","
) como delimitador.
Entregue su tarea por correo electrónico, como lo hizo anteriormente.
Tiempo de entrega: | 7 días |
Modalidad: | En parejas |
Adolfo Di Mare <adolfo@di-mare.com>.
|