Primeros pasos con regresión no lineal (nls) con R

La regresión no lineal se da cuando tenemos que estimar Y a partir de una función del tipo Y=f(X,Beta) + Error donde Beta son Beta1, Beta2,…, Beta n. Unos datos X e Y se relacionan mediante una función no lineal respecto a unos parámetros Beta desconocidos. Y cómo obtenemos estos Beta desconocidos, a través de mínimos cuadrados o bien con otros métodos como máxima verosilimilitud. Este cálculo llevará asociada su inferencia estadística habitual. La función que asocia los pares de datos (x1,y1), (x2, y2),…, (yn, xn) será una función conocida. Por eso esta técnica es muy utilizada en ciencias químicas, geodinámica,… donde ya se conoce la relación que hay entre las variables independientes y la variable dependiente pero es necesario realizar modelos con los pares de datos disponibles de cara a obtener estimaciones.

Regresión PLS con R

El tema que estoy estudiando estos días es la regresión por mínimos cuadrados parciales, partial least squares (PLS). Para documentarme teóricamente y conocer las principales posibilidades de R estoy empleando este documento. Para argumentar el uso de esta técnica de nuevo partimos del modelo lineal general Y = X • Beta + Error donde Beta = inv(X’X) * X’Y y ya analizamos los trastornos que nos provoca la inv(X’X) cuando hay columnas de X que son linealmente dependientes, cuando hay multicolinealidad. En ese caso empleábamos la regresión ridge. Bueno, imaginemos esta situación, tenemos más variables que observaciones. Entonces si que no somos capaces de tener una solución para la inv(X’X). Para este problema contamos con los mínimos cuadrados parciales.

Regresión ridge o regresión contraída con R

Por lo visto no he estudiado lo suficiente. Tengo que redimirme y estudiar este verano determinadas técnicas avanzadas de predicción. Fundamentalmente tengo que trabajar con R y tener determinados conocimientos teóricos sobre estas técnicas. Así que he pensado que, a la vez que estudio yo, estudian todos mis lectores. Además es probable que genere debate.

En esta primera entrega vamos a tratar la regresión contraída o regresión ridge. En el blog ya hablamos del problema que suponía la multicolinealidad cuando tenemos este problema una de las posibles soluciones es la regresión contraída o regresión ridge. Como ya dijimos el modelo lineal se expresa como Y = X • Beta + Error la estimación de nuestros parámetros Beta por mínimos cuadrados ordinarios es Beta = inv(X’X) * X’Y cuando X’X no es invertible tenemos un problema. La regresión ridge plantea una solución a este problema con unos parámetros Beta_contraidos = inv(X’X + lambda*I) * X’Y si lambda es 0 estamos ante mínimos cuadrados ordinarios, en otro caso estamos ante un estimador sesgado de Beta. Este estimador sesgado es solución al problema de mínimos cuadrados penalizados y lo que hace es contraer los Betas en torno a 0. En resumen, metemos sesgo pero reducimos varianza.

Determinar la distribución de un vector de datos con R

Para determinar la distribución que sigue un vector de datos en R contamos con el paquete rriskDistributions. Este paquete de R nos permite realizar un test para las distribuciones siguientes:

• Normal
• Logística
• Uniforme
• Gamma
• Lognormal
• Weibull
• Cauchy
• Exponencial
• Chi-cuadrado
• F
• T-Student

Todos aquellos que estén trabajando con los modelos de supervisión de riesgos seguramente conocerán este paquete y si no lo conocen espero que lean estas líneas porque pueden ser de mucha ayuda para ellos, aunque se trate de software libre, no pasa nada, no receléis de R. La sintaxis es tan sencilla que se puede resumir en:

Trucos SAS. Calcular una edad

No penséis que restar dos fechas y obtener una diferencia en años entre ellas es un tema baladí. Ejecutad el siguiente código SAS para calcular la diferencia en años:

data uno;
format fecha1 ddmmyy10.;
do fecha1= 9000 to today();
output;
end;
run;

data uno;
set uno;
format fecha2 ddmmyy10.;
fecha2="15MAY2014"d;

edad = int((fecha2-fecha1)/365.25);

run;

data uno;
set uno;
if month(fecha1)=5 and day(fecha1)=15;
run;

Visualizad el conjunto de datos uno, la serie de edad asusta 28,28,27,25,24,24,… Está claro que algo falla. Hace ya tiempo que hablamos de ello en este mismo blog. Los ceros y los unos con los que guardan estas máquinas las cosas a veces nos juegan estas malas pasadas. Para evitar este problema os sugiero que empleéis la función de SAS YRDIF con la base ‘AGE’. Replicamos el ejemplo:

