【问题标题】:Linear fit without slope in rr 中没有斜率的线性拟合
【发布时间】:2016-11-11 16:11:59
【问题描述】:

我想拟合一个没有斜率的线性模型并提取它的信息。我的目标是知道哪个是数据集中水平线的最佳 y 截距,并从派生的线性拟合中评估 以确定 y 是否具有特定行为(x 是日期)。我使用range 来评估行为,但我正在寻找没有单位的索引。

移除 y 截距:

X <- 1:10

Y <- 2:11

lm1 <- lm(Y~X + 0, data = data.frame(X=X,Y=Y)) # y-intercept remove opt 1

lm1 <- lm(Y~X - 1, data = data.frame(X=X,Y=Y)) # y-intercept remove opt 2

lm1 <- lm(Y~0 + X, data = data.frame(X=X,Y=Y)) # y-intercept remove opt 3

lm1$coefficients
       X 
1.142857 

summary(lm1)$r.squared    
[1] 0.9957567

之前显示的所有lm,都有。但是,如果我评估:

lm2 <- lm(Y~1, data = data.frame(X=X,Y=Y))

lm2$coefficients
(Intercept) 
        6.5 

summary(lm2)$r.squared
[1] 0

有一种方法可以从lm 函数中计算出,或者计算一个索引来确定水平线代表了多少y

【问题讨论】:

  • 没有斜率的y截距是lm模型等于DV的均值。

标签: r regression linear-regression lm


【解决方案1】:

lmObject 成为lm 返回的线性模型(用y = TRUE 调用以返回y)。

  • 如果您的模型有截距,则 R 平方计算为

    with(lmObject, 1 - c(crossprod(residuals) / crossprod(y - mean(y))) )
    
  • 如果您的模型没有截距,则 R 平方计算为

    with(lmObject, 1 - c(crossprod(residuals) / crossprod(y)) )
    

注意,如果你的模型只是一个截距(所以它肯定来自上面的第一种情况),你有

residuals = y - mean(y)

因此,R 平方始终为 1 - 1 = 0

在回归分析中,始终建议在模型中包含截距以获得无偏估计。仅具有截距的模型是 NULL 模型。将任何其他模型与此 NULL 模型进行比较,以进一步分析方差。


一个注释。您想要的价值/数量与回归无关。您可以简单地将其计算为

c(crossprod(Y - mean(Y)) / crossprod(Y))  ## `Y` is your data
#[1] 0.1633663

或者,使用

(length(Y) - 1) * var(Y) / c(crossprod(Y))
#[1] 0.1633663

【讨论】:

  • 谢谢!一个很好的答案,我尝试了你笔记的代码,并按照我的要求工作。
  • 以防万一它可以帮助任何人避免我遇到的困惑,crossprod 这里(如crossprod(residuals)crossprod(y) 等)将返回平方和..
猜你喜欢
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多