R: 如何手动创建class "rq" 的对象?
R: how to create an object of class "rq" manually?
如何手动创建 class "rq" 的对象,以便之后可以将其用于 运行 predict
函数?
感谢您非常有用的回复,mymdl
现在是 class 本例中的“rq”。在代码中添加 class(mymdl$coefficients) ="numeric"
解决了我的主要问题:predict(mymdl)
有效。
有趣的是,class(mdl$terms)
和 class(mymdl$terms)
不同。如果我设置 class(mymdl$terms) = class(mdl$terms)
,那么 predict(mymdl)
会产生 NAs
。我想知道为什么会这样..
library(quantreg)
data(engel) #load dataset
engel2 <- engel[1:100,] #keep subset for prediction
reg_formula <- foodexp ~ income #define regression formula
mdl <- rq(reg_formula,.5, data = engel) #run regression
#------------------------------------------
#remove non-essential information from mdl
#mdl$coefficients <- NULL
mdl$x <- NULL
mdl$y <- NULL
mdl$residuals <- NULL
mdl$dual <- NULL
mdl$fitted.values <- NULL
mdl$formula <- NULL
#mdl$terms <- NULL
mdl$xlevels <- NULL
mdl$call <- NULL
mdl$tau <- NULL
mdl$rho <- NULL
mdl$method <- NULL
mdl$model <- NULL
#Only mdl$coefficients and mdl$terms are
#essential for predicting
#------------------------------------------
engel2$foodexp_pr <- predict(mdl, newdata = engel2) #predict
#create own regression model
mymdl <- NULL
mymdl[["coefficients"]][["(Intercept)"]] <- 81.48225
mymdl[["coefficients"]][["income"]] <- 0.5601806
mymdl$terms <- reg_formula
class(mymdl) <- "rq"
class(mymdl$coefficients) ="numeric"
engel2$foodexp_pr2 <- predict(mymdl, newdata = engel2) #works
#Minor question: why does predict produce NAs in this case?
class(mymdl$terms) = class(mdl$terms)
engel2$foodexp_pr3 <- predict(mymdl, newdata = engel2) #produces NAs
我刚开始使用 classes。欢迎任何帮助和建议。
编辑 1: 我扩展了我的示例并纳入了您非常有用的反馈。 mymdl
现在是一个“rq”-class。我还确定了 predict
函数使用的最基本信息(即 mdl$coefficients
和 mdl$terms
)。
编辑 2: 将我的解决方案添加到示例中。但是,还有一个未解决的小问题。
S3class系统非常松散。你可以使一个对象成为 class "rq" 只需将其添加到它的 class:
class(mymdl) <- "rq"
或更普遍
class(mymdl) <- c("rq", class(mymdl))
这并不意味着 predict.rq
会起作用;为此,您需要检查它需要什么,但这并不总是那么容易。
如何手动创建 class "rq" 的对象,以便之后可以将其用于 运行 predict
函数?
感谢您非常有用的回复,mymdl
现在是 class 本例中的“rq”。在代码中添加 class(mymdl$coefficients) ="numeric"
解决了我的主要问题:predict(mymdl)
有效。
有趣的是,class(mdl$terms)
和 class(mymdl$terms)
不同。如果我设置 class(mymdl$terms) = class(mdl$terms)
,那么 predict(mymdl)
会产生 NAs
。我想知道为什么会这样..
library(quantreg)
data(engel) #load dataset
engel2 <- engel[1:100,] #keep subset for prediction
reg_formula <- foodexp ~ income #define regression formula
mdl <- rq(reg_formula,.5, data = engel) #run regression
#------------------------------------------
#remove non-essential information from mdl
#mdl$coefficients <- NULL
mdl$x <- NULL
mdl$y <- NULL
mdl$residuals <- NULL
mdl$dual <- NULL
mdl$fitted.values <- NULL
mdl$formula <- NULL
#mdl$terms <- NULL
mdl$xlevels <- NULL
mdl$call <- NULL
mdl$tau <- NULL
mdl$rho <- NULL
mdl$method <- NULL
mdl$model <- NULL
#Only mdl$coefficients and mdl$terms are
#essential for predicting
#------------------------------------------
engel2$foodexp_pr <- predict(mdl, newdata = engel2) #predict
#create own regression model
mymdl <- NULL
mymdl[["coefficients"]][["(Intercept)"]] <- 81.48225
mymdl[["coefficients"]][["income"]] <- 0.5601806
mymdl$terms <- reg_formula
class(mymdl) <- "rq"
class(mymdl$coefficients) ="numeric"
engel2$foodexp_pr2 <- predict(mymdl, newdata = engel2) #works
#Minor question: why does predict produce NAs in this case?
class(mymdl$terms) = class(mdl$terms)
engel2$foodexp_pr3 <- predict(mymdl, newdata = engel2) #produces NAs
我刚开始使用 classes。欢迎任何帮助和建议。
编辑 1: 我扩展了我的示例并纳入了您非常有用的反馈。 mymdl
现在是一个“rq”-class。我还确定了 predict
函数使用的最基本信息(即 mdl$coefficients
和 mdl$terms
)。
编辑 2: 将我的解决方案添加到示例中。但是,还有一个未解决的小问题。
S3class系统非常松散。你可以使一个对象成为 class "rq" 只需将其添加到它的 class:
class(mymdl) <- "rq"
或更普遍
class(mymdl) <- c("rq", class(mymdl))
这并不意味着 predict.rq
会起作用;为此,您需要检查它需要什么,但这并不总是那么容易。