A biblioteca de splines possui funções bs
e ns
que criará uma base de spline para usar com a lm
função. Você poderá ajustar um modelo linear e um modelo incluindo splines e usar a anova
função para fazer o teste de modelo completo e reduzido para verificar se o modelo de spline se encaixa significativamente melhor que o modelo linear.
Aqui está um exemplo de código:
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')
Você também pode usar a poly
função para fazer um ajuste polinomial e testar os termos não lineares como um teste de curvatura.
R2
Existem técnicas para calcular e plotar um intervalo de confiança para um ajuste menor (acho que pode haver uma maneira integrada no pacote ggplot2), você pode plotar a banda de confiança e ver se uma linha reta se encaixaria dentro da banda (isso não é um valor p, mas ainda dá um sim / não.
Você pode ajustar um modelo linear e pegar os resíduos e ajustar um modelo de loess aos resíduos como resposta (e a variável de interesse como preditor), se o modelo verdadeiro for linear, esse ajuste deve estar próximo de uma linha plana e reordenar os pontos em relação ao preditor não deve fazer nenhuma diferença. Você pode usar isso para criar um teste de permutação. Ajuste o loess, encontre o valor previsto mais distante de 0, agora permita aleatoriamente os pontos e ajuste um novo loess e encontre o ponto previsto mais distante de 0, repita várias vezes, o valor p é a proporção dos valores permutados que estão mais longe de 0 que o valor original.
Você também pode considerar a validação cruzada como um método para escolher a menor largura de banda. Isso não fornece um valor p, mas uma largura de banda infinita corresponde a um modelo linear perfeito, se a validação cruzada sugere uma largura de banda muito grande, isso sugere que um modelo linear pode ser razoável, se as larguras de banda mais altas forem claramente inferiores a algumas das as larguras de banda menores sugerem curvatura definida e linear não é suficiente.
anova
lm(y~bs(x,5))
fazendo e por que não estálm(y~I(bs(x,5)))
? Estou bastante confuso com esta chamada porque o resultado de bs (x, 5) não é uma variável ... 2) Entendo corretamente que o valor-p que estou procurando é o resultadoanova(fit0,fit2)
?bs
lm