polyval:从Matlab到R.

时间:2016-12-13 15:09:13

标签: r matlab

我想在R中使用Matlab中给出的以下表达式:

 y1=polyval(p,end_v);

Matlab中的p是:

 p = polyfit(Nodes_2,CInt_interp,3);

现在在R我有:

p <- lm(Spectra_BIR$y ~ poly(Spectra_BIR$x,3, raw=TRUE))

但我不知道R中的哪个命令对应于Matlab中的polyval。

非常感谢!

2 个答案:

答案 0 :(得分:1)

对于polyfitpolyvar,R中没有确切的等价,因为与R的统计工具箱相比,这些MATLAB例程是如此原始。

在MATLAB中,polyfit主要返回多项式回归系数(如果需要,可以获得协方差)。 polyvar采用回归系数p和一组新的x值来预测拟合多项式。

在R中,时尚是:使用lm来获得回归模型(更广泛;不限于多项式回归);使用summary.lm进行模型汇总,例如获得协方差;使用predict.lm进行预测。

所以这是R的方式:

## don't use `$` in formula; use `data` argument
fit <- lm(y ~ poly(x,3, raw=TRUE), data = Spectra_BIR)

注意,fit不仅包含系数,还包含正交计算的基本组件。如果您想提取系数,请执行coef(fit)unname(coef(fit)),如果您不想要显示系数名称。

现在,为了预测,我们做到了:

x.new <- rnorm(5)  ## some random new `x`
## note, `predict.lm` takes a "lm" model, not coefficients
predict.lm(fit, newdata = data.frame(x = x.new))

predict.lmpolyvar强大得多。它可以返回置信区间。阅读?predict.lm

使用predict.lm时存在一些敏感问题。关于这一点有无数的问题/答案,你可以找到我经常将这些问题重复的根本问题:

因此,请确保您在学习R的早期阶段养成使用lmpredict的良好习惯。

<强>附加

在R中构建与polyvar相同的内容也不难。我的回答Function for polynomials of arbitrary order中的函数g正在执行此操作,但通过设置nderiv我们可以也得到多项式的导数。

答案 1 :(得分:0)

R:

library(polynom)
predict(polynomial(1:3), c(5,7,9))
[1]  86 162 262

matlab(official example):

p = [3 2 1];
polyval(p,[5 7 9])
ans =    86   162   262