我对正交多项式的理解是它们采用的形式
y(x)= a1 + a2(x - c1)+ a3(x - c2)(x - c3)+ a4(x - c4)(x - c5)(x - c6)......最多为期望的条款
其中a1,a2 等是每个正交项的系数(在拟合之间变化),并且c1,c2 等是正交项内的系数,确定使得这些项保持正交性(使用相同x值的拟合之间一致)
我理解poly()用于拟合正交多项式.一个例子
x = c(1.160, 1.143, 1.126, 1.109, 1.079, 1.053, 1.040, 1.027, 1.015, 1.004, 0.994, 0.985, 0.977) # abscissae not equally spaced
y = c(1.217395, 1.604360, 2.834947, 4.585687, 8.770932, 9.996260, 9.264800, 9.155079, 7.949278, 7.317690, 6.377519, 6.409620, 6.643426)
# construct the orthogonal polynomial
orth_poly <- poly(x, degree …Run Code Online (Sandbox Code Playgroud) 使用polyR中的函数,如何评估多元多项式?
poly()输出对象(正交或原始多项式)的输出.这样我就可以使用多项式生成一个类似于我的模型矩阵的行,我可以用它来评估结果(即,我试图通过调用推送多变量测试数据值,poly()以便可以类似于我的回归方法矩阵的一行).poly()和R的回归程序相对较新. (A):直接接近 predict
这种方法失败了,显然是由于一些意想不到的输入类别.我知道这些特殊的x1和x2值是共线的,对于一般的拟合来说并不理想(我只是想让predict机器运转起来).使用的predict灵感来自这篇 SO帖子. (Q1)是否可以predict直接调用该方法来评估该多项式?
> x1 = seq(1, 10, by=0.2)
> x2 = seq(1.1,10.1,by=0.2)
> t = poly(cbind(x1,x2),degree=2,raw=T)
> predict(t,newdata=data.frame(x1=2.03,x2=2.03))
Error in UseMethod("predict") :
no applicable method for 'predict' applied to an object of class "c('matrix', 'double', 'numeric')"
Run Code Online (Sandbox Code Playgroud)
(B)直接评估仅适用于原始多项式(非正交)
由于(A),我尝试了直接调用poly()的变通方法.对于原始多项式,我可以让它工作,但我必须为每个相应的变量重复数据.以下显示(第一个)单个数据点的失败,(第二个)重复该值的成功. (Q2)有没有办法避免第二个清单中冗余重复数据以使原始poly()评估正确?
> poly(cbind(x1=c(2.03),x2=c(2.13)),degree=2,raw=T)
Error in `colnames<-`(`*tmp*`, value = apply(z, 1L, function(x) …Run Code Online (Sandbox Code Playgroud)