Curve-aanpassing in r (met voorbeelden)


Vaak wil je misschien de vergelijking vinden die het beste bij een curve van R past.

Curve-fitting in R

In het volgende stapsgewijze voorbeeld wordt uitgelegd hoe u curven aan gegevens in R kunt aanpassen met behulp van de functie poly() en hoe u kunt bepalen welke curve het beste bij de gegevens past.

Stap 1: Gegevens creëren en visualiseren

Laten we beginnen met het maken van een nepgegevensset en vervolgens een spreidingsdiagram maken om de gegevens te visualiseren:

 #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 ') 

Stap 2: Pas meerdere curven aan

Laten we vervolgens verschillende polynomiale regressiemodellen aan de gegevens aanpassen en de curve van elk model in dezelfde plot visualiseren:

 #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 ')

Om te bepalen welke curve het beste bij de gegevens past, kunnen we naar het aangepaste R-kwadraat van elk model kijken.

Deze waarde vertelt ons het percentage variatie in de responsvariabele dat kan worden verklaard door de voorspellende variabele(n) in het model, aangepast voor het aantal voorspellende variabelen.

 #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

Uit het resultaat kunnen we zien dat het model met de hoogst aangepaste R-kwadraat de vierdegraads polynoom is, die een aangepaste R-kwadraat van 0,959 heeft.

Stap 3: Visualiseer de uiteindelijke curve

Ten slotte kunnen we een spreidingsdiagram maken met de curve van het vierdegraads polynoommodel:

 #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 ')

Curve-fitting in R

We kunnen ook de vergelijking voor deze regel verkrijgen met behulp van de summary() functie:

 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

De vergelijking van de curve is als volgt:

y = -0,0192x 4 + 0,7081x 3 – 8,3649x 2 + 35,823x – 26,516

We kunnen deze vergelijking gebruiken om de waarde van deresponsvariabele te voorspellen op basis van de voorspellende variabelen in het model. Als x = 4 bijvoorbeeld, voorspellen we dat y = 23,34 :

y = -0,0192(4) 4 + 0,7081(4) 3 – 8,3649(4) 2 + 35,823(4) – 26,516 = 23,34

Aanvullende bronnen

Een inleiding tot polynomiale regressie
Polynomiale regressie in R (stap voor stap)
Hoe de seq-functie in R te gebruiken

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert