r 中无斜率的线性拟合
Linear fit without slope in r
我想拟合一个没有斜率的线性模型并提取它的信息。我的 objective 是要知道对于数据集中的水平线哪个是最好的 y-intercept 并从派生的线性拟合中评估 以确定是否 y 有一个特定的行为(x 是日期)。我使用 range
来评估行为,但我正在寻找没有单位的索引。
删除 y-intercept:
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?
让 lmObject
成为 return 由 lm
编辑的线性模型(用 y = TRUE
调用 return 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
我想拟合一个没有斜率的线性模型并提取它的信息。我的 objective 是要知道对于数据集中的水平线哪个是最好的 y-intercept 并从派生的线性拟合中评估 以确定是否 y 有一个特定的行为(x 是日期)。我使用 range
来评估行为,但我正在寻找没有单位的索引。
删除 y-intercept:
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?
让 lmObject
成为 return 由 lm
编辑的线性模型(用 y = TRUE
调用 return 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