R:如何绘制lm polyfit生成的多项式的自定义范围 [英] R: How to plot custom range of polynomial produced by lm poly fit

查看:20
本文介绍了R:如何绘制lm polyfit生成的多项式的自定义范围的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我被lm

的输出产生的系数搞糊涂了

这是我正在使用的数据的副本

(postprocessed.csv)

"","time","value"
"1",1,2.61066016308988
"2",2,3.41246054742996
"3",3,3.8608767964033
"4",4,4.28686048552237
"5",5,4.4923132964825
"6",6,4.50557049744317
"7",7,4.50944447661246
"8",8,4.51097373134893
"9",9,4.48788748823809
"10",10,4.34603985656981
"11",11,4.28677073671406
"12",12,4.20065901625172
"13",13,4.02514194962519
"14",14,3.91360194972916
"15",15,3.85865748409081
"16",16,3.81318053258601
"17",17,3.70380706527433
"18",18,3.61552922363713
"19",19,3.61405310598722
"20",20,3.64591327503384
"21",21,3.70234435835577
"22",22,3.73503970503372
"23",23,3.81003078640584
"24",24,3.88201196162666
"25",25,3.89872518158949
"26",26,3.97432743542362
"27",27,4.2523675144599
"28",28,4.34654855854847
"29",29,4.49276038902684
"30",30,4.67830892029687
"31",31,4.91896819673664
"32",32,5.04350767355202
"33",33,5.09073406942046
"34",34,5.18510849382162
"35",35,5.18353176529036
"36",36,5.2210776270173
"37",37,5.22643491929207
"38",38,5.11137006553725
"39",39,5.01052467981257
"40",40,5.0361056705898
"41",41,5.18149486951409
"42",42,5.36334869132276
"43",43,5.43053620818444
"44",44,5.60001072279525

我使用以下脚本对此数据拟合了一个四阶多项式:

library(ggplot2)
library(matrixStats)
library(forecast)

df_input <- read.csv("postprocessed.csv")

x <- df_input$time
y <- df_input$value
df <- data.frame(x, y)

poly4model <- lm(y~poly(x, degree=4), data=df)

v <- seq(30, 40)
vv <- poly4model$coefficients[1] +
  poly4model$coefficients[2] * v +
  poly4model$coefficients[3] * (v ^ 2) +
  poly4model$coefficients[4] * (v ^ 3) +
  poly4model$coefficients[5] * (v ^ 4)

pdf("postprocessed.pdf")
plot(df)
lines(v, vv, col="red", pch=20, lw=3)
dev.off()

我最初尝试使用predict函数来执行此操作,但无法正常工作,因此求助于使用一些新矢量vvv实现此";解决办法";来存储我试图绘制的区域中线条的数据。

最终,我正在尝试这样做:

  • 用四次多项式拟合数据
  • 用一种颜色绘制数据范围内的四次多项式
  • 用不同的颜色绘制从最后一个值到最后一个值+10(预测)范围内的4次多项式

目前我相当确定使用vvv来做这件事不是";最好的方法";,但是我认为它应该起作用。现在的情况是,我得到的值非常大。

这是来自Desmos的屏幕截图。通过在控制台中键入poly4model$coefficients,我复制并粘贴了相同的系数,如图所示。但是,一定出了什么问题,因为此函数与数据完全不同。

我想我已经提供了足够的信息来运行这个简短的脚本。不过,我也会添加pdf。

推荐答案

使用predict函数创建行最简单。为此,您需要将包含所需自变量的模型和数据框传递给predict函数。

x <- df_input$time
y <- df_input$value
df <- data.frame(x, y)

poly4model <- lm(y~poly(x, degree=4), data=df)

v <- seq(30, 40)
#Notice the column in the dataframe is the same variable name 
#     as the variable in the model!
predict(poly4model, data.frame(x=v))

plot(df)
lines(v, predict(poly4model, data.frame(x=seq(30, 40))), col="red", pch=20, lw=3)

备注
函数poly";返回或计算指定点集x上的1到1次的正交多项式:这些都与0次的常量多项式正交。要返回";Normal";多项式系数,需要在函数中使用";raw=true";选项。

poly4model <- lm(y~poly(x, degree=4, raw=TRUE), data=df)

现在您的上面的等式将起作用。

这篇关于R:如何绘制lm polyfit生成的多项式的自定义范围的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