La biblioteca spline ha funzioni bs
e ns
che creerà basi spline per l'uso con la lm
funzione, quindi è possibile montare un modello lineare e un modello tra cui scanalature e utilizzare la anova
funzione per fare il pieno e ridotto di prova del modello per vedere se il modello spline si adatta significativamente migliore rispetto al modello lineare.
Ecco un esempio di codice:
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')
È inoltre possibile utilizzare la poly
funzione per eseguire un adattamento polinomiale e testare i termini non lineari come test di curvatura.
Per il loess fit è un po 'più complicato. Esistono alcune stime di gradi equivalenti di libertà per il parametro di livellamento del loess che potrebbero essere utilizzati insieme ai valori per i modelli lineari e loess da costruire e F test. Penso che i metodi basati sul bootstrap e sui test di permutazione possano essere più intuitivi.R2
Esistono tecniche per calcolare e tracciare un intervallo di confidenza per un adattamento loess (penso che potrebbe esserci un modo integrato nel pacchetto ggplot2), puoi tracciare la banda di confidenza e vedere se una linea retta si adatterebbe all'interno della banda (questo non è un valore p, ma fornisce comunque un sì / no.
Potresti adattare un modello lineare e prendere i residui e adattare un modello di loess ai residui come risposta (e la variabile di interesse come predittore), se il modello vero è lineare, allora questo adattamento dovrebbe essere vicino a una linea piatta e riordinare i punti rispetto al predittore non dovrebbe fare alcuna differenza. Puoi usarlo per creare un test di permutazione. Adatta il loess, trova il valore previsto più lontano da 0, ora casualmente permuta i punti e adatta un nuovo loess e trova il punto più lontano previsto da 0, ripeti un sacco di volte, il valore p è la proporzione di valori consentiti che sono ulteriormente da 0 rispetto al valore originale.
Puoi anche considerare la convalida incrociata come metodo per scegliere la larghezza di banda degli loess. Ciò non fornisce un valore p, ma una larghezza di banda infinita corrisponde a un modello lineare perfetto, se la convalida incrociata suggerisce una larghezza di banda molto ampia, ciò suggerisce che un modello lineare può essere ragionevole, se le larghezze di banda superiori sono chiaramente inferiori ad alcuni dei le larghezze di banda minori quindi questo suggerisce una curvatura definita e lineare non è sufficiente.