在包 quantreg 中滥用 predict.rq?
Misuse predict.rq in the package quantreg?
我正在使用 quantreg
包来根据训练集预测新数据。但是,我注意到 predict.rq
或 predict
与手动操作之间存在差异。这是一个例子:
分位数回归设置为
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 )
我使用 predict.rq
或 predict
来预测新数据。两者return相同的结果:
fit_use_predict <- predict.rq( fit, newdata = as.data.frame(newdata) )
我也根据系数矩阵手动进行预测:
coef_mat <- coef(fit)
fit_use_multiplication <- newdata %*% coef_mat
我希望两者在数值上相同,但它们不是:
diff <- fit_use_predict - fit_use_multiplication
print(diff)
他们的区别不容忽视
然而,预测原始数据集X
,两者return相同的结果,即
predict(fit, newdata = data.frame(X)) = X %*% coef_mat ## True
我在使用该功能时是否漏掉了什么?谢谢!
我认为您只需在数据中保留 'X' 名称,就像在训练数据中一样。
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
这里有一个更严重的问题,在我们开始预测之前,模型迫使所有拟合的分位数函数通过设计原点 space,并且由于协变量以原点为中心,所有分位数函数被迫穿过那里。即使 X 全部位于正向,也可以说响应分布在原点退化是一个非常有力的假设。
我正在使用 quantreg
包来根据训练集预测新数据。但是,我注意到 predict.rq
或 predict
与手动操作之间存在差异。这是一个例子:
分位数回归设置为
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 )
我使用 predict.rq
或 predict
来预测新数据。两者return相同的结果:
fit_use_predict <- predict.rq( fit, newdata = as.data.frame(newdata) )
我也根据系数矩阵手动进行预测:
coef_mat <- coef(fit)
fit_use_multiplication <- newdata %*% coef_mat
我希望两者在数值上相同,但它们不是:
diff <- fit_use_predict - fit_use_multiplication
print(diff)
他们的区别不容忽视
然而,预测原始数据集X
,两者return相同的结果,即
predict(fit, newdata = data.frame(X)) = X %*% coef_mat ## True
我在使用该功能时是否漏掉了什么?谢谢!
我认为您只需在数据中保留 'X' 名称,就像在训练数据中一样。
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
这里有一个更严重的问题,在我们开始预测之前,模型迫使所有拟合的分位数函数通过设计原点 space,并且由于协变量以原点为中心,所有分位数函数被迫穿过那里。即使 X 全部位于正向,也可以说响应分布在原点退化是一个非常有力的假设。