微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 R 对线性回归中的截距施加约束

如何解决使用 R 对线性回归中的截距施加约束

我有一个形式的线性回归

Y = a + b1 * X1 + b2 * X2 + b3 * X4

我想将截取参数 a 限制为 a => 0 (即,a 应该是非负值)。

在 R 中有哪些可能的方法来做到这一点?具体来说,我会对使用 caret 包的解决方案感兴趣。

感谢您的回答。

解决方法

线性模型。

m0 <- lm(wt ~ qsec + hp + disp,data = mtcars)
m0
# 
# Call:
# lm(formula = wt ~ qsec + hp + disp,data = mtcars)
#
# Coefficients:
# (Intercept)         qsec           hp         disp  
#   -2.450047     0.201713     0.003466     0.006755 

强制截距为零。

m1 <- lm(wt ~ qsec + hp + disp - 1,data = mtcars)
m1
# 
# Call:
# lm(formula = wt ~ qsec + hp + disp - 1,data = mtcars)
#
# Coefficients:
#      qsec         hp       disp  
# 0.0842281  0.0002622  0.0072967 

您可以使用 nls 对参数应用限制(在本例中为下限)。

m1n <- nls(wt ~ a + b1 * qsec + b2 * hp + b3 * disp,data = mtcars,start = list(a = 1,b1 = 1,b2 = 1,b3 = 1),lower = c(0,-Inf,-Inf),algorithm = "port")
m1n
# Nonlinear regression model
#   model: wt ~ a + b1 * qsec + b2 * hp + b3 * disp
#    data: mtcars
#         a        b1        b2        b3 
# 0.0000000 0.0842281 0.0002622 0.0072967 
#  residual sum-of-squares: 4.926
#
# Algorithm "port",convergence message: relative convergence (4)

有关其他示例解决方案,请参阅 here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。