El objetivo básico detrás del
modelado de regresión linealconceptualmente
simple es encontrar la mejor línea recta desde un plano bidimensional que consta de pares de valores X e Y (es decir, medidas X e Y).Una vez que se encuentra la línea utilizando el método de varianza mínima, se pueden realizar varias pruebas estadísticas para determinar qué tan bien se ajusta la línea a la desviación observada del valor Y.
La ecuación lineal (y = mx + b) tiene dos parámetros que deben estimarse a partir de los datos de X e Y proporcionados, son la pendiente (m) y la intersección con el eje y (b). Una vez estimados estos dos parámetros, puede ingresar los valores observados en la ecuación lineal y observar las predicciones Y generadas por la ecuación.
Para estimar los parámetros myb utilizando el método de varianza mínima, necesitamos encontrar los valores estimados de myb que minimicen los valores observados y predichos de Y para todos los valores de X. La diferencia entre los valores observados y predichos se llama error ( y i- (mx i+ b) ), y si eleva al cuadrado cada valor de error y luego suma estos residuos, el resultado es un número malo de predicción al cuadrado. Usar el método de varianza mínima para determinar el mejor ajuste implica encontrar estimaciones de myb que minimicen la varianza de la predicción.
Se pueden utilizar dos métodos básicos para encontrar las estimaciones myb que satisfacen el método de varianza mínima. En el primer enfoque, se puede utilizar un proceso de búsqueda numérica para establecer diferentes valores de myb y evaluarlos, decidiendo en última instancia cuál es la estimación que produce la varianza mínima. El segundo método consiste en utilizar el cálculo para encontrar ecuaciones para estimar my b. No voy a entrar en el cálculo involucrado en la derivación de estas ecuaciones, pero sí usé estas ecuaciones analíticas en la clase SimpleLinearRegression para encontrar estimaciones de mínimos cuadrados de m y b (consulte getSlope() y getYIntercept en el método de la clase SimpleLinearRegression).
Incluso si tiene ecuaciones que pueden usarse para encontrar estimaciones de mínimos cuadrados de m y b, eso no significa que si ingresa estos parámetros en una ecuación lineal, el resultado será una línea recta que se ajuste bien a los datos. El siguiente paso en este proceso de regresión lineal simple es determinar si la varianza de predicción restante es aceptable.
Puede utilizar un proceso de decisión estadística para rechazar la hipótesis alternativa de que la línea recta se ajusta a los datos. Este proceso se basa en el cálculo del estadístico T, utilizando una función de probabilidad para encontrar la probabilidad de una observación aleatoriamente grande. Como se mencionó en la Parte 1, la clase SimpleLinearRegression genera una serie de valores de resumen, uno de los valores de resumen importantes es el estadístico T, que se puede utilizar para medir qué tan bien se ajusta la ecuación lineal a los datos. Si el ajuste es bueno, el estadístico T tenderá a ser un valor grande; si el valor T es pequeño, debe reemplazar su ecuación lineal con un modelo predeterminado que suponga que la media de los valores Y es el mejor predictor ( porque el promedio de un conjunto de valores a menudo puede ser un predictor útil de la siguiente observación).
Para probar si el estadístico T es lo suficientemente grande como para no utilizar el valor Y promedio como el mejor predictor, es necesario calcular la probabilidad de obtener el estadístico T al azar. Si la probabilidad es baja, entonces se puede prescindir del supuesto nulo de que la media es el mejor predictor y, en consecuencia, se puede estar seguro de que un modelo lineal simple se ajusta bien a los datos. (Consulte la Parte 1 para obtener más información sobre cómo calcular la probabilidad de un estadístico T).
Regrese al proceso de toma de decisiones estadísticas. Le indica cuándo no adoptar la hipótesis nula, pero no si debe aceptar la hipótesis alternativa. En un entorno de investigación, es necesario establecer hipótesis alternativas del modelo lineal mediante parámetros teóricos y estadísticos.
La herramienta de investigación de datos que creará implementa un proceso de toma de decisiones estadísticas para modelos lineales (pruebas T) y proporciona datos resumidos que se pueden utilizar para construir los parámetros teóricos y estadísticos necesarios para construir modelos lineales. Las herramientas de investigación de datos pueden clasificarse como herramientas de apoyo a la toma de decisiones para que los trabajadores del conocimiento estudien patrones en conjuntos de datos pequeños y medianos.
Desde una perspectiva de aprendizaje, vale la pena estudiar el modelado de regresión lineal simple, ya que es la única forma de comprender formas más avanzadas de modelado estadístico. Por ejemplo, muchos conceptos básicos de la regresión lineal simple establecen una buena base para comprender la regresión múltiple (regresión múltiple), el análisis factorial (análisis factorial) y las series de tiempo (serie temporal).
La regresión lineal simple también es una técnica de modelado versátil. Se puede utilizar para modelar datos curvilíneos transformando los datos sin procesar (generalmente con una transformación logarítmica o de potencia). Estas transformaciones linealizan los datos para que puedan modelarse mediante regresión lineal simple. El modelo lineal resultante se representará como una fórmula lineal relacionada con los valores transformados.
Función de probabilidad
En el artículo anterior, evité el problema de implementar la función de probabilidad en PHP pidiéndole a R que encontrara el valor de probabilidad. No estaba completamente satisfecho con esta solución, así que comencé a investigar la pregunta: qué se necesita para desarrollar funciones de probabilidad basadas en PHP.
Comencé a buscar en línea información y código. Una fuente para ambos es el libro Recetas numéricas en C. Funciones de probabilidad. Reimplementé algún código de función de probabilidad (funciones gammln.c y betai.c) en PHP, pero todavía no estoy satisfecho con los resultados. Parece tener un poco más de código que otras implementaciones. Además, necesito la función de probabilidad inversa.
Afortunadamente, me topé con el Cálculo estadístico interactivo de John Pezzullo. El sitio web de John sobre funciones de distribución de probabilidad tiene todas las funciones que necesito, implementadas en JavaScript para facilitar el aprendizaje.
Porté las funciones Student T y Fisher F a PHP. Cambié un poco la API para ajustarme al estilo de nomenclatura de Java e incorporé todas las funciones en una clase llamada Distribución. Una gran característica de esta implementación es el método doCommonMath, que es reutilizado por todas las funciones de esta biblioteca. Otras pruebas que no me molesté en implementar (prueba de normalidad y prueba de chi-cuadrado) también utilizan el método doCommonMath.
También cabe destacar otro aspecto de este trasplante. Al utilizar JavaScript, los usuarios pueden asignar valores determinados dinámicamente a variables de instancia, como por ejemplo:
var PiD2 = pi() / 2
No puedes hacer esto en PHP. A las variables de instancia solo se les pueden asignar valores constantes simples. Esperemos que esta falla se resuelva en PHP5.
Tenga en cuenta que el código del Listado 1 no define variables de instancia; esto se debe a que en la versión de JavaScript, se les asignan valores dinámicamente.
Listado 1. Implementación de la función de probabilidad
<?php
// Distribución.php
// Copyright John Pezullo
// Publicado bajo los mismos términos que PHP.
// Puerto PHP y OO'fying por Paul Meagher
distribución de clases {
function doCommonMath($q, $i, $j, $b) {
$zz = 1;
$z = $zz;
$k = $i;
mientras($k <= $j) {
$zz = $zz * $q * $k / ($k - $b);
$z = $z + $zz;
$k = $k + 2;
}
devolver $z;
}
función getEstudianteT($t, $df) {
$t = abs($t);
$w = $t / sqrt($df);
$th = atan($w);
si ($df == 1) {
devolver 1 - $th / (pi() / 2);
}
$algo = pecado($ésimo);
$cth = cos($th);
si( ($df % 2) ==1 ) {
devolver
1 - ($th + $sth * $cth * $this->doCommonMath($cth * $cth, 2, $df - 3, -1))
/ (pi()/2);
} demás {
devolver 1 - $algo * $this->doCommonMath($cth * $cth, 1, $df - 3, -1);
}
}
función getInverseStudentT($p, $df) {
$v = 0,5;
$dv = 0,5;
$t = 0;
mientras($dv > 1e-6) {
$t = (1 / $v) - 1;
$dv = $dv / 2;
if ( $this->getStudentT($t, $df) > $p) {
$v = $v - $dv;
} demás {
$v = $v + $dv;
}
}
devolver $t;
}
función obtenerFisherF($f, $n1, $n2) {
// implementado pero no mostrado
}
función getInverseFisherF($p, $n1, $n2) {
// implementado pero no mostrado
}
}
?>
Métodos de salida
Ahora que ha implementado la función de probabilidad en PHP, el único desafío restante en el desarrollo de una herramienta de investigación de datos basada en PHP es diseñar un método para mostrar los resultados del análisis.
La solución simple es mostrar los valores de todas las variables de instancia en la pantalla según sea necesario. En el primer artículo, hice precisamente eso al mostrar la ecuación lineal, el valor T y la probabilidad T para el estudio de agotamiento. Es útil poder acceder a valores específicos para propósitos específicos y SimpleLinearRegression admite este uso.
Sin embargo, otro método para generar resultados es agrupar sistemáticamente partes del resultado. Si estudia los resultados de los principales paquetes de software estadístico utilizados para el análisis de regresión, encontrará que tienden a agrupar sus resultados de la misma manera. A menudo incluyen una tabla de resumen, una tabla de análisis de varianza, una tabla de estimación de parámetros y un valor R. De manera similar, creé algunos métodos de salida con los siguientes nombres:
showSummaryTable()
mostrarAnálisisDeVarianza()
mostrarEstimacionesDeParametros()
mostrarValores()
También tengo un método para mostrar la fórmula de predicción lineal ( getFormula() ). Muchos paquetes de software estadístico no generan fórmulas, pero esperan que el usuario construya fórmulas basadas en el resultado de los métodos anteriores. Esto se debe en parte a que la forma final de la fórmula que termine usando para modelar sus datos puede diferir de la fórmula predeterminada por las siguientes razones:
Es posible que la intersección en Y no tenga una interpretación significativa o que los valores de entrada se hayan transformado. de tal manera que es posible que necesites Desconvertirlos para obtener la explicación final.
Todos estos métodos suponen que el medio de salida es una página web. Teniendo en cuenta que es posible que desee generar estos valores de resumen en un medio que no sea una página web, decidí envolver estos métodos de salida en una clase que hereda la clase SimpleLinearRegression. El código del Listado 2 tiene como objetivo demostrar la lógica general de la clase de salida. Para resaltar más la lógica común, se eliminó el código que implementa varios métodos de presentación.
Listado 2. Demostración de la lógica común de la clase de salida
<?php
// HTML.php
// Copyright 2003, Paul Meagher
// Distribuido bajo GPL
include_once "slr/SimpleLinearRegression.php";
clase SimpleLinearRegressionHTML extiende SimpleLinearRegression {
function SimpleLinearRegressionHTML($X, $Y, $conf_int) {
RegresiónLinearSimple::RegresiónLinearSimple($X, $Y, $conf_int);
}
función showTableSummary($x_name, $y_name) { }
función showAnalysisOfVariance() { }
función showParameterEstimates() { }
función showFormula($x_name, $y_name) { }
función showRValues() {}
}
?>
El constructor de esta clase es solo un contenedor del constructor de la clase SimpleLinearRegression. Esto significa que si desea mostrar la salida HTML de un análisis SimpleLinearRegression, debe crear una instancia de la clase SimpleLinearRegressionHTML en lugar de crear una instancia directamente de la clase SimpleLinearRegression. La ventaja es que no saturará la clase SimpleLinearRegression con muchos métodos no utilizados y podrá definir clases más libremente para otros medios de salida (quizás implementando la misma API para diferentes tipos de medios).
Salida gráficaLos
métodos de salida que ha implementado hasta ahora muestran valores resumidos en formato HTML. También es adecuado para mostrar diagramas de dispersión o diagramas de líneas de estos datos en formato GIF, JPEG o PNG.
En lugar de escribir yo mismo el código para generar diagramas de líneas y distribución, pensé que sería mejor usar una biblioteca de gráficos basada en PHP llamada JpGraph. JpGraph está siendo desarrollado activamente por Johan Persson, cuyo sitio web del proyecto lo describe de esta manera:
Ya sea para gráficos "obtenidos de forma rápida pero inapropiada" con un código mínimo, o para gráficos profesionales complejos que requieren un control muy detallado, JpGraph se puede utilizar para dibujar. ellos se vuelven fáciles. JpGraph es igualmente adecuado para gráficos de tipo científico y empresarial.
La distribución JpGraph incluye una serie de scripts de muestra que se pueden personalizar para necesidades específicas. Usar JpGraph como herramienta de investigación de datos es tan simple como encontrar un script de muestra que haga algo similar a lo que necesito y adaptarlo para que se ajuste a mis necesidades específicas.
El script del Listado 3 se extrae de la herramienta de exploración de datos de muestra (explore.php) y demuestra cómo llamar a la biblioteca y completar las clases Línea y Dispersión con datos del análisis SimpleLinearRegression. Los comentarios en este código fueron escritos por Johan Persson (el código base JPGraph hace un buen trabajo al documentarlo).
Listado 3. Detalles de funciones de la herramienta de exploración de datos de muestra explore.php
<?php
// Fragmento extraído del script explore.php
include ("jpgraph/jpgraph.php");
incluir ("jpgraph/jpgraph_scatter.php");
include ("jpgraph/jpgraph_line.php");
// Crea el gráfico
$gráfico = nuevo Gráfico(300,200,'auto');
$graph->SetScale("linlin");
// Título de configuración
$gráfico->título->Set("$título");
$gráfico->img->SetMargin(50,20,20,40);
$grafo->xaxis->SetTitle("$x_name","centro");
$gráfico->yaxis->SetTitleMargin(30);
$graph->yaxis->title->Set("$y_name");
FF_FONT1
,FS_BOLD);
// abajo en el gráfico y no solo en Y=0, que es
// la posición predeterminada
$graph->xaxis->SetPos('min');
// Crea el diagrama de dispersión con algunos colores bonitos
$sp1 = nuevo diagrama de dispersión($slr->Y, $slr->X);
$sp1->marca->SetType(MARK_FILLEDCIRCLE);
$sp1->marca->SetFillColor("rojo");
$sp1->SetColor("azul");
$sp1->EstablecerPeso(3);
$sp1->mark->SetWidth(4);
// Crea la línea de regresión
$lplot = nuevo LinePlot($slr->PredictedY, $slr->X);
$lplot->SetWeight(2);
$lplot->SetColor('navy');
// Agrega los pltos a la línea
$gráfico->Agregar($sp1);
$graph->Add($lplot);
// ... y trazo
$graph_name = "temp/test.png";
$gráfico->Trazo($graph_name);
?>
<img src='<?php echo $graph_name ?>' vspace='15'>
?>
Script de investigación de datos
La herramienta de investigación de datos consta de un único script (explore.php) que llama a los métodos de la clase SimpleLinearRegressionHTML y la biblioteca JpGraph. .
El script utiliza una lógica de procesamiento simple. La primera parte del script realiza una validación básica de los datos del formulario enviado. Si los datos de este formulario pasan la validación, se ejecuta la segunda parte del script.
La segunda parte del script contiene código que analiza los datos y muestra los resultados resumidos en HTML y formatos gráficos. La estructura básica del script explore.php se muestra en el Listado 4:
Listado 4. Estructura de explore.php
<?php
// explorar.php
if (!empty($x_values)) {
$X = explotar(",", $x_values);
$numX = contar($X);
}
si (!empty($y_values)) {
$Y = explotar(",", $y_values);
$numY = recuento($Y);
}
// muestra el formulario de entrada de datos si las variables no están configuradas
if ( (empty($title)) OR (empty($x_name)) OR (empty($x_values)) OR
(vacío($y_name)) O (vacío($conf_int)) O (vacío($y_values)) O
($numX != $numY) ) {
// Código omitido para mostrar el formulario de entrada
} demás {
include_once "slr/SimpleLinearRegressionHTML.php";
$slr = new SimpleLinearRegressionHTML($X, $Y, $conf_int;
echo "<h2>$título</h2>";
$slr->showTableSummary($x_name, $y_name);
eco "<br><br>";
$slr->showAnalysisOfVariance();
echo "<br><br>";
$slr->showParameterEstimates($x_name, $y_name);
echo "<br>";
$slr->showFormula($x_nombre, $y_nombre);
echo "<br><br>";
$slr->showRValues($x_name, $y_name);
echo "<br>";
incluir ("jpgraph/jpgraph.php");
incluir ("jpgraph/jpgraph_scatter.php");
incluir ("jpgraph/jpgraph_line.php");
// El código para mostrar los gráficos está en línea en el
// script explore.php El código para estos gráficos de dos líneas.
// finaliza el script:
// Código omitido para mostrar el diagrama de líneas y dispersión
// Código omitido para mostrar el gráfico de residuos
}
?>
Estudio de daños por incendio
Para demostrar cómo utilizar herramientas de investigación de datos, utilizaré datos de un estudio hipotético de daños por incendio. Este estudio relaciona la cantidad de daños por incendio en las principales áreas residenciales con su distancia a la estación de bomberos más cercana. Por ejemplo, las compañías de seguros estarían interesadas en el estudio de esta relación con el fin de determinar las primas de seguros.
Los datos para este estudio se muestran en la pantalla de entrada en la Figura 1.
Figura 1. Pantalla de entrada que muestra los datos del estudio
Una vez enviados los datos, se analizan y se muestran los resultados de estos análisis. El primer conjunto de resultados que se muestra es el Resumen de tabla , como se muestra en la Figura 2.
Figura 2. El resumen de la tabla es el primer conjunto de resultados que se muestra
El resumen de la tabla muestra los datos de entrada en forma tabular y columnas adicionales que indican el valor predicho Y correspondiente al valor observado .
La Figura 3 muestra tres tablas de resumen de datos de alto nivel después del Resumen de la tabla.
Figura 3. Muestra tres tablas de resumen de datos de alto nivel después del Resumen de tabla
La tabla Análisis de varianza muestra cómo las desviaciones en los valores de Y se pueden atribuir a las dos fuentes principales de desviación, la varianza explicada por el modelo (consulte la fila Modelo) y la varianza no explicada por el modelo (consulte la fila Error). Un valor F grande significa que el modelo lineal captura la mayor parte de la desviación en las mediciones Y. Esta tabla es más útil en un entorno de regresión múltiple, donde cada variable independiente tiene una fila en la tabla.
La tabla Estimaciones de parámetros muestra la intersección (Intercepción) y la pendiente (Pendiente) estimadas del eje Y. Cada fila contiene un valor T y la probabilidad de observar el valor T extremo (consulte la columna Prob > T). Prob > T para pendiente se puede utilizar para rechazar un modelo lineal.
Si la probabilidad del valor T es mayor que 0,05 (o una probabilidad igualmente pequeña), entonces se puede rechazar la hipótesis nula porque la probabilidad de observar aleatoriamente el valor extremo es pequeña. En caso contrario se debe utilizar la hipótesis nula.
En los estudios de pérdidas por incendio, la probabilidad de obtener aleatoriamente un valor T de tamaño 12,57 es inferior a 0,00000. Esto significa que el modelo lineal es un predictor útil (mejor que la media de los valores de Y ) de los valores de Y que corresponden al rango de valores de X observados en este estudio.
El informe final muestra el coeficiente de correlación o valor R. Se pueden utilizar para evaluar qué tan bien se ajusta un modelo lineal a los datos. Un valor R alto indica una buena concordancia.
Cada informe resumido proporciona respuestas a varias preguntas analíticas sobre la relación entre el modelo lineal y los datos. Consulte un libro de texto de Hamilton, Neter o Pedhauzeur para conocer tratamientos más avanzados del análisis de regresión.
Los elementos del informe final que se mostrarán son el diagrama de distribución y el gráfico de líneas de los datos, como se muestra en la Figura 4.
Figura 4. Elementos del informe final: diagrama de distribución y gráfico de líneas
La mayoría de las personas están familiarizadas con la descripción de gráficos lineales (como el primer gráfico de esta serie), por lo que no comentaré sobre esto excepto para decir que la biblioteca JPGraph puede producir gráficos científicos de alta calidad para la Web. También hace un gran trabajo cuando ingresa datos de distribución o de línea recta.
El segundo gráfico relaciona los residuos ( Y observado, Y previsto) con los valores de Y previstos. Este es un ejemplo de un gráfico utilizado por los defensores del Análisis Exploratorio de Datos (EDA) para ayudar a maximizar la capacidad de los analistas para detectar y comprender patrones en los datos. Los expertos pueden utilizar este diagrama para responder preguntas sobre:
Esta herramienta de estudio de datos se puede ampliar fácilmente para producir más tipos de gráficos: histogramas, cuadro gráficos y gráficos de cuartiles: estas son herramientas EDA estándar.
Arquitectura de la biblioteca matemática
Mi afición por las matemáticas me ha mantenido interesado en las bibliotecas de matemáticas en los últimos meses. Investigaciones como esta me llevan a pensar en cómo organizar mi base de código y anticipar el crecimiento futuro.
Usaré la estructura de directorios del Listado 5 por ahora:
Listado 5. Estructura de directorios que es fácil de desarrollar
phpmath/ burnout_study.php explorar.php estudio_fuego.php barra de navegación.php dist/ Distribución.php pescador.php estudiante.php fuente.php jpgraf/ etc... cámara réflex/ Regresión Lineal Simple.php RegresiónLinealSimpleHTML.php temperatura/ |
En el futuro, la configuración de la variable PHP_MATH se realizará a través de un archivo de configuración para toda la biblioteca matemática de PHP.
¿Qué aprendiste?
En este artículo, aprendió a utilizar la clase SimpleLinearRegression para desarrollar herramientas de investigación de datos para conjuntos de datos pequeños y medianos. En el camino, también desarrollé una función de probabilidad nativa para usar con la clase SimpleLinearRegression y amplié la clase con métodos de salida HTML y código de generación de gráficos basados en la biblioteca JpGraph.
Desde una perspectiva de aprendizaje, el modelado de regresión lineal simple merece un estudio más profundo, ya que ha demostrado ser la única forma de comprender formas más avanzadas de modelado estadístico. Se beneficiará de una sólida comprensión de la regresión lineal simple antes de sumergirse en técnicas más avanzadas, como la regresión múltiple o el análisis de varianza multivariado.
Incluso si la regresión lineal simple solo utiliza una variable para explicar o predecir la desviación de otra variable, encontrar relaciones lineales simples entre todas las variables del estudio sigue siendo a menudo el primer paso en el análisis de datos de la investigación. El hecho de que los datos sean multivariados no significa que deban estudiarse utilizando herramientas multivariadas. De hecho, comenzar con una herramienta básica como la regresión lineal simple es una excelente manera de comenzar a explorar patrones en sus datos.