Kurvenanpassung in R (mit Beispielen)

Von Fabian
Kategorie: R
Lesezeit: 4 Minuten

Oft möchte man die Gleichung finden, die am besten zu einer Kurve in R passt.

Kurvenanpassung in R

Das folgende Schritt-für-Schritt-Beispiel erklärt, wie man in R mit der Funktion poly() Kurven an Daten anpasst und wie man bestimmt, welche Kurve am besten zu den Daten passt.

Schritt 1: Daten erstellen & visualisieren

Zunächst erstellen wir einen synthetischen Datensatz und dann ein Streudiagramm, um die Daten zu visualisieren:

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

#Erstellen eines Streudiagramms von x vs. y
plot(df$x, df$y, pch=19, xlab='x', ylab='y')

Kurvenanpassung R

Schritt 2: Mehrere Kurven anpassen

Als Nächstes passen wir mehrere polynomiale Regressionsmodelle an die Daten an und stellen die Kurve jedes Modells in derselben Grafik dar:

#polynomiale Regressionsmodelle bis zum 5. Grad anpassen
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)

#Erstellen Sie ein Streudiagramm von x vs. y
plot(df$x, df$y, pch=19, xlab='x', ylab='y')

#X-Achsenwerte definieren
x_axis <- seq(1, 15, length=15)

#Kurve jedes Modells in das Diagramm einfügen
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')

Kurvenanpassung R

Um festzustellen, welche Kurve am besten zu den Daten passt, können wir uns das adjustierte R-Quadrat jedes Modells ansehen.

Dieser Wert gibt den Prozentsatz der Variation in der Antwortvariablen an, der durch die Prädiktorvariable(n) im Modell erklärt werden kann, bereinigt um die Anzahl der Prädiktorvariablen.

#Berechnete bereinigte R-Quadrat jedes Modells
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

Aus der Ausgabe können wir ersehen, dass das Modell mit dem höchsten bereinigten R-Quadrat das Polynom vierten Grades ist, das ein bereinigtes R-Quadrat von 0,959 hat.

Schritt 3: Visualisieren der endgültigen Kurve

Zu guter Letzt können wir ein Streudiagramm mit der Kurve des Polynommodells vierten Grades erstellen:

#Erstellen eines Streudiagramms von x vs. y
plot(df$x, df$y, pch=19, xlab='x', ylab='y')

#X-Achsenwerte definieren
x_axis <- seq(1, 15, length=15)

#Kurve des Polynom-Modells vierten Grades hinzufügen
lines(x_axis, predict(fit4, data.frame(x=x_axis)), col='blue')

Kurvenanpassung in R

Wir können die Gleichung für diese Linie auch mit der Funktion summary() ermitteln:

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 ***
---
Signif. 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

Die Gleichung der Kurve lautet wie folgt:

y = -0,0192x4 + 0,7081x3 - 8,3649x2 + 35,823x - 26,516

Wir können diese Gleichung verwenden, um den Wert der Antwortvariable auf der Grundlage der Vorhersagevariablen im Modell vorherzusagen. Wenn zum Beispiel x = 4 ist, würden wir vorhersagen, dass y = 23,34 ist:

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

Zusätzliche Ressourcen

Einführung in die polynomiale Regression Polynomielle Regression in R (Schritt-für-Schritt)
Verwendung der Funktion seq in R

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: