Eu tenho um gráfico de dispersão. Como posso adicionar uma linha de tendência não linear?
r
data-visualization
nonlinear-regression
trend
Karina Khusainova
fonte
fonte
Respostas:
Vamos criar alguns dados.
A seguir, mostramos como você pode ajustar uma linha de menor ou o ajuste de uma regressão não linear.
fonte
Se você usar
ggplot2
(o terceiro sistema de plotagem, em R, após a base R e a estrutura), isso se tornará:Você pode escolher como os dados são suavizados: veja
?stat_smooth
para detalhes e exemplos.fonte
stat_smooth
digitando?stat_smooth
como Vincent afirmou. :-)Sem saber exatamente o que você está procurando, usando o
lattice
pacote você pode facilmente adicionar uma curva de loesstype="smooth"
; por exemplo,Veja os
help("panel.loess")
argumentos que podem ser passados para a rotina de ajuste menor para alterar, por exemplo, o grau do polinômio a ser usado.Atualizar
Para alterar a cor da curva de loess, você pode escrever uma função pequena e passá-la como um
panel
parâmetro paraxyplot
:fonte
Sua pergunta é um pouco vaga, então eu vou fazer algumas suposições sobre qual é o seu problema. Ajudaria muito se você pudesse criar um gráfico de dispersão e descrever um pouco os dados. Por favor, se estou fazendo suposições ruins, ignore minha resposta.
Primeiro, é possível que seus dados descrevam algum processo que você razoavelmente acredita não ser linear. Por exemplo, se você está tentando fazer uma regressão à distância para um carro parar com uma frenagem repentina versus a velocidade do carro, a física nos diz que a energia do veículo é proporcional ao quadrado da velocidade - não à velocidade em si. Então, você pode querer tentar a regressão polinomial neste caso, e (em R), você pode fazer algo parecido
model <- lm(d ~ poly(v,2),data=dataset)
. Há muita documentação sobre como inserir várias não linearidades no modelo de regressão.Por outro lado, se você tem uma linha que é "vacilante" e não sabe por que ela é vacilante, um bom ponto de partida provavelmente seria a regressão ponderada localmente ou
loess
em R. Isso faz a regressão linear em um pequeno região, em oposição a todo o conjunto de dados. É mais fácil imaginar uma versão "k-vizinho mais próximo", onde calcular o valor da curva a qualquer momento, você encontra os k pontos mais próximos ao ponto de interesse e faz a média deles. Loess é exatamente isso, mas usa regressão em vez de uma média direta. Para isso, usemodel <- loess(y ~ x, data=dataset, span=...)
, onde aspan
variável controla o grau de suavização.Na terceira mão (ficando sem mãos) - você está falando de tendências? Isso é um problema temporal? Se for, seja um pouco cauteloso com a interpretação excessiva das linhas de tendência e a significância estatística. Tendências em séries temporais podem aparecer em processos "autoregressivos" e, para esses processos, a aleatoriedade do processo pode ocasionalmente criar tendências a partir de ruído aleatório, e o teste de significância estatística errado pode dizer que é significativo quando não é!
fonte
Colocando pontos de amostra de plotagem de dispersão e curva suave no mesmo gráfico:
fonte