使用偏移量进行lm回归-R

8
我有这段代码。
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)').

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

请问有人可以解释一下偏移量是如何工作的吗?


2
请问这个问题和你之前的那个问题有什么不同? - agstudy
那个,这是一个非常有力的论点,说明你不应该问第二个问题。在StackOverflow上,问题应该是完全自包含的。这就是为什么你会收到一些关于两个问题相似性的评论,因为有些人(正确地)认为你应该将其简单地编辑到之前的问题中。 - joran
为了维护OP的利益,我认为这是一个判断性的问题——我同意在这种情况下最好编辑之前的问题,但我可以想象出一个非常相似的场景,在那里有人因为编辑而没有发布成为单独的问题而受到责备... - Ben Bolker
1
谢谢。我在之前的评论中问了这个问题,但没有人回答。因此,由于这是一个完全独立的主题(使用_offset_而不是通过点的回归),我认为它可以单独处理。 - ac2051
@Thomas 我已经阅读了帮助文件,但我无法理解它。特别是,当他们说“长度等于案例数”时,我不明白他们指的是什么意思。 - ac2051
显示剩余3条评论
2个回答

11

您的偏移项必须是一个变量, 像xy, 而不是数值常量。因此,您需要在数据集中创建一个包含适当值的列。

dat$o <- 283.56
lm(y ~ I(x - x0) - 1, data=dat, offset=o)

谢谢您的回答。我已经将点P(x0,y0)添加到我的数据库中。现在它是_dat_的第161个元素。我尝试了以下两种方法: x0 <- 3.15 y0 <- dat[161,2] regression <- lm(y ~ I(x-x0)-1, offset=y0)y0 <- dat[161,] regression <- lm(y ~ I(x)-1, offset=y0) 但都没有成功。我做错了什么?为了使问题更清晰,我已经将代码的前半部分添加到了我的问题中。 - ac2051
2
你仍然在创建一个给定值的单一常量。你需要传递一个值的向量作为偏移量。最简单的方法是按照我发布的方式:在数据集中创建一个新列。我假设 dat[161, 2] 是你的 y0 应该是什么?这样做:dat$o <- dat[161,2]; lm(y ~ I(x - x0) - 1, offset=o, data=dat) - Hong Ooi
非常完美,非常感谢!我创建了一行而不是一列,这就是为什么它没有起作用的原因!感谢您的耐心等待。 - ac2051
使用 I(x - x0) 是正确的吗? 该模型假设残差与 x-x0 的正态分布,但这并不总是成立。如果 x 和 x0 相关,则问题会更加严重。 我也不知道偏移量如何影响拟合。从 glm 帮助文档中可以看到:“空模型将包括偏移量和截距(如果模型中有截距)。请注意,如果链接函数依赖于数据而不是通过拟合均值进行计算,则这将是不正确的:指定零偏移量以强制进行正确的计算。” - skan

4
事实上,这里真正的问题是你应该使用一个向量来指定offset,其长度应该数据的行数(或长度,如果数据被组织为向量)相同。以下代码将按预期完成您的工作:
regression <- lm(y ~ I(x-x0)-1, offset = rep(y0, length(y)))

这里有一份对于IT技术相关内容的好解释,如果您感兴趣:http://rfunction.com/archives/223

你应该平衡你的括号。 - Adrian Keister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接