【问题标题】:Use of offset in lm regression - R在 lm 回归中使用偏移量 - R
【发布时间】:2013-05-31 00:20:11
【问题描述】:

我有这个代码

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

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

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

【问题讨论】:

  • 您能否提供一个可重现的示例,并附上数据?
  • 请问这个问题和你之前的问题有什么区别?
  • 现在我要求定义 offset 中的对象。我之前的问题是关于如何对特定点进行回归传递。
  • 帮助文件说这必须是一个向量而不是一个常数:this can be used to specify an a priori known component to be included in the linear predictor during fitting. This should be NULL or a numeric vector of length equal to the number of cases. One or more offset terms can be included in the formula instead or as well, and if more than one are specified their sum is used. See model.offset.
  • 谢谢。我在上一个评论中问了这个问题,但没有人回答。因此,由于它是一个完全独立的主题(offset 的使用,而不是通过一个点的回归),我认为它可以单独处理。

标签: r lm


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。我已将点 P(x0,y0) 添加到我的数据库中。现在是 dat 的第 161 个元素。我已经尝试过x0 &lt;- 3.15 y0 &lt;- dat[161,2] regression &lt;- lm(y ~ I(x-x0)-1, offset=y0)y0 &lt;- dat[161,] regression &lt;- lm(y ~ I(x)-1, offset=y0),但它们都不起作用。我究竟做错了什么?为了更清楚,我已将代码的第一部分添加到我的问题中。
  • 您仍在创建具有给定值的单个常量。您需要传递一个 vector 值作为偏移量。正如我发布的那样,最简单的方法是:在数据集中创建一个新列。我假设dat[161, 2] 是你的 y0 应该是什么?这样做:dat$o &lt;- dat[161,2]; lm(y ~ I(x - x0) - 1, offset=o, data=dat)
  • 完美,非常感谢!我创建了一行而不是一列,这就是它不起作用的原因!感谢您的耐心等待。
  • 使用 I(x - x0) 是否正确?该模型将假设残差与 x-x0 的正态分布,但情况并非总是如此。如果 x 和 x0 相关,问题会更糟。我也不知道偏移量如何影响配件。并且来自 glm 帮助:'空模型将包括偏移量,如果模型中有一个截距,则包含一个截距。请注意,如果链接函数依赖于非拟合均值的数据,这将是不正确的:指定零偏移量以强制进行正确计算'
【解决方案2】:

事实上,这里真正的问题是你应该用一个向量来指定offset,它的长度行数(或长度,如果数据被组合成一个向量) ) 你的数据。以下代码将按预期完成您的工作:

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

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

【讨论】:

  • 你应该平衡你的括号。
猜你喜欢
  • 1970-01-01
  • 2022-01-26
  • 2020-03-21
  • 2021-10-13
  • 2011-02-08
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
相关资源
最近更新 更多