Основная проблема заключается в том, что я хотел бы выяснить, как добавить пользовательские функции большого количества (1000) на один и тот же показатель в ggplot, используя разные значения для коэффициентов функции. Я видел другие вопросы о том, как добавить две или три функции, но не 1000, и вопросы о добавлении в разные функциональные формы, но не в той же форме с несколькими значениями параметров...
Цель состоит в том, чтобы stat_function рисовала линии с использованием значений параметров, хранящихся в кадре данных, но без фактических данных для x.
[Общая цель здесь заключается в том, чтобы показать большую неопределенность в параметрах модели нелинейной регрессии из небольшого набора данных, что приводит к неопределенности, связанной с предсказаниями из этих данных (которые я пытаюсь убедить кого-то другого плохая идея). Я часто делаю это, построив много строк, построенных из неопределенности в параметрах модели (учебник по многоуровневой регрессии a la Andrew Gelman).]
В качестве примера, вот график в графике базы R.
#The data
p.gap <- c(50,45,57,43,32,30,14,36,51)
p.ag <- c(43,24,52,46,28,17,7,18,29)
data <- as.data.frame(cbind(p.ag, p.gap))
#The model (using non-linear least squares regression):
fit.1.nls <- nls(formula=p.gap~beta1*p.ag^(beta2), start=list(beta1=5.065, beta2=0.6168))
summary(fit.1.nls)
#From the summary, I find the means and s.e the two parameters, and develop their distributions:
beta1 <- rnorm(1000, 7.8945, 3.5689)
beta2 <- rnorm(1000, 0.4894, 0.1282)
coefs <- as.data.frame(cbind(beta1,beta2))
#This is the plot I want (using curve() and base R graphics):
plot(data$p.ag, data$p.gap, xlab="% agricultural land use",
ylab="% of riparian buffer gap", xlim=c(0,130), ylim=c(0,130), pch=20, type="n")
for (i in 1:1000){curve(coefs[i,1]*x^(coefs[i,2]), add=T, col="grey")}
curve(coef(fit.1.nls)[[1]]*x^(coef(fit.1.nls)[[2]]), add=T, col="red")
points(data$p.ag, data$p.gap, pch=20)
Я могу построить среднюю модельную функцию с данными в ggplot:
fit.mean <- function(x){7.8945*x^(0.4894)}
ggplot(data, aes(x=p.ag, y=p.gap)) +
scale_x_continuous(limits=c(0,100), "% ag land use") +
scale_y_continuous(limits=c(0,100), "% riparian buffer gap") +
stat_function(fun=fit.mean, color="red") +
geom_point()
Но ничего не делает, рисует несколько строк в ggplot. Кажется, я не вижу никакой помощи в рисовании значений параметров из функций на веб-сайте ggplot или на этом сайте, которые обычно очень полезны. Означает ли это нарушение достаточно теории построения, что никто не осмеливается сделать это?
Любая помощь приветствуется. Спасибо!