首页 > 解决方案 > R函数找到合适的值来拟合常数

问题描述

library(ggplot2)
set.seed(1)
dataset <- data.frame(X = rnorm(1000))
dfun <- function(x, a, b) 1/(sqrt(2*pi)*b)*exp(-0.5*((x-a)^2/(2*b^2))) 
ggplot(dataset, aes(x = X)) + 
  geom_histogram(aes(y = ..density..), binwidth = 0.5)+
  stat_function(fun = dfun,
                args = list(a = , b = ))

a在这种情况下,我如何计算合适的值b

标签: rhistogram

解决方案


您可以计算参数的值ab使用nls. 类似于以下内容。

dens <- density(dataset$X, n = nrow(dataset))
df_dens <- data.frame(x = dens$x, y = dens$y)

a0 <- mean(dataset$X)
b0 <- sd(dataset$X)
fit <- nls(y ~ dfun(x, a, b), data = df_dens, start = list(a = a0, b = b0))

coef(fit)
#           a            b 
#-0.007006625   0.97518478 

现在用 和 的这些值绘制直方图和a函数b

ggplot(dataset, aes(x = X)) + 
  geom_histogram(aes(y = ..density..), binwidth = 0.5)+
  stat_function(fun = dfun,
                args = list(a = coef(fit)[1], b = coef(fit)[2]))

在此处输入图像描述


推荐阅读