gpt4 book ai didi

r - 如何使 R poly() 评估(或 "predict")多元新数据(正交或原始)?

转载 作者:行者123 更新时间:2023-12-02 02:12:40 25 4
gpt4 key购买 nike

使用 R 中的 poly 函数,如何评估多元多项式?

  • 这篇文章共有 4 个问题,突出显示如下。
  • 我正在寻求评估 poly() 输出对象(正交或原始多项式)的输出。这将使我能够使用多项式生成与模型矩阵类似的行,我可以用它来评估结果(即,我寻求通过 推送多元测试数据值>poly() 调用,以便可以像我的回归方法矩阵的一行一样对其进行评估)。
  • 我的背景:我对 R、R 的 poly() 和 R 的回归例程相对较新。
  • 我尝试了多种方法,希望您能针对每种方法提供帮助:
<小时/>

(A):使用预测的直接方法

此方法失败,显然是由于某些意外的输入类别。我知道这些特定的 x1 和 x2 值是共线的,对于一般拟合来说并不理想(我只是想让预测机器运行)。 predict 的使用受到 this 的启发。所以帖子。 (问题1)是否可以直接调用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')"
<小时/>

(B) 直接计算仅适用于原始多项式(非正交)

由于 (A),我尝试了直接调用 poly() 的解决方法。对于原始多项式,我可以让它工作,但我必须为每个相应的变量重复数据。以下显示(第一)单个数据点的失败,(第二)重复该值的成功。 (Q2) 有没有办法避免第二个 list 中数据的冗余重复,以使原始 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) paste(x, :
attempt to set 'colnames' on an object with less than two dimensions

> poly(cbind(x1=c(2.03,2.03),x2=c(2.13,2.13)),degree=3,raw=T)
1.0 2.0 3.0 0.1 1.1 2.1 0.2 1.2 0.3
[1,] 2.03 4.1209 8.365427 2.13 4.3239 8.777517 4.5369 9.209907 9.663597
[2,] 2.03 4.1209 8.365427 2.13 4.3239 8.777517 4.5369 9.209907 9.663597
attr(,"degree")
[1] 1 2 3 1 2 3 2 3 3

如果我尝试使用正交多项式的类似冗余列出数据方法,我会遇到“嘿,你的数据是冗余的!”错误(如果我只列出每个变量的值一次,我也会遇到这个错误)。 (Q3) 是否可以通过直接调用 poly() 来计算多元正交多项式?

> poly(cbind(x1=c(2.03, 2.03),x2=c(2.13, 2.13)),degree=2)
Error in poly(dots[[1L]], degree, raw = raw) :
'degree' must be less than number of unique points
<小时/>

(C) 无法从多元正交多项式中提取 alpha 和范数系数最后,我知道有一个 coefs 输入变量 predict.poly。我知道 coefs 是正交多项式拟合输出的 alpha 和范数值。但是,我只能从单变量多项式拟合中提取这些......当我拟合多元正交(或原始)时,poly的返回值 没有 coefs。 (Q4) 是否可以通过调用 poly() 提取 alphanorm 系数来拟合的正交多项式多变量数据?

> t = poly(cbind(x1),degree=2)   # univariate orthog poly --> WORKS
> attributes(t)$coefs
$alpha
[1] 5.5 5.5

$norm2
[1] 1.000 46.000 324.300 1826.458


> t = poly(cbind(x1,x2),degree=2) # multivariate orthog poly --> DOES NOT WORK
> attributes(t)$coefs
NULL

如果我可以澄清,请告诉我。衷心感谢您提供的任何帮助。

最佳答案

根据记录,此问题似乎已修复

> 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)
>
> class(t) # has a class now
[1] "poly" "matrix"
>
> # does not throw error
> predict(t, newdata = cbind(x1,x2)[1:2, ])
1.0 2.0 0.1 1.1 0.2
[1,] 1.0 1.00 1.1 1.10 1.21
[2,] 1.2 1.44 1.3 1.56 1.69
attr(,"degree")
[1] 1 2 1 2 2
attr(,"class")
[1] "poly" "matrix"
>
> # and gives the same
> t[1:2, ]
1.0 2.0 0.1 1.1 0.2
[1,] 1.0 1.00 1.1 1.10 1.21
[2,] 1.2 1.44 1.3 1.56 1.69
>
> sessionInfo()
R version 3.4.1 (2017-06-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

关于r - 如何使 R poly() 评估(或 "predict")多元新数据(正交或原始)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31134985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com