提问人:Keizei 提问时间:9/4/2023 最后编辑:Keizei 更新时间:9/4/2023 访问量:39
将 n 个高斯的总和拟合到 xy 数据,并计算 R 中 n 的最佳个数
Fit a sum of n gaussians to xy-data and evaluate the best number of n in R
问:
我想将 n 个高斯的总和拟合到我的数据中,其形式为:高斯总和
我将如何用函数拟合指定的高斯总和,而无需像这里那样专门编写单独的参数。我知道过拟合会成为一个问题,因此我想拟合每个 n 数的确定系数,以图形方式确定 n 的最佳数。nls()
为了制作一个可重现的例子,我有这个代码,它类似于我的数据:
library(ggplot2)
# Define a Gaussian function
gaussian <- function(x, mean, sd, amplitude) {
amplitude * dnorm(x, mean = mean, sd = sd)
}
# Generate x values for plotting
x <- seq(-10, 10, by = 0.1)
# Define parameters for 6 Gaussian components
params <- list(
list(mean = -2, sd = 1, amplitude = 1),
list(mean = -1, sd = 0.5, amplitude = 0.8),
list(mean = 0, sd = 0.3, amplitude = 0.6),
list(mean = 1, sd = 0.8, amplitude = 0.7),
list(mean = 2, sd = 0.6, amplitude = 0.5),
list(mean = 3, sd = 0.4, amplitude = 0.3)
)
# Initialize an empty vector to store the sum
sum_curve <- rep(0, length(x))
# Sum the Gaussian components
for (param in params) {
sum_curve <- sum_curve + gaussian(x, mean = param$mean, sd = param$sd, amplitude = param$amplitude)
}
# Create a data frame for plotting
data <- data.frame(x = x, y = sum_curve)
# Create the plot for the sum of Gaussian curves
ggplot(data, aes(x, y)) +
geom_line() +
labs(title = "Sum of Gaussian Curves", x = "X", y = "Density") +
theme_minimal()
总而言之,我恳请以下方面的帮助:
- 设计由 N 个高斯总和组成的 NLS 函数
- 对不同的 n(例如 1:15)执行此函数并绘制结果
- 绘制对应决定系数与 n 的关系图
- 绘制 n 个高斯和各个分量的总和。
答: 暂无答案
下一个:nls 参数的上限约束
评论
nls(y ~ cbind(amplitude = dnorm(x, mean = mean, sd = sd)), data, start = list(mean = 0, sd = 1), algorithm = "plinear")