Truco SAS. Gráfico de correlaciones

Un truco SAS interesante para representar matrices de correlaciones. El ejemplo es muy sencillo, pero previamente tenéis que crear el conjunto de datos SAS para ilustrar el ejemplo. Así que lo primero que hay que hacer es ir a este enlace y copiar el código necesario para crear el conjunto de datos SAS auto. Una vez tenemos ese conjunto de datos de 74 observaciones y 12 variables sólo tenemos que emplear el PROC CORR con una sintaxis muy sencilla:

Un nuevo blog sobre SAS en español

Buenas noticias. Tenemos un nuevo blog sobre SAS en español:

Utilidades, recursos, ejemplos y documentación sobre la herramienta de B.I. SAS.

Esta buena iniciativa parte de Juan Vidal. Se agradece que la comunidad de programadores de SAS compartan sus conocimientos. Algo que no es muy habitual, al contrario pasa con otras herramientas para la gestión de la información y la estadística. Por supuesto esta iniciativa tiene su correspondiente link en esta web.

El problema de la multicolinealidad, intuirlo y detectarlo

El modelo líneal se puede escribir de forma matricial como Y = X • Beta + Error. Donde Y es el vector con nuestra variable dependiente, X la matriz con las variables regresoras, Beta el vector de parámetros y el error esa parte aleatoria que tiene que tener todo modelo. La matriz con nuestras variables regresoras X ha de tener rango completo es decir, todas sus columnas tienen que ser linealmente independientes. Eso nos garantiza que a la hora de estimar por mínimos cuadrados ordinarios X’ X es invertible. Si no es invertible la estimación por mínimos cuadrados ordinarios “se vuelve inestable” ya que X’X =0 y 1/ X’X será muy complicado de calcular ya que los Beta son inversa(X’ X) •X’Y; por ello los resultados que arroja el modelo tienen una alta variabilidad. Cuando esto nos pasa tenemos colinealidad.

SQL vs Hadoop. Más que una tendencia

Google Trends, SQL frente a Hadoop. La tendencia es clara, mientras el interés por Hadoop está creciendo, el interés por SQL baja en picado [aunque vaticino un estancamiento de 2-3 años]. Y si analizamos el interés por zona geográfica por Hadoop:

Ya podéis avidinar quienes marcarán el ritmo en el sector. Quienes serán la referencia en Big Data en 3-4 años. A dónde irán los servidores de las principales compañías mundiales. Muy significativo.

CURSO DE ANÁLISIS ESTADÍSTICO DE DATOS ‘ÓMICOS’ CON R

Los días 8, 9 y 10 de Abril de 2014.

Este curso pretenden introducir a los investigadores al análisis de datos que se están generando con las nuevas tecnologías de secuenciación, así como facilitar a aquellos que ya disponen de datos, su análisis e interpretación de resultados. El curso es un curso práctico en el que se utilizará una metodología similar a la que se ha usado en otros cursos anteriores y que tan buenos resultados ha obtenido.

Truco Excel. Pasar de número con formato AAAAMMDD a fecha con fórmulas

Tenía que transformar un número en formato AAAAMMDD a una fecha en Excel. Tenía que concatenar varias funciones y he pensado que a lo mejor a alguno de los lectores del blog podría interesarle. Se trata de utilizar la función de Excel FECHA con RESIDUO y ENTERO pero con cierto talento. Partimos del una fecha 20140225 y realizamos la siguiente sucesión de fórmulas:

  • Año: ENTERO(C6/10000)
  • Mes: RESIDUO(ENTERO(C6/100);100)
  • Día: RESIDUO(C6;100)
  • Todo junto en una fórmula: FECHA(ENTERO(C6/10000);RESIDUO(ENTERO(C6/100);100);RESIDUO(C6;100))

Ahí tenéis un truco interesante por si os encontráis en la misma situación que yo. Saludos.

Consultor particular de seguros

En España cada vez hay más emprendedores. Como no hay trabajo es necesario buscarse la vida para generar ingresos. No es una buena noticia, podemos crear algo parecido a “la burbuja de los emprendedores”. Espero equivocarme, esto da para otra entrada. El caso es que me gustaría ayudar a aquellas personas que deseen emprender. Mi idea ya tendrá precedentes y pondrá en pie de guerra a mediadores, corredores y muchos profesionales del seguro. ¿Por qué no crear un consultor particular de seguros?