【发布时间】:2015-06-04 01:30:55
【问题描述】:
在 R 中,可以使用公式中的 offset 参数构建具有固定系数的 lm() 或 glm() 对象。
x=seq(1,100)
y=x^2+3*x+7
# Forcing to fit the polynomial: 2x^2 + 4x + 8
fixed_model = lm(y ~ 0 + offset(8 + 4*x + 2*I(x^2) ))
是否可以使用poly() 做同样的事情?我尝试了下面的代码,但它似乎不起作用。
fixed_model_w_poly <- lm(y ~ 0 + offset(poly(x, order=2, raw = TRUE, coefs= c(8, 4, 2))))
错误:偏移量为 200,应等于 100(观察次数)
我想使用poly() 作为方便的接口来运行具有大量固定系数或阶值的迭代,而不必为每个阶/系数组合手动编码:offset(8 + 4*x + 2*I(x^2) )。
P.S:更多但不是必要的信息:这是进入 MCMC 例程。因此,示例用法是在以下代码中生成(然后比较)model_current 和 model_next:
library(MASS)
coeffs_current <- c(8, 4, 2)
model_current <- lm(y ~ 0 + offset(poly(x, order=2, raw = TRUE, coefs= coeffs_current )))
cov <- diag(rep(1,3))
coeffs_next <- mvrnorm(1, mu = as.numeric(coeffs_current ),
Sigma = cov )
model_next <- lm(y ~ 0 + offset(poly(x, order=2, raw = TRUE, coeffs_next ))
【问题讨论】:
-
不明白访问
fixed_model$residuals的难度 -
@BondedDust,我编辑了问题以澄清。那不是问题。我正在尝试使用
poly()创建固定模型,在这里我可以轻松地输入固定系数和我想要的顺序,而不是手动在公式中编写offset(8 + 4*x + 2*I(x^2) ))。 -
提供一个示例,说明您期望系数如何进入此过程。在查看了
poly(.)-result 的帮助页面和结构后,我不清楚如何继续,所以我认为使用更自动化的方法来构建具有所需偏移量的公式会更容易。 (只要您使用残差,我认为您应该避免与不使用poly()相关的陷阱。 -
@ BondedDust,我在问题的底部添加了一个简化的用法示例 - 实际上,
model_current和model_next在马尔可夫链蒙特卡罗例程中分别象征着我当前和提议的模型. -
我不明白..代码和数据都包含在问题中,它们可以按原样运行。您不需要任何进一步的信息、特定数据即可重现该问题。
标签: r distribution lm polynomials