Dağılım planım var. Doğrusal olmayan trend çizgisini nasıl ekleyebilirim?
Dağılım planım var. Doğrusal olmayan trend çizgisini nasıl ekleyebilirim?
Yanıtlar:
Biraz veri oluşturalım.
n <- 100 x <- seq (n) y <- rnorm (n, 50 + 30 * x ^ (0,2), 1) Veriler <- data.frame (x, y)
Aşağıdaki, bir loess çizgisine veya doğrusal olmayan bir regresyona nasıl sığabileceğinizi gösterir.
arsa (y ~ x, Veri) # bir loess hattı sığdırmak loess_fit <- loess (y ~ x, Veri) satırlar (Veri $ x, tahmin et (loess_fit), col = "blue") # doğrusal olmayan bir regresyon sığdırır nls_fit <- nls (y + a + b * x ^ (- c), Data, start = list (a = 80, b = 20, c = 0.2)) satırlar (Veri $ x, tahmin (nls_fit), col = "red")
Eğer kullanırsanız ggplot2
(üçüncü çizim sistemi, R, taban R ve kafes sonra), bu olur:
library(ggplot2)
ggplot(Data, aes(x,y)) + geom_point() + geom_smooth()
Verilerin nasıl düzeltileceğini seçebilirsiniz: ?stat_smooth
ayrıntılar ve örnekler için bkz .
stat_smooth
yazdığı şekilde yazarak R yardım dosyasına erişerek kendiniz ?stat_smooth
öğrenmiş olabilirsiniz. :-)
Tam olarak ne aradığınızı bilmeden, lattice
paketi kullanarak kolayca bir loess eğrisi ekleyebilirsiniz type="smooth"
; Örneğin,
> library(lattice)
> x <- rnorm(100)
> y <- rnorm(100)
> xyplot(y ~ x, type=c("smooth", "p"))
help("panel.loess")
Kullanılacak polinomun derecesini değiştirmek için boşluksuz montaj rutine geçirilebilecek argümanlara bakınız .
Güncelleştirme
Loess eğrisinin rengini değiştirmek için küçük bir işlev yazabilir ve bunu panel
parametre olarak geçirebilirsiniz xyplot
:
x <- rnorm(100)
y <- rnorm(100)
panel_fn <- function(x, y, ...)
{
panel.xyplot(x, y, ...)
panel.xyplot(x, y, type="smooth", col="red", ...)
}
xyplot(y ~ x, panel=panel_fn)
Sorunuz biraz belirsiz, bu yüzden probleminizin ne olduğu hakkında bazı varsayımlarda bulunacağım. Bir dağılım grafiği oluşturabilir ve verileri biraz açıklayabilirseniz çok yardımı olacaktır. Lütfen, kötü varsayımlarda bulunuyorsam cevabımı görmezden gel.
İlk olarak, verilerinizin doğrusal olmadığına inandığınız bazı işlemleri açıklamanız mümkündür. Örneğin, otomobilin hızına karşı ani bir frenlemeyle durması için bir arabanın mesafesine regresyon yapmaya çalışıyorsanız, fizik bize araç enerjisinin hızın karesiyle orantılı olduğunu söyler - hız değil kendisi. Yani bu durumda polinom regresyonunu denemek isteyebilirsiniz ve (R'de) gibi bir şey yapabilirsiniz.model <- lm(d ~ poly(v,2),data=dataset)
. Çeşitli doğrusallıkların regresyon modeline nasıl sokulacağına dair birçok belge var.
Öte yandan, "titrek" olan bir hattınız varsa ve neden titrek olduğunu bilmiyorsanız, o zaman iyi bir başlangıç noktası muhtemelen yerel olarak ağırlıklı bir regresyon veya loess
R'de olacaktır. Bölge, tüm veri kümelerinin aksine. Herhangi bir noktada eğrinin değerini hesaplayabileceğiniz, ilgilenilen noktaya en yakın k noktalarını bulduğunuz ve bunları ortaladığınız bir "k'ye en yakın" versiyonunu hayal etmek en kolay olanıdır. Loess de aynen böyle ama düz bir ortalama yerine regresyon kullanıyor. Bunun için değişkenin yumuşatmanın derecesini kontrol ettiği model <- loess(y ~ x, data=dataset, span=...)
yerlerde kullanın span
.
Üçüncü taraftan (ellerin tükenmesi) - trendlerden mi bahsediyorsunuz? Bu geçici bir problem mi? Eğer öyleyse, aşırı trend çizgileri ve istatistiksel anlamlılık konusunda biraz dikkatli olun. Zaman serilerindeki eğilimler “otoregresif” süreçlerde görülebilir ve bu süreçler için sürecin rasgeleliği rasgele gürültünün dışında eğilimleri oluşturabilir ve yanlış istatistiksel anlamlılık testi bunun ne zaman önemli olmadığını söyleyebilir!
Saçılma grafiği örnek noktalarını ve aynı grafikte düzgün eğriyi koymak:
library(graphics)
## Create some x,y sample points falling on hyperbola, but with error:
xSample = seq(0.1, 1.0, 0.1)
ySample = 1.0 / xSample
numPts <- length(xSample)
ySample <- ySample + 0.5 * rnorm(numPts) ## Add some noise
## Create x,y points for smooth hyperbola:
xCurve <- seq(0.1, 1.0, 0.001)
yCurve <- 1.0 / xCurve
plot(xSample, ySample, ylim = c(0.0, 12.0)) ## Plot the sample points
lines(xCurve, yCurve, col = 'green', lty = 1) ## Plot the curve