“独特点”和度数上的 R 多项式展开误差

机器算法验证 r 多项式
2022-03-16 13:11:31

在这种情况下,为什么我在 R 中出现“'度'必须小于唯一点数”的错误?

set.seed(0)
# this is fine
dim(poly(runif(1e3),20))
# this will not work
dim(poly(runif(1e3),30))

我们在哪里1000来自均匀分布的唯一数据点,度数仅为30?

我发现答案是“数值溢出”

https://stackoverflow.com/questions/17998919/why-is-poly-complaining-about-degree-less-than-number-of-unique-points

但是我们使用的是正交多项式而不是原始的,这会解决数值问题(示例kappa(poly(runif(100),20)))吗?

1个回答

在 R 中,poly 函数生成一个多项式,然后进行 QR 分解以使其正交。对于高次多项式输入,您将获得 Vandermode 矩阵的高条件数,当poly尝试使列正交时,它会引发错误(因为输入在双精度浮点的限制内看起来秩不足) .

考虑:

x <- poly(runif(100),30,raw=TRUE)
QR <- qr(x)
QR$rank

这基本上是 poly 的源代码中的内容。QR$rank 会远远低于学位。