【问题标题】:Constrained least-square regression - Matlab or R约束最小二乘回归 - Matlab 或 R
【发布时间】:2013-06-04 23:49:07
【问题描述】:

我正在对一些数据进行最小二乘回归,函数的形式为

y ~ a + b*x

并且我希望回归线通过特定点 P(x,y)(这不是原点)。 我该怎么做?

我在 R 中使用 lm 命令,在 Matlab 中使用基本拟合 GUI。 我认为我可以使用 constrOptim 命令(在 R 中)或将原点转换为点 P,但我想知道是否有特定的命令可以做到这一点。

我只需要其中一个程序的解决方案,然后我可以使用另一个程序中的系数。

【问题讨论】:

    标签: r matlab linear-regression


    【解决方案1】:

    只需适当地将数据居中并通过“原点”强制回归:

    lm(y ~ I(x-x0)-1, offset=rep(y0,nrow(dat)) data=dat)
    

    您可能需要相应地调整截距系数。

    已编辑offset 需要是正确长度的向量。另一种方法是:

    set.seed(1)
    d <- data.frame(x=1:10,y=rnorm(10,mean=1:10,sd=0.1))
    x0 <- 3
    y0 <- 3
    (lm1 <- lm(y ~ I(x-x0)-1, offset=y0, data=data.frame(d,y0)))
    

    这给出了 1.005 的斜率。我想拦截是coef(lm1)*(-y0/x0)

    【讨论】:

    • 我已经按照您所说的使用x0 &lt;- 3.15 y0 &lt;-283.56 regression &lt;- lm(y ~ I(x-x0)-1, offset=y0) 进行了尝试(我认为在这种情况下不需要data = dat)但我有这个错误:Error in model.frame.default(formula = y ~ I(x - x0) - 1, : variable lengths differ (found for '(offset)')。我不明白为什么..
    • 感谢您的回答。我问过 offsetanother question 中的工作原理。
    • 非常感谢您编辑问题!您提出的两种解决方案都有效。
    猜你喜欢
    • 2010-12-05
    • 2014-12-23
    • 2013-08-06
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多