r - 您如何获得与 R 中的 PDF 曲线相关的实际多项式函数?
问题描述
我正在学校做一个实验,我正在分析扭转风力涡轮机转子叶片对涡轮机输出功率的影响。
在我的实验中,我分别进行了 50 次观察,其中我将涡轮机的一个转子叶片弯曲了特定的量(以度为单位),然后监测了 2 分钟的平均功率输出。我的数据集看起来像这样
X1P_Train_Arrange <- data.frame(
Mean = runif(250),
Degree = sample(c("0", "1", "2", "3", "4","5"), 10, replace = TRUE)
)
然后,我使用 geom_density 函数为我在执行实验时弯曲转子叶片的每个度数创建 PDF 图表。
Mean_Density <- ggplot(X1P_Train_Arrange, aes(x = Mean, color = Degree)) +
geom_density(lwd = 2.0) +
labs(title = "Mean", x = "Mean", y = "Density") +
theme_minimal() + theme_Publication()
现在,我的问题是,有没有办法在绘制数据时获得与每条彩色曲线相关的实际多项式函数?提前感谢您的任何帮助或帮助。
解决方案
核密度估计不是多项式函数。
但是,如果您愿意,您可以重建实际功能。
请注意,KDE 只是以您的数据点为中心的许多高斯分布的总和,每个高斯分布具有算法选择的一些带宽。所以你只需要带宽,然后你就可以把它们放在一起。带宽只是构成 KDE 的高斯分布的标准差。更宽的带宽使曲线更平滑,但会导致特征丢失。太小,曲线太参差不齐。所以这是一个优化问题。
我怀疑ggplot
您可以提供自己的带宽,但要获得一个,我认为最好的办法是首先使用该density
功能适合您自己的带宽。一旦你这样做,你可以看到 的价值$bw
。知道带宽后,您只需创建一个函数,该函数是许多以数据点为中心的正态密度函数的总和,每个函数的标准差为bw
.
例如:
randomNumbers <- rnorm(100)
densityObject <- density(randomNumbers)
individualKernals <- lapply(randomNumbers, function(centerOfKernal){
#return a function here, not a value
function(x){dnorm(x, mean = centerOfKernal, sd = densityObject$bw)}
})
reproducedFunction <- function(x){
toAverage <- sapply(individualKernals, function(f){f(x)})
mean(toAverage)
}
plot(densityObject)
someXRange <- densityObject$x
y <- sapply(someXRange, reproducedFunction)
lines(x = someXRange, y = y, col = rgb(1,0,0,0.3), lwd = 3)
推荐阅读
- javascript - 如何在对象数组上使用 Promise.all,然后将它们重新分配给新对象中的相关键?
- datetime - 如何在 Tableau 中一起添加两列(日期/时间)
- intellij-idea - 扩展运算符函数调用歧义
- ruby - 如何通过从输入用户(获取)中获取的值从数组中选择元素
- python - 如何使用 kubernetes 和 skaffold 调试 python 代码?
- kotlin - kotlin 文档中的“Common”、“JVM”、“JS”和“JVM”标签表示什么?
- c# - 如何在c#中检查计时器的经过时间
- php - 在 React 中由 Axios 调用时 API 中的 PHP-Session 发生变化
- php - 删除某些字段后,标签和值未在 my-account/edit-address/ 中正确显示
- .net - EventLog.SourceExists 在 Windows Server 2019 上失败