在R?

在R?,r,polynomials,model-fitting,R,Polynomials,Model Fitting,我试图求解一个三次多项式函数的拐点,它已经被拟合到数据中,即一阶导数为零的x值 我还需要一种方法,在x的临界点找到y的值 使用lm()拟合模型以及使用summary()查看模型质量非常简单。通过添加预测和使用geom\u line(),我可以很容易地绘制函数 必须有一个专用于此问题的包或基本R函数。有人能推荐一种方法吗 下面是一个reprex来描述这个问题。不用说,画箭头只是为了说明问题;它们没有映射到真正的拐点,否则我不会问这个问题 图书馆(tidyverse) 库(建模器) 种子集(0)

我试图求解一个三次多项式函数的拐点,它已经被拟合到数据中,即一阶导数为零的x值

我还需要一种方法,在x的临界点找到y的值

使用
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 R
optimize()
查找指定间隔内该函数的最大值或最小值(在本例中为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