산점도가 있습니다. 비선형 추세선을 추가하려면 어떻게해야합니까?
답변
데이터를 만들어 봅시다.
n <-100 x <-seq (n) y <-rnorm (n, 50 + 30 * x ^ (-0.2), 1) 데이터 <-data.frame (x, y)
다음은 황토 선 또는 비선형 회귀 분석에 적합하게하는 방법을 보여줍니다.
플롯 (y ~ x, 데이터) # 황토 라인에 적합 loess_fit <-loess (y ~ x, 데이터) 라인 (Data $ x, 예측 (loess_fit), col = "blue") # 비선형 회귀에 적합 nls_fit <-nls (y ~ a + b * x ^ (-c), 데이터, 시작 =리스트 (a = 80, b = 20, c = 0.2)) 라인 (데이터 $ x, 예측 (nls_fit), col = "red")
답변
ggplot2
(기본 R과 격자 다음에 R의 세 번째 플로팅 시스템) 을 사용하면 다음 과 같이됩니다.
library(ggplot2)
ggplot(Data, aes(x,y)) + geom_point() + geom_smooth()
데이터를 부드럽게 만드는 방법을 선택할 수 있습니다 ?stat_smooth
. 자세한 내용 및 예를 참조하십시오 .
답변
원하는 것을 정확히 알지 못하면 lattice
패키지를 사용하여 쉽게 황토 곡선을 추가 할 수 있습니다 type="smooth"
. 예를 들어
> library(lattice)
> x <- rnorm(100)
> y <- rnorm(100)
> xyplot(y ~ x, type=c("smooth", "p"))
help("panel.loess")
예를 들어, 사용하는 다항식의 정도를 변경하기 위해 황토 피팅 루틴으로 전달할 수있는 인수를 참조하십시오 .
최신 정보
황토 곡선의 색상을 변경하려면 작은 함수를 작성하여 panel
매개 변수로 xyplot
다음 과 같이 전달하면됩니다 .
x <- rnorm(100)
y <- rnorm(100)
panel_fn <- function(x, y, ...)
{
panel.xyplot(x, y, ...)
panel.xyplot(x, y, type="smooth", col="red", ...)
}
xyplot(y ~ x, panel=panel_fn)
답변
귀하의 질문은 약간 모호하므로 귀하의 문제가 무엇인지에 대해 몇 가지 가정을하겠습니다. 산점도를 작성하고 데이터를 조금 설명하면 도움이 될 것입니다. 내가 잘못된 가정을하고 있다면 내 대답을 무시하십시오.
첫째, 데이터는 비선형이라고 합리적으로 믿는 일부 프로세스를 설명 할 수 있습니다. 예를 들어, 차량이 급제동과 급격한 속도로 정지하기 위해 거리에서 회귀를하려고하는 경우 물리학은 차량의 에너지가 속도가 아닌 속도의 제곱에 비례한다고 알려줍니다 그 자체. 따라서이 경우 다항 회귀 분석을 시도하고 (R에서는) 다음과 같은 작업을 수행 할 수 model <- lm(d ~ poly(v,2),data=dataset)
있습니다. 다양한 비선형 성을 회귀 모델로 가져 오는 방법에 대한 많은 문서가 있습니다.
반면에 “흔들리는”선이 있는데 왜 흔들리는 지 모른다면, 좋은 출발점은 아마도 국부적으로 가중 된 회귀 또는 loess
R 일 것입니다. 전체 데이터 세트와 달리 지역. “k 가장 가까운 이웃”버전을 상상하는 것이 가장 쉽습니다. 어느 지점에서든 곡선의 값을 계산할 때 관심 지점에 가장 가까운 k 지점을 찾아 평균을 구합니다. 황토는 그와 같지만 직선 평균 대신 회귀를 사용합니다. 이 model <- loess(y ~ x, data=dataset, span=...)
경우 span
변수가 스무딩 정도를 제어하는을 사용하십시오.
세 번째 손에 (손에))-트렌드에 대해 이야기하고 있습니까? 이것은 일시적인 문제입니까? 그렇다면 추세선과 통계적 유의성을 과도하게 해석하여 약간 신중해야합니다. 시계열의 추세는 “자동 회귀”프로세스에 나타날 수 있으며, 이러한 프로세스의 경우 프로세스의 임의성으로 인해 임의 노이즈가 발생하지 않는 경향이 생길 수 있으며 잘못된 통계적 유의성 테스트를 통해 중요하지 않은시기를 알 수 있습니다!
답변
분산 그래프 샘플 점과 부드러운 곡선을 같은 그래프에두기 :
library(graphics)
## Create some x,y sample points falling on hyperbola, but with error:
xSample = seq(0.1, 1.0, 0.1)
ySample = 1.0 / xSample
numPts <- length(xSample)
ySample <- ySample + 0.5 * rnorm(numPts) ## Add some noise
## Create x,y points for smooth hyperbola:
xCurve <- seq(0.1, 1.0, 0.001)
yCurve <- 1.0 / xCurve
plot(xSample, ySample, ylim = c(0.0, 12.0)) ## Plot the sample points
lines(xCurve, yCurve, col = 'green', lty = 1) ## Plot the curve