Detecção de padrões no gráfico de dispersão

7

Abaixo está um gráfico de dispersão (limitado a US $ 10.000) representando a doação média que um projeto recebe versus a contagem de palavras do ensaio de solicitação de financiamento para todos os projetos representados nos dados de escolha de doadores abertos .

doação versus duração do ensaio

Há um padrão perceptível, que tentei caracterizar ajustando a curva

f(x)=(axb)2

através da manipulação manual de parâmetros. No entanto, eu gostaria de conhecer outras maneiras de abordar a modelagem ou encontrar padrões / relacionamentos em dados com essa aparência.


Aqui está a disparidade que motiva minha busca por outros métodos:

No exemplo canônico de regressão linear, os pontos dispersos são desvios de uma curva. Neste exemplo, isso claramente não é o caso, pois parece que os pontos estão agrupados em alguma área.

brownie_in_motion
fonte
2
Seus dados contêm zeros exatos na variável y? E a variável x? Por que você tampou? Quanto mais altos os valores vão?
Glen_b -instala Monica 5/05
Sim, zeros exatos em ambos. Limitei-me para visualizar melhor a estrutura na vizinhança representada, valores exorbitantes acima de 10k distorceram o gráfico. Os valores ir tão alto como 100k
brownie_in_motion
4
O "padrão" parece ilusório. Aparentemente, está tentando rastrear algum envelope superior da resposta. Embora isso possa ser feito, não é possível com uma plotagem tão confusa, e claramente não foi realizada corretamente, porque à esquerda o traço corresponde a percentis extremamente altos, mas à direita marca percentis mais baixos e mais baixos. Considere realizar uma exploração mais esclarecedora dos dados, como usar o software para desenhar traços de percentis selecionados para faixas estreitas de contagem de palavras.
whuber
4
É difícil dizer porque o gráfico de dispersão está saturado, mas eu acho que o padrão, ou seja, aumento do financiamento no intervalo de 500-3000 palavras, é um artefato devido a uma maior densidade de pontos de dados nesse intervalo. Se você tentar a sugestão do whuber, o financiamento médio em função da contagem de palavras poderá parecer muito menos dramático.
R Greg Stacey
11
Concorde com @whuber. Acho que você pode estar tentando aplicar algo como uma estimativa de densidade univariada a um gráfico de dispersão bivariado, mas isso não faz muito sentido. Uma ferramenta mais apropriada seria um histograma ou densidade bivariada.
Dsaxton # 6/16

Respostas:

15

Apenas para elaborar meu comentário, aqui está um exemplo de como seu padrão aparente pode ser um artefato causado pela distribuição de dados ao longo do eixo x. Eu gerei 100.000 pontos de dados. Eles são normalmente distribuídos no eixo x (μ=2500,σ=600) e distribuído exponencialmente no eixo y (λ=1)

insira a descrição da imagem aqui

Seguindo o "envelope visual" do gráfico de dispersão, existe um padrão claro, embora ilusório: y parece máximo no intervalo de 1000 <x <4000. No entanto, esse padrão aparente, visualmente muito convincente, é apenas um artefato causado pela distribuição dos valores x. Ou seja, há apenas mais dados no intervalo 1000 <x <4000. Você pode ver isso no histograma x na parte inferior.

Para provar isso, calculei o valor médio de y nas posições de x (linha preta). Isso é aproximadamente constante para todos os x. Se os dados foram distribuídos de acordo com a nossa intuição a partir do gráfico de dispersão, a média no intervalo 1000 <x <4000 deve ser maior que o restante - mas não é. Portanto, realmente não há padrão.

Não estou dizendo que esta é a história completa com seus dados. Mas aposto que é uma explicação parcial.

Adendo com doadores reais Escolha os dados.

Gráfico de dispersão original com marcadores impressionantes:

insira a descrição da imagem aqui

Mesmo gráfico de dispersão com opacidade reduzida:

insira a descrição da imagem aqui

Aparecem padrões diferentes, mas, com 800 mil pontos de dados, ainda há muitos detalhes perdidos para o overstriking.

Aplique zoom, reduza a opacidade novamente e adicione mais suavidade:

insira a descrição da imagem aqui

R Greg Stacey
fonte
11
Às vezes, ajuda a usar a transparência nos marcadores para ter uma idéia da densidade.
xan
2
@xan Concordou. Descobri que, com tantos marcadores (ou praticamente qualquer número maior que 10K), é necessário usar a máxima transparência possível para ver o que está acontecendo no centro de uma nuvem de pontos, como col="#00000001"em R. Com quase um milhão de pontos, a suavização é essencial. É uma boa idéia diminuir o alcance do que normalmente é usado para nuvens de pontos menores, para obter mais detalhes locais.
whuber
3

Eu acho que sua variável no eixo Y é exponencialmente distribuída (p(y)=λeλy), mas parece que o parâmetro rate λ está variando de acordo com a probabilidade de densidade normal da sua variável no eixo X.

Gerei dados aleatórios com o MatLab usando distribuição normal para X e distribuição exponencial para Y, com λ=p(x) e obtive um resultado semelhante com seus dados:

insira a descrição da imagem aqui

Você pode tentar o aprendizado de máquina para ajustar os parâmetros, alterando sua função de custo para comparar a densidade de probabilidade e o parâmetro de taxa de cada compartimento no seu 'histograma'. Nesse caso, não se esqueça de executar o gerador aleatório algumas vezes em cada iteração para minimizar o custo.

Aqui está o código que eu usei para o enredo:

% 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))
Mauricio Ramalho Custodio
fonte
1

A pergunta menciona regressão, que normalmente aborda a expectativa condicional:

E[y|x]=yp(y|x)dy,
Onde y é a doação média e xé o número de palavras. A regressão linear pode ser muito restritiva e, portanto, pode-se aplicar uma abordagem de regressão local, como a regressão do kernel Nadaraya-Watson. Os resultados podem ser sensíveis à escolha da largura de banda: uma largura de banda larga pode mascarar variações locais interessantes.

De um modo mais geral, a questão da independência entre x e yé interessante. E sex e y são independentes então p(y|x)=p(y)e, é claro, a expectativa condicional também é independente. Masy pode depender de x de maneira interessante, mesmo que a expectativa condicional seja independente da x.

Com tantos dados, eu olhava para histogramas de y que todos têm quase o mesmo valor de x e veja como o histograma muda conforme o valor escolhido de xalterar. Somente após essa investigação eu pensaria em como proceder de maneira mais formal.

mef
fonte