r - 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
?
解决方案
您可以计算参数的值a
并b
使用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]))
推荐阅读
- node.js - 当多个变量声明为全局时,Eslint 抛出异常
- spring-boot - 在基于 Netty 的应用程序中进行单元测试后,SpringApplication 未关闭
- asp.net-mvc - HTTP 错误 500.19 - 内部服务器错误 -1
- ios - 如何修复 user = [AuthDataResult?] nil 和错误 - FIRAuthDomain 代码 17026
- java - Java 子串条件结束
- ios - 如何使用 swift 中的按钮操作使 Fscalender 上个月和下个月
- rxjs - ReactiveX 运算符 - 去抖动,但先触发,然后过滤其他运算符
- android - 对 ViewModel Provider Factory 的需求
- angular - 使用 LinkedIn API CDN(https://platform.linkedin.com/in.js) 登录是否损坏?
- xaml - XAML ScrollViewer 的子项显示事件