はい、可能です。
ましょから計算直交多項式の非定常部分であるX I。(各列は列ベクトルです。)これらをx iに対して回帰すると、完全に適合する必要があります。直交多項式を計算する手順を文書化していない場合でも、ソフトウェアでこれを実行できます。 回帰Z j個の利回り係数γ I jのためのz1、z2、z3バツ私バツ私zjγ私はj
z私はj= γj 0+ x私γj 1+ x2私γj 2+ x3私γj 3。
結果は行列Γで、右乗算すると、設計行列X = (1 ; x ; x 2 ; x 3)をZ = (1 ; z 1 ; z 2 ; z 3に変換します4 × 4Γバツ= (1 ;x ;バツ2;バツ3)
Z= (1 ;z1;z2;z3) = XΓ 。(1)
モデルをフィッティングした後
E(Y)= Zβ
推定係数を求めますββ^(4要素列ベクトル)は、置換していてもよい取得するために(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.")