从正交多项式回归中恢复原始系数和方差


14

看来,如果我有一个回归模型如yiβ0+β1xi+β2xi2+β3xi3我可以拟合原始多项式并获得不可靠的结果,也可以拟合正交多项式并获得没有直接物理解释的系数(例如,我无法使用它们来找到原始比例上的极值位置)。似乎我应该能够同时兼顾两个方面,并且能够将拟合的正交系数及其方差转换回原始比例。我已经学习了应用线性回归的研究生课程(使用Kutner,5ed),并且浏览了Draper(3ed,由Kutner引用)中的多项式回归一章,但是没有找到有关如何执行此操作的讨论。的帮助文本poly()中的R功能没有。我也没有在网络搜索中找到任何内容,包括此处。正在从拟合正交多项式的系数中重构原始系数(并获得其方差)。

  1. 无法做,我在浪费时间。
  2. 可能是可行的,但在一般情况下还不知道怎么做。
  3. 可能但未讨论,因为“谁愿意?”
  4. 可能但由于“显而易见”而未进行讨论。

如果答案是3或4,如果有人能耐心地解释如何做到这一点或指出这样做的来源,我将不胜感激。如果是1或2,我仍然很想知道障碍是什么。非常感谢您阅读本文,如果我忽略了明显的内容,我向您致歉。


1
我不明白你的观点。x,x 2和x 3不正交。因此,它们是相关的,并且回归参数可能不稳定,但是并不是可靠的情况并不是自动的。转换为正交多项式可能更可靠。但是,是什么使x的原始幂的系数比正交多项式的系数更易于解释?如果x是模型y = a + bx中唯一的变量,则∆y = yi-yi-1 = b∆x,并且b可解释为x单位变化中y的变化。但是随着权力的介入,这种解释就消失了。23
Michael R. Chernick

为了简单起见,我只使用x作为变量的模型,但实际上我是在比较治疗组之间的曲线。因此,根据哪些术语有意义以及它们的大小,我可以对它们进行解释-例如向上/向下的整体偏移,或者较大/较小的初始斜率。同样,正如我的问题所述,在曲线之间进行自然比较是最大值/最小值的位置,如果它在原始比例上,则更容易解释。那么,您的投票是选择3,我同意吗?
f1r3br4

不,我还没有弄清楚是否有可能。我只是了解您为什么要这样做。
Michael R. Chernick

4
好吧,请注意,使用正交多项式拟合的模型将与使用原始多项式项拟合的模型具有完全相同的拟合(即,相同的,相同的拟合值等)。因此,如果您希望将其与原始数据相关联,则可以查看原始项的系数,但可以使用正交多项式对各个项进行推断,以“考虑”它们之间的依赖性。R2
2012年

1
事实证明,三次样条曲线和B样条曲线本身都是一类,并且是两个世界中最好的。
卡尔,

Answers:


6

是的,有可能。

z1,z2,z3xixizjγij

zij=γj0+xiγj1+xi2γj2+xi3γj3.

4×4ΓX=(1;x;x2;x3)

(1)Z=(1;z1;z2;z3)=XΓ.

拟合模型后

E(Y)=Zβ

β^(1)

Y^=Zβ^=(XΓ)β^=X(Γβ^).

Γβ^x

以下R代码说明了这些过程,并使用综合数据对其进行了测试。

n <- 10        # Number of observations
d <- 3         # Degree
#
# Synthesize a regressor, its powers, and orthogonal polynomials thereof.
#
x <- rnorm(n)
x.p <- outer(x, 0:d, `^`); colnames(x.p) <- c("Intercept", paste0("x.", 1:d))
z <- poly(x, d)
#
# Compute the orthogonal polynomials in terms of the powers via OLS.
#
xform <- lm(cbind(1, z) ~ x.p-1)
gamma <- coef(xform)
#
# Verify the transformation: all components should be tiny, certainly
# infinitesimal compared to 1.
#
if (!all.equal(as.vector(1 + crossprod(x.p %*% gamma - cbind(1,z)) - 1), 
    rep(0, (d+1)^2)))
  warning("Transformation is inaccurate.")
#
# Fit the model with orthogonal polynomials.
#
y <- x + rnorm(n)
fit <- lm(y ~ z)
#summary(fit)
#
# As a check, fit the model with raw powers.
#
fit.p <- lm(y ~ .-1, data.frame(x.p))
#summary(fit.p)
#
# Compare the results.
#
(rbind(Computed=as.vector(gamma %*% coef(fit)), Fit=coef(fit.p)))

if (!all.equal(as.vector(gamma %*% coef(fit)), as.vector(coef(fit.p))))
  warning("Results were not the same.")

Γ

110161

两年后... @whuber,是否可以将其扩展到系数的95%CI?
user2602640

@ user2602640是。您需要提取系数的方差-协方差矩阵(vcov在中使用R),以将以一个基础计算的方差转换为新基础的方差,然后以通常的方式手动计算CI。
ub

@whuber我在中途关注了您的评论,然后完全失去了您……您是否有机会怜悯数学上受到挑战的生物学家并将其写成代码?
user2602640
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.