r - 如何强制多项式回归对于大急转弯非常灵活,同时降低小转弯的灵活性
问题描述
是否可以强制多项式回归对于大急转弯非常灵活,同时降低小转弯的灵活性?
原因是我有一个依赖于 x 的变量 y,尽管我的数据集包含一些噪音,但我确信它存在正相关。这就是为什么我不希望 x 在 1 到 75 之间有一条摆动线,如下图所示。
library(ggplot2)
library(dplyr)
x <- c(1:100)
y <- c(1,3,6,12,22,15,13,11,5,1,3,6,12,22,11,5,1,3,6,12,22,11,5,5,9,10,1,6,12,22,15,13,11,5,-1,-12,-23,6,12,22,11,5,1,3,6,12,22,11,5,-11,-22,-9,12,22,11,5,9,10,18,1,3,6,12,22,15,13,11,5,-5, -9, -12,6,12,22,11,5,1,3,6,12,22,11,5,1,3,6,12,22,11,5,9,10,18,28,37,50,90,120,150,200)
y <- y + x
df <- data.frame(x, y)
model <- lm(y ~ poly(x, 6, raw = TRUE), data = df)
predictions <- model %>% predict(df)
df <- cbind(df, predictions)
ggplot() +
geom_point(data = df, aes(x = x, y = y), size = 0.1) +
geom_line(data = df, aes(x = x, y = predictions), colour="blue", size=0.1)
我可以将模型更改为:
model <- lm(y ~ poly(x, 2, raw = TRUE), data = df)
这给出了这个图表:
在这种情况下,模型对于 x 在 0 到 90 之间没有摆动,尽管它缺少使 x 为 90 的转弯的灵活性。
我不是在为这个示例数据集寻找特定的解决方案。我正在寻找一种解决方案,使多项式回归足够灵活,以进行急转弯(大转弯),同时减少小转弯的摆动。(也许这可以通过限制最多 n 圈来解决?)
我想在几个数据集上自动使用它。出于这个原因,我不想为不同的模型指定不同的 x 范围。
谢谢!
我也尝试过使用 mgcv 中的 gam,尽管这给出了类似的结果:
mygam <- gam(y ~ s(x, k = 7), data = df)
mygam <- gam(y ~ s(x, k = 3), data = df)
该图基于 pmax(p1, p2),其中 p1 和 p2 是两个多项式:
解决方案
推荐阅读
- bash - 尝试使用 sed 命令在 test.txt 文件中包含此 var 以删除双引号
- python - 在python中使用循环创建多个类对象
- gitlab - 每个工件 ID 的 GitLab-CI 和 Maven 包注册表
- c# - 如何在 C# 中使用 LinqExpression 创建一个动态获取属性的表达式?
- javascript - 如何将特定问题分类到特定部分?
- excel-formula - 带有 Apache POI 的 excel 文件表到带有 iText 的 PDF - 具有值的单元格在 pdf 中没有公式
- javascript - 自定义选择选项在 Angular 中不起作用,但在 html、css 模板中起作用
- c# - 在.Net Core 5中使用存储库模式从带有实体框架的Sql Server中选择不同的记录
- python - 让 D&D 游戏遇到问题
- neo4j - Neo4j 用地图更新地图列表