【发布时间】:2017-05-10 21:57:57
【问题描述】:
是否可以在 R 中为 lm() 模型添加边界条件?
weight <- data.frame(mass = c(0.02, 0, 0.3, 0.05, 0.006, 0.01), size = c(0.5, 0.001, 0.1, 0.2, 0.06, 0.02), density = c(1, 0, 0.05, 0.012, 0.1, 0.01))
t <- lm(mass ~ size + density, data = weight)
例如如果result < 0 那么result = 0? - 因为质量不可能小于零。
我写了?lm之后找到了一些资料,但是没有示例如何使用它。
模型、x、y、qr 逻辑。如果 TRUE 对应的组件 拟合(模型框架、模型矩阵、响应、QR 分解)被返回。
我可以在编译后运行模型并检查边界条件的结果,但也许有更优雅的方法:)
result <- t$residuals + weight$mass
check <- function(x){
if(x < 0){
return(0)
}
return(x)
}
sapply(result, check)
【问题讨论】:
-
请注意,您可以像
result <- pmax(fitted(t), 0)那样使您对边界条件的检查更加优雅(并且计算速度更快)- 有帮助吗? -
@Patronus 我正在考虑在
lm内部实现它,因为摘要功能 - 我在一个循环中有很多模型,直接从模型参数收集输出参数要快得多 -
@plotr 预测值的输出(您设置为零的值)与汇总函数()有什么关系?摘要输出不包含拟合值。还是您担心斜率和截距可能不同(如果有大量预测值为负数,它们确实可能不同!)
-
@Patronus 抱歉,我的意思是系数,我不确定使用具有拟合系数的拟合模型并在之后检查边界是否最有效和数学上正确 - 但在预测未来值时仍然使用拟合系数(以及之后的边界声明)。或者我应该先拟合模型,然后检查边界条件,然后再次拟合模型以使其符合边界条件?
-
truncated regression 在这里不适用吗?