R의 곡선 피팅(예제 포함)


종종 R 곡선에 가장 잘 맞는 방정식을 찾고 싶을 수도 있습니다.

R의 곡선 피팅

다음 단계별 예제 에서는 폴리() 함수를 사용하여 R의 데이터에 곡선을 맞추는 방법과 데이터에 가장 적합한 곡선을 결정하는 방법을 설명합니다.

1단계: 데이터 생성 및 시각화

먼저 가짜 데이터 세트를 만든 다음 산점도를 만들어 데이터를 시각화해 보겠습니다.

 #create data frame
df <- data. frame (x=1:15,
                 y=c(3, 14, 23, 25, 23, 15, 9, 5, 9, 13, 17, 24, 32, 36, 46))

#create a scatterplot of x vs. y
plot(df$x, df$y, pch= 19 , xlab=' x ', ylab=' y ') 

2단계: 여러 곡선 조정

그런 다음 여러 다항식 회귀 모델을 데이터에 맞추고 동일한 플롯에서 각 모델의 곡선을 시각화해 보겠습니다.

 #fit polynomial regression models up to degree 5
fit1 <- lm(y~x, data=df)
fit2 <- lm(y~poly(x,2,raw= TRUE ), data=df)
fit3 <- lm(y~poly(x,3,raw= TRUE ), data=df)
fit4 <- lm(y~poly(x,4,raw= TRUE ), data=df)
fit5 <- lm(y~poly(x,5,raw= TRUE ), data=df)

#create a scatterplot of x vs. y
plot(df$x, df$y, pch=19, xlab=' x ', ylab=' y ')

#define x-axis values
x_axis <- seq(1, 15, length= 15 )

#add curve of each model to plot
lines(x_axis, predict(fit1, data. frame (x=x_axis)), col=' green ')
lines(x_axis, predict(fit2, data. frame (x=x_axis)), col=' red ')
lines(x_axis, predict(fit3, data. frame (x=x_axis)), col=' purple ')
lines(x_axis, predict(fit4, data. frame (x=x_axis)), col=' blue ')
lines(x_axis, predict(fit5, data. frame (x=x_axis)), col=' orange ')

어떤 곡선이 데이터에 가장 잘 맞는지 결정하려면 각 모델의 조정된 R 제곱을 보면 됩니다.

이 값은 예측 변수의 수에 맞게 조정된 모델의 예측 변수로 설명할 수 있는 반응 변수의 변동 비율을 알려줍니다.

 #calculated adjusted R-squared of each model
summary(fit1)$adj. r . squared
summary(fit2)$adj. r . squared
summary(fit3)$adj. r . squared
summary(fit4)$adj. r . squared
summary(fit5)$adj. r . squared

[1] 0.3144819
[1] 0.5186706
[1] 0.7842864
[1] 0.9590276
[1] 0.9549709

결과에서 조정된 R-제곱이 가장 높은 모델은 조정된 R-제곱이 0.959 인 4차 다항식임을 알 수 있습니다.

3단계: 최종 곡선 시각화

마지막으로 4차 다항식 모델의 곡선을 사용하여 산점도를 만들 수 있습니다.

 #create a scatterplot of x vs. y
plot(df$x, df$y, pch=19, xlab=' x ', ylab=' y ')

#define x-axis values
x_axis <- seq(1, 15, length= 15 )

#add curve of fourth-degree polynomial model
lines(x_axis, predict(fit4, data. frame (x=x_axis)), col=' blue ')

R의 곡선 피팅

summary() 함수를 사용하여 이 줄에 대한 방정식을 얻을 수도 있습니다.

 summary(fit4)

Call:
lm(formula = y ~ poly(x, 4, raw = TRUE), data = df)

Residuals:
    Min 1Q Median 3Q Max 
-3.4490 -1.1732 0.6023 1.4899 3.0351 

Coefficients:
                         Estimate Std. Error t value Pr(>|t|)    
(Intercept) -26.51615 4.94555 -5.362 0.000318 ***
poly(x, 4, raw = TRUE)1 35.82311 3.98204 8.996 4.15e-06 ***
poly(x, 4, raw = TRUE)2 -8.36486 0.96791 -8.642 5.95e-06 ***
poly(x, 4, raw = TRUE)3 0.70812 0.08954 7.908 1.30e-05 ***
poly(x, 4, raw = TRUE)4 -0.01924 0.00278 -6.922 4.08e-05 ***
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.424 on 10 degrees of freedom
Multiple R-squared: 0.9707, Adjusted R-squared: 0.959 
F-statistic: 82.92 on 4 and 10 DF, p-value: 1.257e-07

곡선의 방정식은 다음과 같습니다.

y = -0.0192x 4 + 0.7081x 3 – 8.3649x 2 + 35.823x – 26.516

이 방정식을 사용하여 모델의 예측 변수를 기반으로 응답 변수 의 값을 예측할 수 있습니다. 예를 들어 x = 4이면 y = 23.34 라고 예측합니다.

y = -0.0192(4) 4 + 0.7081(4) 3 – 8.3649(4) 2 + 35.823(4) – 26.516 = 23.34

추가 리소스

다항식 회귀 소개
R의 다항식 회귀(단계별)
R에서 seq 함수를 사용하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다