未来框架的多项式曲线拟合

时间:2019-09-01 03:50:09

标签: r

原本我以以下形式提供数据

m n
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

使用以下代码将其转换为

input<-file('stdin', 'r')

mn <- read.table(input, nrows = 1, as.is = TRUE)

DF <- read.table(input, skip = 0)



m <- mn[[1]]

n <- mn[[2]]

x1<- DF[[1]]

y1<-DF[[2]]

x2<-DF[[3]]

y2<-DF[[4]]

fit1<-lm(x1 ~ poly(y1, 3, raw=TRUE))

fit2<-lm(x2 ~ poly(y2, 3, raw=TRUE))

`

m =当前数据长度

n =可以预测的未来点数

x1=  1  5  9 13

x2= 2 6 10 14

我想针对给定值之后的n个值预测x1 y1 x2 y2的所有值。

我试图适应lm,但是我不确定如何继续处理将来要预测的所有数据点的值,仅求取其他系数就不够了,因为它们都需要可以预测

1 个答案:

答案 0 :(得分:0)

为了使它运行起来没有错误,需要在第二个read.table上使用skip = 1:

mn <- read.table(text="m n
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16", nrows = 1, as.is = TRUE)

DF <- read.table(text="m n
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16", skip = 1)

m <- mn[[1]]
n <- mn[[2]]
x1<- DF[[1]]
y1<-DF[[2]]
x2<-DF[[3]]
y2<-DF[[4]]
fit1<-lm(x1 ~ poly(y1, 3, raw=TRUE))
fit2<-lm(x2 ~ poly(y2, 3, raw=TRUE))

因此,这些输入数据是完全共线的,您不会期望以二次方或三次方形式出现任何有用的信息。 lm机器实际上已经承认了这一点:

> fit1

Call:
lm(formula = x1 ~ poly(y1, 3, raw = TRUE))

Coefficients:
             (Intercept)  poly(y1, 3, raw = TRUE)1  poly(y1, 3, raw = TRUE)2  
                      -1                         1                         0  
poly(y1, 3, raw = TRUE)3  
                       0  

通常应该使用data参数

> fit3<-lm(x1 ~ poly(y1, 3, raw=TRUE), DF)
> 
> fit4<-lm(x2 ~ poly(y2, 3, raw=TRUE), DF)

但是在这种情况下,这似乎并不重要:

> predict(fit1, newdata = list(y1=20:23))
 1  2  3  4 
19 20 21 22 
> predict(fit3, newdata = list(y1=20:23))
 1  2  3  4 
19 20 21 22 
> predict(fit2, newdata = list(y1=25:28))
 1  2  3  4 
 3  7 11 15 

获得预测的方法是提供一个newdata参数,该参数可以强制进入数据帧。使用具有相同长度的项目(在这种情况下为单个参数)的列表值将成功。