2015-09-16 35 views
5

bir önyükleme çıkışın güven aralığı bir dataframe df varPlot medyan, ggplot2

dput(df) 
    structure(list(x = c(49, 50, 51, 52, 53, 54, 55, 56, 1, 2, 3, 
    4, 5, 14, 15, 16, 17, 2, 3, 4, 5, 6, 10, 11, 3, 30, 64, 66, 67, 
    68, 69, 34, 35, 37, 39, 2, 17, 18, 99, 100, 102, 103, 67, 70, 
    72), y = c(2268.14043972082, 2147.62290922552, 2269.1387550775, 
    2247.31983098201, 1903.39138268307, 2174.78291538358, 2359.51909126411, 
    2488.39004804939, 212.851575751527, 461.398994384333, 567.150629704352, 
    781.775113821961, 918.303706148872, 1107.37695799186, 1160.80594193377, 
    1412.61328924168, 1689.48879626486, 260.737164468854, 306.72700499362, 
    283.410379620422, 366.813913489692, 387.570173754128, 388.602676983443, 
    477.858510450125, 128.198042456082, 535.519377609133, 1028.8780498564, 
    1098.54431357711, 1265.26965941035, 1129.58344809909, 820.922447928053, 
    749.343583476846, 779.678206156474, 646.575242339517, 733.953282899613, 
    461.156280127354, 906.813018662913, 798.186995701282, 831.365377249207, 
    764.519073183124, 672.076289062505, 669.879217186302, 1341.47673353751, 
    1401.44881976186, 1640.27575962036)), .Names = c("x", "y"), row.names = c(NA, 
    -45L), class = "data.frame") 

Ben doğrusal olmayan bir regresyon benim veri kümesi dayalı (nls) üzerine yarattık (aşağıya bakınız).

nls1 <- nls(y~A*(x^B)*(exp(k*x)), 
      data = df, 
      start = list(A = 1000, B = 0.170, k = -0.00295), algorithm = "port") 

Birden çok parametre kümesi (A, B ve k) almak için bu işlev için bir önyükleme yaptık.

library(nlstools) 
Boo <- nlsBoot(nls1, niter = 200) 

Şimdi orta eğri olarak bir ggplot2 birlikte önyükleme nesneden hesaplanan alt ve üst güven aralığı eğrileri çizmek istiyoruz. Her eğrinin parametreleri (A, B ve K) Boo_Gamma$bootCI'da bulunur. Birisi bana yardım edebilir mi? Şimdiden teşekkürler.

+2

Welcome SO ve _perfectly formatted_ ilk soru için +1000 :) yapmalıdır! Nlstools'da ggplot2'ye "port" yapmaya çalıştığınız eşdeğer bir çizim yapısı var mı? – hrbrmstr

+0

Gerçekten ne yazık ki değil. Medyan eğrisi etrafındaki güven aralığı bantlarını çizmek için herhangi bir fonksiyon bulamadım. – SimonB

cevap

2

AFAIK, paket nlstools yalnızca el Tahminleri hesaplamak için bootstrapped parametre tahminleri kullanılarak ve sonra dışarı istatistikleri recomputing, hızlı bir çözüm burada, Dolayısıyla ...

bootstrapped parametre tahminleri değil, tahmin edilen değerleri döndürür olduğunu Buradaki model, doğrusal olmadığı için, tahminlerin. Bu en şık değil, ama buna

# Matrix with the bootstrapped parameter estimates 
Theta_mat <- Boo$coefboot 

# Model 
fun <- function(x, theta) theta["A"] * (x^theta["B"]) * (exp(theta["k"] * x)) 

# Points where to evaluate the model 
x_eval <- seq(min(df$x), max(df$x), length.out = 100) 

# Matrix with the predictions 
Pred_mat <- apply(Theta_mat, 1, function(theta) fun(x_eval, theta)) 

# Pack the estimates for plotting 
Estims_plot <- cbind(
    x = x_eval, 
    as.data.frame(t(apply(Pred_mat, 1, function(y_est) c(
     median_est = median(y_est), 
     ci_lower_est = quantile(y_est, probs = 0.025, names = FALSE), 
     ci_upper_est = quantile(y_est, probs = 0.975, names = FALSE) 
    )))) 
) 

library(ggplot2) 
ggplot(data = Estims_plot, aes(x = x, y = median_est, ymin = ci_lower_est, ymax = ci_upper_est)) + 
    geom_ribbon(alpha = 0.7, fill = "grey") + 
    geom_line(size = rel(1.5), colour = "black") + 
    geom_point(data = df, aes(x = x, y = y), size = rel(4), colour = "red", inherit.aes = FALSE) + 
    theme_bw() + labs(title = "Bootstrap results\n", x = "x", y = "y") 
ggsave("bootpstrap_results.pdf", height = 5, width = 9) 

Bootstrap results

+0

Serin. Çok teşekkürler. – SimonB

+0

Bu nedenle, hile yapmak için 'Boo_Gamma $ bootCI' nesnesine verilen medyan ve CI'lerin parametrelerini kullanamazsınız? – SimonB