我是一个完全“R”的新手,但我一直在自己的数据中处理同样的事情,所以我想我会分享。我相信我会因为这是一种不好的方式(或者不是一种“整洁”的方式)而变得松懈,但对我来说是这样的——至少现在是这样。
我有 50 个数据集,它们的峰形与您的一样(每个数据集的前导斜率大,下降边缘的斜率较慢)。首先,我测试了多项式拟合以获得最佳“适合目的”,但没有过度拟合... x<-dataset$x ## 或从表中的列中提取,例如 dataset[,1] y<-dataset$y ## 或从表中的列中提取,例如 dataset[,2] k=2 ## 知道它是多项式,所以从 3 开始 while(k<100) { k=k+1 fit=lm(y~poly(x, k,raw=TRUE)) var[k]=summary(fit)$sigma } plot(var)
在这种情况下,多项式 11 是没有过拟合的最佳拟合。然后,您可以运行 ANOVA 并确保,但我会跳过所有这些。
现在我从上面的“lm”的系数创建了我的多项式。fit=lm(y~poly(x,11,raw=TRUE)) fit.coef <- c(summary(fit)$coefficients[1,1], summary(fit)$coefficients[2,1],.. . fit.poly <- 多项式(fit.coef)
然后是导数:
fit.deriv <- deriv(fit.poly)
现在对于峰值的斜率,您可以简单地将 x (max) 的值从原始多项式替换为导数。
我想要所有的斜坡,所以...
fit.slope <- predict(fit.deriv,x) ## x here represents all the x values above. For a single value you can just replace x with the value of x representing the max value in your polynomial
希望这对原始问题有所帮助,同时邀请有关如何更好地做到这一点的评论,因为我也很想学习和清理我的代码!
谢谢。