Estou usando um método de mínimos quadrados não linear para ajustar uma função analítica a alguns dados experimentais. Eu tenho que fornecer alguns valores iniciais de adivinhação para o algoritmo, então estou tentando descobrir como fazer isso automaticamente (em vez de a olho nu, que é o que tenho feito).
Estes são alguns dados simulados, criados pela adição de ruído aleatório normalmente distribuído à função analítica
Estou tentando detectar com segurança a posição dessa alteração nos dados. Eu tive algum sucesso limitado calculando a variação média nos pontos de dados e procurando pontos nos dados que diferem significativamente desse valor, mas essa abordagem parece muito limitada pela relação sinal / ruído.
Espero alguma orientação sobre o que preciso analisar para resolver meu problema, pois não conheço muita estatística.
Obrigado!
-Editar colar bin bin para dados xy
fonte
Respostas:
Pode haver alguns métodos mais sofisticados para isso, mas aqui está o meu primeiro pensamento.
Você basicamente quer pegar a derivada da função e descobrir onde ela é a maior. Numericamente, você pode simplesmente pegar a diferença entre pontos de dados e descobrir quais dois pontos têm a maior diferença. Então o ponto médio dos valores x para esses dois pontos é a sua localização de maior alteração.
Este método simples é suscetível ao ruído. Portanto, você pode primeiro filtrar os dados usando um filtro que não os desloque para a direita ou esquerda. Se você usar um filtro FIR simples, filtre de frente para trás e depois filtre o resultado de trás para frente. O resultado é um conjunto de dados duplamente filtrado e NÃO alterado. Siga o procedimento acima para encontrar o ponto com a maior diferença entre os valores.
Você também pode usar cálculos diferenciais numéricos mais sofisticados que usam mais que a diferença de dois pontos.
fonte
Seus dados sugerem visualmente uma alteração assintótica (gradual) para o novo nível. Os métodos de séries temporais costumam ser usados para detectar esses tipos de estruturas, mesmo que os dados não sejam séries temporais. Poste seus dados e talvez eu possa demonstrar isso com "brinquedos" à minha disposição. Se os seus dados são séries temporais, como o @jason refletiu, é necessário lidar efetivamente com o modelo de ruído para "ver" corretamente a estrutura.
EDITADO NO RECIBO DE DADOS:
A modelagem geralmente é uma abordagem iterativa, com etapas intermediárias que fornecem pistas valiosas para um modelo útil. Peguei seus dados e os introduzi na AUTOBOX (um dos meus brinquedos que ajudei a desenvolver). Um gráfico inicial sugeria fortemente um conjunto de dados longitudinal (cronológico) onde a série X é reportada em intervalos fixos. A AUTOBOX sugeriu automaticamente um modelo ARIMA padrão (com detecção de intervenção) substituindo o X não estacionário por um operador diferenciado. Aqui está o gráfico real / ajustado / previsto e o modelo sugerido.
Após a análise, outro modelo possível incorporando uma estrutura de defasagem para uma variável indicadora se sugeriu. Introduzi um Pulse no período de tempo 76 (um Dynamic Predictor permitindo expressamente até um possível efeito de atraso de 50 períodos) (o início da transição) para lidar com o relacionamento entre o Y original e o X sugerido pelo usuário para obter mais investigar completamente o efeito de X do que aceitar a retirada total de X.
A seguir, é apresentado o gráfico de previsão de ajuste real para essa abordagem e o modelo robusto de função de transferência identificado. com plotagem residual e ACF residual aqui
O modelo final captura a dinâmica em certos atrasos do Dynamic Predictor e alguns pulsos e uma estrutura de memória razoável.
Mesmo os pacotes de análise mais poderosos geralmente precisam de alguma orientação ao lidar com conjuntos de dados complexos do mundo real como este, pois nada se compara à mente humana criativa.
fonte
Uma técnica é testar todos os valores da variável x para o desvio padrão dos dados antes e depois deles. Para uma verdadeira função de passo, a soma desses dois será mínima no local do passo e o mínimo deve ser um bom parâmetro inicial para sua função não linear.
Aqui está um gráfico dos seus dados originais (preto), o desvio padrão antes de x (azul), depois de x (vermelho) e a soma dos dois últimos (verde).
fonte
Reconheço que esta questão é antiga. Mas eu queria lançar outro método lá fora. Canny escreveu um artigo (Uma abordagem computacional para detecção de bordas), onde ele resolveu esse problema no caso bidimensional de detecção de bordas em imagens. Você pode ler o jornal, se quiser, mas, para ir direto ao ponto, pode obter uma aproximação muito boa ao ponto de mudança, fazendo o seguinte:
onde é um fator de escala.χ
Na minha experiência com esse método, descobri que é difícil escolher os parâmetros de dimensionamento corretos. Mas pode haver mais trabalho sobre isso que eu não estou ciente.
Resumi o artigo de Canny e forneci um exemplo aqui .
fonte
Você pode investigar séries temporais transformadas da Wavelet usando tipos de período curto haar / db4 . Não tenho ponteiros, mas apenas alguns termos de pesquisa, tente 'detecção de ponto de alteração wavelet'.
Existem vários pacotes R no Wavelets, consulte a exibição de tarefas de séries temporais: https://cran.r-project.org/web/views/TimeSeries.html
Veja aqui um exemplo: http://it.mathworks.com/help/wavelet/examples/detecting-discontinuities-and-breakdown-points.html?requestedDomain=www.mathworks.com
Para a teoria, procure o artigo de Mallat et Hwang: "Detecção e processamento de singularidade com wavelets"
Veja a resposta relacionada: Aplicação de wavelets a algoritmos de detecção de anomalias baseados em séries temporais
fonte