Dr. Baranyai László, fénykép

Dr. Baranyai László

 

R: függvény illesztés

jan 14, 21:20, |

 

A modellalkotás és függvényillesztés sarkalatos kérdése, hogy vajon a megfelelő összefüggést használtuk-e? A grafikonokon klikkelgetve berajzolt trendvonalaknál sokkal több szükséges a mérnöki életben vagy a tudományos kutatás során. Egy pici R-projectben alkalmazható függvényt készítettem az illesztések értékelésére.

Minőségi mutatók

Talán a legismertebb az r-négyzet néven elhíresült determinációs együttható. Algoritmusa szerint a választott matematikai modell átlagtól mért eltérés négyzetösszegét hasonlítja a reziduumok négyzetösszegéhez. Ezzel fejezzük ki, hogy az adatokban tapasztalt eltéréseket milyen mértékben magyarázza a modell és a véletlen hiba. Ugyanakkor sokkal egyszerűbben is számítható, a mért és számított adatok korrelációjának négyzeteként.

Sokan használják a Root Mean Square Error (RMSE) paramétert. Nevéhez méltó módon a reziduumok négyzetének átlagábol von gyököt. Ezáltal egy jellemző eltérést kapunk a mért és becsült adatok között. Könnyen magyarázható, hiszen mértékegysége azonos a mért adatokéval.

Hasonló az Akaike kritérium (AIC), amely információelméleti háttérel is kiegészíti az eddigieket. Előnye, hogy ezáltal eltérő szabadsági fokkal rendelkező modelleket is összehasonlíthatunk.

Végezetül a Durbin-Watson statisztika kerülhet elő, amely a reziduumok autokorrelációját méri. A szisztematikus eltérések jelzik, ha a modell nem követi a mért adatok tendenciáját.

Az alábbi függvény kiszámítja az említett értékeket:

fit.evaluate <- function(y,fitmodel)
{
 yp <- predict(fitmodel)
 # R-squared
 cat("R-squared=", cor(y,yp)^2,"\n")
 # Akaike's Information Criterion
 diff <- y - yp
 tv <- 2*length(fitmodel$coeff) + length(y)*log(sum(diff^2)/length(y))
 cat("AIC=",tv,"\n")
 # Root Mean Square Error
 cat("RMSE=",sqrt(mean(diff^2)),"\n")
 # Durbin-Watson
 tv <- 0
 for (i in 2:length(diff)) tv <- tv + (diff[i]-diff[i-1])^2
 tv <- tv/sum(diff^2)
 cat("Durbin-Watson D=",tv,"\n")
}

Két paramétere van, a mért adatok vektora és az illesztett modell.

Próba

A következő teszt bemutatja a függvény használatát egy mesterséges adatsoron:

> x <- seq(1,10,by=0.5)
> e <- rnorm(length(x))
> y <- 10*x + 5 + e
> fm <- lm(y ~ x)
> summary(fm)

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.5301 -0.5455 -0.2134  0.5251  1.9895 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  5.41557    0.48521   11.16 3.02e-09 ***
x            9.95051    0.07897  126.00  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.9427 on 17 degrees of freedom
Multiple R-squared: 0.9989,     Adjusted R-squared: 0.9989 
F-statistic: 1.588e+04 on 1 and 17 DF,  p-value: < 2.2e-16 

> fit.evaluate(y,fm)
R-squared= 0.9989304 
AIC= -0.3549466 
RMSE= 0.8917193 
Durbin-Watson D= 2.210045 

A teszthez használt adatsor és az illesztett függvény a következő grafikonon látható:

Lineáris illesztés teszt adatokra

Összegzés

Egy olyan R függvényt készítettem, amely segítségével tetszőleges illesztés minősége vizsgálható. Minden modell rendelkezik a számítás során felhasznált adatokkal és objektumokkal, ezért ez általánosan alkalmazható. Természetesen további statisztikai paraméterek is számíthatóak, a kiegészítést azonban már az olvasóra bízom. A blog költözésével egy korábbi hasonló bejegyzés elveszett, ezzel az aktualizált változattal szeretném pótolni.

 

comments powered by Disqus