6

我有这个代码

dens <- read.table('DensPiu.csv', header = FALSE)
fl <- read.table('FluxPiu.csv', header = FALSE)
mydata <- data.frame(c(dens),c(fl))

dat = subset(mydata, dens>=3.15)
colnames(dat) <- c("x", "y")
attach(dat)

我想对dat中包含的数据进行最小二乘回归,该函数的形式为

y ~ a + b*x

我希望回归线通过一个特定的点 P(x0,y0) (这不是原点)。

我正在尝试这样做

 x0 <- 3.15 

 y0 <-283.56

 regression <- 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)').

我不知道为什么。我想我没有正确定义偏移值,但我在网上找不到任何示例。

有人可以向我解释一下偏移是如何工作的吗?

4

2 回答 2

11

您的偏移项必须是变量,例如xand y,而不是数字常量。因此,您需要在数据集中创建一个具有适当值的列。

dat$o <- 283.56
lm(y ~ I(x - x0) - 1, data=dat, offset=o)
于 2013-06-04T14:45:53.593 回答
4

实际上,这里真正的问题是您应该指定offset一个向量,其长度数据的行数(或长度,如果数据由向量组成)相同。以下代码将按预期完成您的工作:

regression <- lm(y ~ I(x-x0)-1, offset = rep(y0, length(y)))

对于感兴趣的人,这里有一个很好的解释: http ://rfunction.com/archives/223

于 2018-01-31T03:52:53.563 回答