kullanarak mgcv
paketinden bir model takıyorum ve model
sonucunu saklıyorum ve şu ana kadar plot(model)
kullanarak sorunsuz bileşenlere bakıyordum. Kısa bir süre önce ggplot2 kullanmaya başladım ve çıkışını beğeniyorum. Bu yüzden merak ediyorum, bu grafikleri ggplot2 kullanarak çizmek mümkün mü? İşte Bir gamın pürüzsüz bileşenlerini ggplot2 ile çizmek mümkün mü?
x1 = rnorm(1000)
x2 = rnorm(1000)
n = rpois(1000, exp(x1) + x2^2)
model = gam(n ~ s(x1, k=10) + s(x2, k=20), family="poisson")
plot(model, rug=FALSE, select=1)
plot(model, rug=FALSE, select=2)
Ve s(x1, k=10)
ve s(x2, k=20)
değil uyum içinde olan ilgiyi duyuyorum.
Kısmi cevap:
Ben plot.gam
ve mgcv:::plot.mgcv.smooth
derinliklerine kazılan ve pürüzsüz bileşenlerden tahmin etkileri ve standart hataları ayıklar kendi işlevi inşa etti. Tüm seçenekleri ve plot.gam
durumlarını ele almıyor, bu yüzden sadece kısmi bir çözüm olarak düşünüyorum, ama benim için iyi çalışıyor.
EvaluateSmooths = function(model, select=NULL, x=NULL, n=100) {
if (is.null(select)) {
select = 1:length(model$smooth)
}
do.call(rbind, lapply(select, function(i) {
smooth = model$smooth[[i]]
data = model$model
if (is.null(x)) {
min = min(data[smooth$term])
max = max(data[smooth$term])
x = seq(min, max, length=n)
}
if (smooth$by == "NA") {
by.level = "NA"
} else {
by.level = smooth$by.level
}
range = data.frame(x=x, by=by.level)
names(range) = c(smooth$term, smooth$by)
mat = PredictMat(smooth, range)
par = smooth$first.para:smooth$last.para
y = mat %*% model$coefficients[par]
se = sqrt(rowSums(
(mat %*% model$Vp[par, par, drop = FALSE]) * mat
))
return(data.frame(
label=smooth$label
, x.var=smooth$term
, x.val=x
, by.var=smooth$by
, by.val=by.level
, value = y
, se = se
))
}))
}
Bu düz bileşenleri ile bir "erimiş" veri çerçevesini döndürür, böylece, yukarıda örnek ggplot
kullanmak mümkündür: herkes bu sağlayan bir paket bilir
smooths = EvaluateSmooths(model)
ggplot(smooths, aes(x.val, value)) +
geom_line() +
geom_line(aes(y=value + 2*se), linetype="dashed") +
geom_line(aes(y=value - 2*se), linetype="dashed") +
facet_grid(. ~ x.var)
genel durum çok minnettar olurum.
ggplot '=, geom_smooth' 'için' yani sadece yapılacak 'yöntem predict' kullanır –
gam'' düzgün terimleri değil, uygunluğu gösterir. Yani bunun çözüm olduğunu düşünmüyorum. – unique2
Veri kümesine bağlantı (sadece bir başlangıç noktası olarak 'mgcv''den bir örnek ve çoğaltmaya çalıştığınız çizimden alıntı yapın) ve (muhtemelen) nasıl yapacağınızı gösterebiliriz. –