r - 将指数修改的高斯拟合到 2D 数据
问题描述
我正在尝试将指数修改的高斯(如https://en.wikipedia.org/wiki/Exponentially_modified_Gaussian_distribution equation (1))拟合到我在 R 中的 2D(x,y)数据。
我的数据是:
x <- c(1.13669371604919, 1.14107275009155, 1.14545404911041, 1.14983117580414,
1.15421032905579, 1.15859162807465, 1.16296875476837, 1.16734790802002,
1.17172694206238, 1.17610621452332, 1.18048334121704, 1.18486452102661,
1.18924164772034, 1.19362080097198, 1.19800209999084, 1.20237922668457,
1.20675826072693, 1.21113955974579, 1.21551668643951, 1.21989583969116,
1.22427713871002, 1.22865414619446, 1.2330334186554, 1.23741245269775,
1.24178957939148, 1.24616885185242, 1.25055003166199, 1.25492715835571,
1.25930631160736, 1.26368761062622, 1.26806473731995, 1.2724437713623
)
y <- c(42384.03125, 65262.62890625, 235535.828125, 758616, 1691651.75,
3956937.25, 8939261, 20311304, 41061724, 65143896, 72517440,
96397368, 93956264, 87773568, 82922064, 67289832, 52540768, 50410896,
35995212, 27459486, 14173627, 12645145, 10069048, 4290783.5,
2999174.5, 2759047.5, 1610762.625, 1514802, 958150.6875, 593638.6875,
368925.8125, 172826.921875)
我试图拟合的函数和我试图最小化以进行优化的值:
EMGCurve <- function(x, par)
{
ta <- 1/par[1]
mu <- par[2]
si <- par[3]
h <- par[4]
Fct.V <- (h * si / ta) * (pi/2)^0.5 * exp(0.5 * (si / ta)^2 - (x - mu)/ta)
Fct.V
}
RMSE <- function(par)
{
Fct.V <- EMGCurve(x,par)
sqrt(sum((signal - Fct.V)^2)/length(signal))
}
result <- optim(c(1, x[which.max(y)], unname(quantile(x)[4]-quantile(x)[2]), max(y)),
lower = c(1, min(x), 0.0001, 0.1*max(y)),
upper = c(Inf, max(x), 0.5*(max(x) - min(x)), max(y)),
RMSE, method="L-BFGS-B", control=list(factr=1e7))
但是,当我最终尝试将结果可视化时,似乎没有任何有用的事情发生,..
plot(x,y,xlab="RT/min",ylab="I")
lines(seq(min(x),max(x),length=1000),GaussCurve(seq(min(x),max(x),length=1000),result$par),col=2)
但是,由于某种原因,它根本不起作用,尽管设法使用类似代码的正态分布来做到这一点。如果有人有想法会很棒吗?
解决方案
推荐阅读
- javascript - 使用 subtr() 函数的问题
- python - 如何有效地创建从数据框开始到每个索引的序列?
- python - 在python中列出字典
- git - 通过拉取请求解决合并冲突
- spring-boot - Spring Boot H2 数据库不会自重置。找不到现有数据。liquibase 的问题
- c# - .NET Core 在启动应用程序时等待 localhost
- css - 实时服务器和其他浏览器的不同视图
- google-sheets - “未能读取电子表格。错误代码:PERMISSION_DENIED”- Tableau 自定义查询
- java - 使用 JDK1.5 和 JBOSS EAP6.4 在 intellij 上配置 JSR45
- scala - 在基于目录的火花负载中避免“路径不存在”