首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在quantreg包中滥用predict.rq?

在quantreg包中滥用predict.rq?
EN

Stack Overflow用户
提问于 2021-04-04 21:30:01
回答 2查看 53关注 0票数 1

我正在使用quantreg包根据训练集来预测新数据。然而,我注意到predict.rqpredict与手动操作之间存在差异。下面是一个示例:

分位数回归设置为

代码语言:javascript
复制
N = 10000
   tauList = seq(1:11/12)/12
   y = rchisq(N,2)
   X = matrix( rnorm(3*N)  ,nrow = N, ncol = 3 )
   fit <- rq( y ~ X-1, tau = tauList, method = "fn")

我想要预测的新数据集是

代码语言:javascript
复制
newdata <- matrix( rbeta((3*N),2,2)    ,nrow = N,ncol=3 )

我使用predict.rqpredict来预测新数据。两者返回相同的结果:

代码语言:javascript
复制
fit_use_predict <- predict.rq( fit, newdata = as.data.frame(newdata) )

此外,我还根据系数矩阵手动进行预测:

代码语言:javascript
复制
coef_mat <- coef(fit)
fit_use_multiplication <- newdata %*% coef_mat

我认为两者在数字上是相同的,但它们不是:

代码语言:javascript
复制
diff <- fit_use_predict - fit_use_multiplication
print(diff)

它们的区别是不可忽略的。

然而,预测原始数据集X两者都返回相同的结果,即,

代码语言:javascript
复制
predict(fit, newdata = data.frame(X)) = X %*% coef_mat  ## True

在使用函数时,我是否遗漏了什么?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-04 23:23:30

在我们进行预测之前,这里有一个更严重的问题,即模型强制所有拟合的分位数函数通过设计空间的原点,并且由于协变量位于原点的中心,所有分位数函数都被迫穿过原点。即使X都位于正正方中,也可以说响应的分布在原点是退化的。

票数 2
EN

Stack Overflow用户

发布于 2021-04-04 22:29:07

我认为你只需要在你的数据中保留'X‘的名字,就像在训练数据中一样。

代码语言:javascript
复制
library(quantreg)
N = 10000
tauList = seq(1:11/12)/12
y = rchisq(N,2)
X = matrix( rnorm(3*N)  ,nrow = N, ncol = 3 )
fit <- rq( y ~ X-1, tau = tauList, method = "fn")

newdata <- matrix( rbeta((3*N),2,2)    ,nrow = N,ncol=3 )
fit_use_predict <- predict.rq( fit, newdata = data.frame(X=I(newdata)) )

coef_mat <- coef(fit)
fit_use_multiplication <- newdata %*% coef_mat
diff <- fit_use_predict - fit_use_multiplication

max( abs(diff) )

输出为0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66941771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档