Pürüzsüz bir spline / loess regresyonunun p değerini nasıl bulabilirim?


10

Bazı değişkenlerim var ve aralarında doğrusal olmayan ilişkiler bulmak istiyorum. Bu yüzden bazı spline veya loess uymaya ve güzel araziler yazdırmaya karar verdim (aşağıdaki koda bakın). Ama aynı zamanda ilişkinin bir rastlantısallık meselesi olduğuna dair bir fikir veren bazı istatistiklere sahip olmak istiyorum ... örneğin, örneğin doğrusal regresyon için olduğu gibi, genel bir p-değerine ihtiyacım var. Diğer bir deyişle, kodum herhangi bir veriye bir eğri sığacağından, takılan eğrinin herhangi bir anlam ifade edip etmediğini bilmeliyim.

x <- rnorm(1000)
y <- sin(x) + rnorm(1000, 0, 0.5)

cor.test(x,y)
plot(x, y, xlab = xlab, ylab = ylab)
spl1 <- smooth.spline(x, y, tol = 1e-6, df = 8)
lines(spl1, col = "green", lwd = 2)

spl2 <- loess(y ~ x)
x.pr <- seq(min(x), max(x), length.out = 100)
lines(x.pr, predict(spl2, x.pr), col = "blue", lwd = 2)

Yanıtlar:


8

Spline kütüphanesinin işlevleri vardır bsve nsbu işlevle kullanmak için spline temeli oluşturacaktır lm, o zaman lineer bir modele ve anovaspline içeren bir modele sığabilir ve spline modelinin daha iyi uyup uymadığını görmek için tam ve azaltılmış model testini yapmak için işlevi kullanabilirsiniz. doğrusal modelden daha.

İşte bazı örnek kod:

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')

Ayrıca kullanabilirsiniz polybir polinom uyum yapmak fonksiyonu ve eğrilik test olarak doğrusal olmayan terimler test edin.

Lös uyum için biraz daha karmaşıktır. Less yumuşatma parametresi için, lineer ve loess modellerinin oluşturması ve F testi için değerleri ile birlikte kullanılabilen eşdeğer serbestlik derecelerine ilişkin bazı tahminler vardır . Bence önyükleme ve permütasyon testlerine dayanan yöntemler daha sezgisel olabilir.R2

Kötü bir uyum için bir güven aralığı hesaplamak ve çizmek için teknikler vardır (bence ggplot2 paketinde yerleşik bir yol olabilir), güven bandını çizebilir ve bandın içine düz bir çizginin uyup uymayacağını görebilirsiniz (bu bir p değeri değil, yine de evet / hayır veriyor.

Doğrusal bir modele sığabilir ve kalıntıları alabilir ve kalıntılara zayıf bir model yanıt olarak (ve tahminci olarak ilgilenilen değişken) sığdırabilirsiniz, eğer gerçek model doğrusalsa, bu uyum düz bir çizgiye yakın olmalı ve noktaları yeniden sıralamalıdır öngörücüye göre herhangi bir fark yaratmamalıdır. Bir permütasyon testi oluşturmak için bunu kullanabilirsiniz. Leşeyi takın, tahmini değeri 0'dan en uzağa bulun, şimdi rastgele noktalara izin verin ve yeni bir lös takın ve 0'dan en uzak tahmini noktayı bulun, bir sürü kez tekrarlayın, p-değeri daha fazla izin verilen değerlerin oranıdır orijinal değerden 0'a kadar.

Ayrıca, çapraz doğrulamaya, yetersiz bant genişliğini seçme yöntemi olarak bakmak isteyebilirsiniz. Bu bir p değeri vermez, ancak sonsuz bant genişliği mükemmel bir doğrusal modele karşılık gelir, eğer çapraz doğrulama çok büyük bir bant genişliği önerdiğinde, daha yüksek bant genişlikleri bazılarından daha düşükse doğrusal bir model makul olabilir bu durumda daha küçük bant genişlikleri kesin eğriliği gösterir ve lineer yeterli değildir.


Teşekkür ederim Greg! Bence 1. paragraf, doğrusal modelle karşılaştırmakla ilgilenmemek dışında sadece spline'ın açıklayıp açıklamadığını görmek için bir yol gibi geliyor. Spline'ı anova ile nasıl test edeceğinize ilişkin lütfen biraz kod veya daha somut işaretler verebilir misiniz? Ben bs ve ns işlevlerine bakıyordum ama kendim icat edebilmek için istatistiklerde o kadar iyi değilim.
Meraklı

Ve evet Less için hesaplamak için nasıl buldum (bkz. Fibosworld.wordpress.com/2012/11/04/loess-regression-with-r ) ama p- değeri ...R 2R2R2
Meraklı

Ben anovasplines yaklaşım ile bazı örnek kod ekledim . F testi için düşünün SSR SST ve bölü SSE oranı bu nedenle, SST bölü , sadece bir SSR'nin SSE'ye bölünmesi (2 SST vakası iptal edilir). Serbestlik derecelerini ve biraz cebiri ekleyin ve genel regresyon için F istatistiğine sahipsiniz. R 2 1 - R 2 R 2R2R21R2R21R2
Greg Snow

Greg, teşekkürler! 1) Ne lm(y~bs(x,5))yaptığını ve neden olmadığını açıklar lm(y~I(bs(x,5)))mısınız? Bs (x, 5) sonucu bir değişken olmadığı için bu çağrı ile oldukça karışıkım ... 2) Aradığım p-değerinin sonucu olduğunu doğru anladım anova(fit0,fit2)mı?
Meraklı

1
Sadece lineer regresyon yapıyor. Tıpkı bir polinom temelli bir eğriye uyması için , ve ile doğrusal regresyon yapabileceğiniz gibi , işlev değişkeninin dönüşümlerini oluşturur ve bunları doğrusal regresyonu yapan konuma geçirir . x 2 x 3 xxx2x3bsxlm
Greg Snow
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.