8 votos

Detección de patrones en el diagrama de dispersión

A continuación es un gráfico de dispersión (con un tope de $10k), que representa la media de la donación de un proyecto recibe vs el número de palabras de la solicitud de financiamiento de ensayo para todos los proyectos representados en el abierto de los Donantes Elegir Datos.

donation amount vs essay length

Hay un patrón evidente, que he tratado de caracterizar mediante el ajuste de la curva de

$$ f(x)=\left(\frac{a}{x-b}\right)^2 $$

a través de manual de parámetros de manipulación. Sin embargo, me gustaría conocer otras formas de abordar el modelado o la búsqueda de patrones y relaciones en los datos que se parece a esto.


Aquí es la disparidad que motiva mi búsqueda de otros métodos:

En el ejemplo canónico de la regresión lineal, los puntos dispersos son las desviaciones de una curva. En este ejemplo, que claramente no es el caso, como parece que los puntos se agrupan en un área.

15voto

Qroid Puntos 81

Sólo para explicar mi comentario, he aquí un ejemplo de cómo su aparente patrón podría ser un artefacto causado por la distribución de los datos a lo largo del eje x. Yo generado 100.000 puntos de datos. Están distribuidos normalmente en el eje de las x ($\mu = 2500, \sigma =600$) y exponencialmente distribuido en el eje y ($\lambda = 1$).

enter image description here

A raíz de la "visual envolvente" del diagrama de dispersión, hay una clara, aunque ilusoria, patrón: y se ve máxima en el rango de 1000< x<4000. Sin embargo, esta aparente patrón, muy convincente visualmente, es sólo un artefacto causado por la distribución de los valores de x. Es decir, sólo que hay más datos en el rango de 1000< x<4000. Usted puede ver esto en el x-histograma en la parte inferior.

Para probarlo, he calculado el promedio de valor y en los contenedores de x (línea negra). Esto es aproximadamente constante para todo x. Si los datos se distribuyen de acuerdo a nuestra intuición de que el diagrama de dispersión, el promedio de los 1000< x<4000 rango debe ser más alto que el resto, pero no lo es. Así que realmente no hay patrón.

No estoy diciendo que esta es toda la historia con sus datos. Pero apostaría a que es una explicación parcial.

Apéndice con los Donantes Elegir datos.

Original diagrama de dispersión con overstriking marcadores:

enter image description here

Mismo diagrama de dispersión con la reducción de la opacidad:

enter image description here

Diferentes patrones de aparecer, pero con 800K de puntos de datos, todavía hay un montón de detalles perdido a overstriking.

Zoom, reducir la opacidad de nuevo y añadir más suave:

enter image description here

3voto

Jake Puntos 6

Me imagino que la variable en el eje Y es exponencialmente distribuida ($p(y) = \lambda e^{-\lambda y}$), pero parece que la tasa parámetro $\lambda$ es variable de acuerdo a la densidad normal de probabilidad de la variable en el eje X.

He generado al azar de datos con MatLab usando la normalidad de la distribución de X y distribución exponencial Y, con $\lambda = p(x)$ y me dieron un resultado similar con sus datos:

enter image description here

Usted podría tratar de aprendizaje de máquina para el ajuste de los parámetros, cambiando su función de coste para comparar la densidad de probabilidad y la tasa de parámetro para cada bin en el "histograma". Si es así, no olvides ejecutar el generador de números aleatorios un par de veces en cada iteración para minimizar el costo.

Aquí está el código que he usado para la trama:

% Normal distribution generation.
x = randn(10000,1);
x = x - min(x);                     % Shifting curve so every x is > 0.

% Histogram informations
k = 100;                            % Number of bins.
binSize = (max(x) - min(x)) / k;    % Width of bins.
y = 0:(k);
y = y .* binSize + min(x);          % Array with Intervals.

p = zeros(k,1);
data = [];

% For every bin...
for i = 1:k
    a = x(x >= y(i) & x < y(i + 1));    % All X values within condition.
    p(i) = size(a,1);                   % Number of occurences (or
                                        % Normal Density Probability).

    if ~isempty(a)
        for j = 1:p(i)

            % lambda = Rate parameter of exponential distribution
            % Rate parameter is varying with normal density probability.
            lambda = p(i);

            % Every X in normal distribution will have a Y
            % which was generated randomly by the exponential 
            % distribution function EXPRND.
            data = [data; a(j), exprnd(lambda)];

        end
    end
end

% Plotting normal distribution VS modified exponential distribution
scatter(data(:,1),data(:,2))

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X