我想在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。
非常感谢!
答案 0 :(得分:1)
对于polyfit
和polyvar
,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.lm
比polyvar
强大得多。它可以返回置信区间。阅读?predict.lm
。
使用predict.lm
时存在一些敏感问题。关于这一点有无数的问题/答案,你可以找到我经常将这些问题重复的根本问题:
因此,请确保您在学习R的早期阶段养成使用lm
和predict
的良好习惯。
<强>附加强>
在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