[英]How to calculate confidence intervals for fitted values of beta regression using the bootstrap method in 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.