在R?
我试图求解一个三次多项式函数的拐点,它已经被拟合到数据中,即一阶导数为零的x值 我还需要一种方法,在x的临界点找到y的值 使用在R?,r,polynomials,model-fitting,R,Polynomials,Model Fitting,我试图求解一个三次多项式函数的拐点,它已经被拟合到数据中,即一阶导数为零的x值 我还需要一种方法,在x的临界点找到y的值 使用lm()拟合模型以及使用summary()查看模型质量非常简单。通过添加预测和使用geom\u line(),我可以很容易地绘制函数 必须有一个专用于此问题的包或基本R函数。有人能推荐一种方法吗 下面是一个reprex来描述这个问题。不用说,画箭头只是为了说明问题;它们没有映射到真正的拐点,否则我不会问这个问题 图书馆(tidyverse) 库(建模器) 种子集(0)
lm()
拟合模型以及使用summary()
查看模型质量非常简单。通过添加预测和使用geom\u line()
,我可以很容易地绘制函数
必须有一个专用于此问题的包或基本R函数。有人能推荐一种方法吗
下面是一个reprex来描述这个问题。不用说,画箭头只是为了说明问题;它们没有映射到真正的拐点,否则我不会问这个问题
图书馆(tidyverse)
库(建模器)
种子集(0)
#生成随机数据并绘制值
df%ggplot(aes(x,y))+
几何点()
#将模型与数据相匹配
立方多边形模型%
添加预测(模型=立方体模型)%>%
ggplot(aes(x,y))+
几何点(α=1/3)+
几何线(aes(x,y=pred))+
注释('text',label='critical point A',x=-50,y=-250000)+
几何图形段(x=-50,xend=-10,y=-200000,yend=-5000,箭头=箭头(长度=单位(3,'mm'),类型='closed'))+
注释('文本',标签='临界点B',x=140,y=400000)+
几何图形段(x=110,x=90,y=300000,y=100000,箭头=箭头(长度=单位(3,'mm'),类型='closed'))
#但是我怎样才能得到它们产生的x和y的临界值呢?
由(v0.3.0)于2020年9月3日创建,我设计了一个使用
mosaic
包的解决方案。makeFun()
函数允许将模型对象转换为函数。然后,您可以使用base Roptimize()
查找指定间隔内该函数的最大值或最小值(在本例中为x值的范围)。在optimize()
中指定“maximum”参数,以说明您想要的是局部最大值还是局部最小值
见下面的代码:
library(magrittr)
set.seed(0)
#generate random data and plot the values
df <- tibble::tibble(x= sample(x= c(-100:200), size= 50),
y= -0.5*(x^3) + 50*(x^2) + 7*(x) + rnorm(n=50, mean=10000, sd=50000) )
cubic_poly_model <- lm(data= df, formula = y~poly(x, 3))
crit_values <- cubic_poly_model %>%
mosaic::makeFun() %>%
optimize(interval = c(min(df$x), max(df$x)), maximum = TRUE)
funct_crit_x <- crit_values[['maximum']][[1]]
funct_max <- crit_values[['objective']]
funct_crit_x
funct_max
库(magrittr)
种子集(0)
#生成随机数据并绘制值
df