簡體   English   中英

使用 predictNLS 圍繞 R 中的擬合值創建置信區間?

[英]Using predictNLS to create confidence intervals around fitted values in R?

我想使用來自 R 中的傳播 package 的 predictNLS 圍繞大量擬合值建立置信區間。 As an example, I will use the data set they reference in the function description ( https://rdrr.io/github/anspiess/propagate/man/predictNLS.html ), DNase, and building a model that takes the values conc and密度作為特征:

library(propogate)
library(dplyr)
library(modelr)

DNase <- DNase

modeldna <- DNase %>% group_by(Run) %>% 
  do(run_model = nls(density ~ a * exp(b * conc), 
start = list(a = 1 , b = 0.5), 
data = .)) %>% ungroup()

然后我想給每一行分配它的 model 以便可以添加預測:

DNApredict <- full_join(as_tibble(DNase), modeldna, by = "Run")

添加預測:

DNApredict <- DNApredict %>% 
  group_by(Run) %>% 
  do(add_predictions(., var = "predicted_density", first(.$run_model)))

然后,我想添加 predictNLS 似乎提供的置信區間數據,方法是為其提供相同的數據並要求它為 predict_density 列中的每個擬合點提供置信區間:

confidence_interval <- predictNLS(model = modeldna, newdata = DNApredict$predicted_density, interval = "confidence")

但是,會出現以下錯誤:

as.list(object$call$formula) 中的錯誤:缺少參數“object”,沒有默認值

有誰知道這可能是什么原因造成的? 我知道對你們中的一些人來說,它所調用的 object 是什么似乎很明顯,所以如果這是一個荒謬的問題,我深表歉意。 我真的希望能夠使用這個 function 圍繞一系列擬合值創建置信區間。 非常感謝您提前。

由於您在示例數據集中的每個Run上運行nls ,因此通過將每個 run 拆分為自己的數據幀並使用lapply在每個數據幀上運行nls很容易獲得 nls 模型列表

library(propagate)

DNase <- DNase

modeldna <- DNase %>% split(DNase$Run)

models <- lapply(modeldna, function(d) nls(density ~ a * exp(b * conc), 
                                           start = list(a = 1 , b = 0.5), 
                                           data = d))

現在我們可以通過在每個 model 上運行predictNLS (同樣在lapply內部)輕松地獲得每個 model 中每個點的預測

results <- lapply(seq_along(modeldna), function(i) {
 predictNLS(models[[i]], newdata = data.frame(conc = modeldna[[i]]$conc))
})

由於 predictNLS 的predictNLS結構,我們需要提取每一行的預測並將它們強制轉換為數據幀:

predictions <- lapply(results, function(x) {
  as.data.frame(do.call(rbind, lapply(x$prop, function(y) y$prop)))})

最后,我們可以將我們的預測(包括置信區間)粘貼回原始數據框:

all_results <- do.call(rbind, lapply(seq_along(modeldna), 
                      function(i) cbind(modeldna[[i]], predictions[[i]])))

現在,這為我們提供了原始數據點的完整數據框,以及帶有置信區間的相關預測。

為了證明這一點,我們可以 plot 中的結果ggplot 在這里,我們為每次運行顯示一個 plot,包括其原始數據、以虛線表示的預測值以及以淡藍色絲帶表示的 95% 置信限:

library(ggplot2)

ggplot(all_results, aes(x = conc, y = density)) +
  geom_ribbon(aes(ymin = `2.5%`, ymax = `97.5%`), 
              fill = "deepskyblue4", alpha = 0.2) +
  geom_point() +
  geom_line(aes(y = Mean.1), linetype = 2) +
  facet_wrap(.~factor(Run, levels = 1:11)) +
  theme_bw()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM