La bibliothèque de splines a des fonctions bs
et ns
cela créera une base de splines à utiliser avec la lm
fonction, alors vous pouvez adapter un modèle linéaire et un modèle comprenant des splines et utiliser la anova
fonction pour effectuer le test de modèle complet et réduit pour voir si le modèle de spline s'adapte nettement mieux que le modèle linéaire.
Voici un exemple de code:
x <- rnorm(1000)
y <- sin(x) + rnorm(1000, 0, 0.5)
library(splines)
fit1 <- lm(y~x)
fit0 <- lm(y~1)
fit2 <- lm(y~bs(x,5))
anova(fit1,fit2)
anova(fit0,fit2)
plot(x,y, pch='.')
abline(fit1, col='red')
xx <- seq(min(x),max(x), length.out=250)
yy <- predict(fit2, data.frame(x=xx))
lines(xx,yy, col='blue')
Vous pouvez également utiliser la poly
fonction pour effectuer un ajustement polynomial et tester les termes non linéaires comme test de courbure.
Pour l'ajustement loess c'est un peu plus compliqué. Il existe des estimations de degrés de liberté équivalents pour le paramètre de lissage du loess qui pourraient être utilisées avec les valeurs pour les modèles linéaire et loess à construire et à tester F. Je pense que les méthodes basées sur les tests d'amorçage et de permutation peuvent être plus intuitives.R2
Il existe des techniques pour calculer et tracer un intervalle de confiance pour un ajustement de loess (je pense qu'il peut y avoir un moyen intégré dans le package ggplot2), vous pouvez tracer la bande de confiance et voir si une ligne droite rentrerait dans la bande (ceci n'est pas une valeur de p, mais donne toujours un oui / non.
Vous pouvez ajuster un modèle linéaire et prendre les résidus et ajuster un modèle de lœss aux résidus comme réponse (et la variable d'intérêt comme prédicteur), si le vrai modèle est linéaire, cet ajustement doit être proche d'une ligne plate et réorganiser les points par rapport au prédicteur ne devrait pas faire de différence. Vous pouvez l'utiliser pour créer un test de permutation. Ajustez le loess, trouvez la valeur prédite la plus éloignée de 0, permutez maintenant aléatoirement les points et ajustez un nouveau loess et trouvez le point le plus éloigné de 0, répétez plusieurs fois, la valeur p est la proportion de valeurs permutées qui sont plus loin de 0 à la valeur d'origine.
Vous pouvez également envisager la validation croisée comme méthode de choix de la bande passante loess. Cela ne donne pas de valeur p, mais une bande passante infinie correspond à un modèle linéaire parfait, si la validation croisée suggère une très large bande passante, alors cela suggère qu'un modèle linéaire peut être raisonnable, si les bandes passantes plus élevées sont clairement inférieures à certaines les bandes passantes plus petites suggèrent alors une courbure définie et linéaire n'est pas suffisant.
anova
approche avec des splines. Pour le test F de considérons que est le SSR divisé par SST et est SSE divisé par SST, donc le rapport est juste le SSR divisé par SSE (les 2 cas de SST s'annulent). Incluez les degrés de liberté et une petite algèbre et vous avez la statistique F pour la régression globale.lm(y~bs(x,5))
passe et pourquoi ce n'est pas le caslm(y~I(bs(x,5)))
? Je suis assez confus par cet appel car le résultat de bs (x, 5) n'est pas une variable ... 2) Est-ce que je comprends bien que la valeur de p que je recherche est le résultat deanova(fit0,fit2)
?bs
lm