ここでの質問に正義をかけることはできませんが、小さなモノグラフが必要になりますが、いくつかの重要なアイデアを要約すると役立つかもしれません。
質問
質問を書き直し、明確な用語を使用することから始めましょう。データは、順序付けられたペアのリストで構成さ。 既知の定数α 1及びα 2は、値決定、X 1 、I = EXP (α 1 T I)とX 2 、I = EXP (α 2 T I)。モデルを仮定します(ti,yi) α1α2x1,i=exp(α1ti)x2,i=exp(α2ti)
yi=β1x1,i+β2x2,i+εi
以下のための定数 およびβ 2を、推定すべきε 私はとにかく良い近似に- -ランダムであり、独立した(その推定関心のもある)、共通の分散を持ちます。β1β2εi
背景:線形「マッチング」
MostellerとTukeyの変数を参照し = (X 1 、1、X 1 、2、... )及びX 2として"照合プログラム。" これらは、特定の方法でy = (y 1、y 2、… )の値を「一致」させるために使用されます。より一般的には、yとxを同じユークリッドベクトル空間内の任意の2つのベクトルとし、yは「ターゲット」とxの役割を果たすx1(x1,1,x1,2,…)x2y=(y1,y2,…)yxyx「マッチャー」のそれ。我々は、系統的係数変化企図近似するために、yの複数によってλのX。場合に最良の近似が得られるλ xが近くにあるYできるだけ。等価的に、二乗の長さY - λ xが最小化されます。λyλxλxyy−λx
このマッチングプロセスを視覚化する一つの方法は、散布することである及びYのグラフ描画されたX → λ Xを。散布点とこのグラフの間の垂直距離は、構成要素である残差ベクトルY - λ X。それらの平方の合計はできるだけ小さくする必要があります。比例定数まで、これらの正方形は、残差に等しい半径を持つ点(x i、y i)を中心とする円の面積です。これらすべての円の面積の合計を最小化します。xyx→λx y−λx(xi,yi)
中央のパネルにの最適値を示す例を次に示します。λ
散布図の点は青です。グラフ赤線です。この図は、赤線が原点を通過するように拘束されていることを強調して(0 、0 ):それは、ラインフィッティングの非常に特殊な場合です。x→λx(0,0)
逐次マッチングにより多重回帰を取得できます
質問の設定に戻ると、1つのターゲットと2つのマッチャーx 1およびx 2があります。ここでも、yがb 1 x 1 + b 2 x 2によって可能な限り近似される数値b 1およびb 2を求めます。任意にx 1で始まり、Mosteller&Tukeyは残りの変数x 2およびyをx 1に一致させますyx1x2b1b2yb1x1+b2x2x1x2yx1。これらのマッチの残差を書く及びY ⋅ 1それぞれ:⋅ 1いることを示し、X 1は、変数「の取り出し」されています。x2⋅1y⋅1⋅1x1
我々は書ける
y=λ1x1+y⋅1 and x2=λ2x1+x2⋅1.
採取したからX 2及びYを、我々は目標残差に一致するように進むY ⋅ 1整合残差には、xは2 ⋅ 1。最終の残差であるY ⋅ 12。代数的に、私たちは書きましたx1x2yy⋅1x2⋅1y⋅12
y⋅1y=λ3x2⋅1+y⋅12; whence=λ1x1+y⋅1=λ1x1+λ3x2⋅1+y⋅12=λ1x1+λ3(x2−λ2x1)+y⋅12=(λ1−λ3λ2)x1+λ3x2+y⋅12.
このことが示す最後のステップでは、係数であり、X 2のマッチングにおけるX 1及びX 2のY。λ3x2x1x2y
我々は、ちょうど同様に最初の撮影により進行している可能性がのうち、X 1及びY製造、X 1 ⋅ 2及びY ⋅ 2を、次にとるX 1 ⋅ 2のうちY ⋅ 2残差の異なる組得、yは⋅ 21。この時間は、係数X 1最後のステップで見つかった-レッツ・コール、それはμ 3は係数--is X 1のマッチングで、X 1およびx2x1yx1⋅2y⋅2x1⋅2y⋅2y⋅21x1μ3x1x1x2 to y.
Finally, for comparison, we might run a multiple (ordinary least squares regression) of y against x1 and x2. Let those residuals be y⋅lm. It turns out that the coefficients in this multiple regression are precisely the coefficients μ3 and λ3 found previously and that all three sets of residuals, y⋅12, y⋅21, and y⋅lm, are identical.
Depicting the process
これは新しいものではありません:それはすべて本文にあります。これまでに取得したすべての散布図マトリックスを使用して、画像分析を提供したいと思います。
これらのデータは、シミュレートされているので、我々は、の根底にある「真」の値を示すの高級有する最後の行と列には:これらは値がβ 1 X 1 + β 2 X 2で添加エラーなし。yβ1x1+β2x2
The scatterplots below the diagonal have been decorated with the graphs of the matchers, exactly as in the first figure. Graphs with zero slopes are drawn in red: these indicate situations where the matcher gives us nothing new; the residuals are the same as the target. Also, for reference, the origin (wherever it appears within a plot) is shown as an open red circle: recall that all possible matching lines have to pass through this point.
Much can be learned about regression through studying this plot. Some of the highlights are:
The matching of x2 to x1 (row 2, column 1) is poor. This is a good thing: it indicates that x1 and x2 are providing very different information; using both together will likely be a much better fit to y than using either one alone.
Once a variable has been taken out of a target, it does no good to try to take that variable out again: the best matching line will be zero. See the scatterplots for x2⋅1 versus x1 or y⋅1 versus x1, for instance.
The values x1, x2, x1⋅2, and x2⋅1 have all been taken out of y⋅lm.
Multiple regression of y against x1 and x2 can be achieved first by computing y⋅1 and x2⋅1. These scatterplots appear at (row, column) = (8,1) and (2,1), respectively. With these residuals in hand, we look at their scatterplot at (4,3). These three one-variable regressions do the trick. As Mosteller & Tukey explain, the standard errors of the coefficients can be obtained almost as easily from these regressions, too--but that's not the topic of this question, so I will stop here.
Code
These data were (reproducibly) created in R
with a simulation. The analyses, checks, and plots were also produced with R
. This is the code.
#
# Simulate the data.
#
set.seed(17)
t.var <- 1:50 # The "times" t[i]
x <- exp(t.var %o% c(x1=-0.1, x2=0.025) ) # The two "matchers" x[1,] and x[2,]
beta <- c(5, -1) # The (unknown) coefficients
sigma <- 1/2 # Standard deviation of the errors
error <- sigma * rnorm(length(t.var)) # Simulated errors
y <- (y.true <- as.vector(x %*% beta)) + error # True and simulated y values
data <- data.frame(t.var, x, y, y.true)
par(col="Black", bty="o", lty=0, pch=1)
pairs(data) # Get a close look at the data
#
# Take out the various matchers.
#
take.out <- function(y, x) {fit <- lm(y ~ x - 1); resid(fit)}
data <- transform(transform(data,
x2.1 = take.out(x2, x1),
y.1 = take.out(y, x1),
x1.2 = take.out(x1, x2),
y.2 = take.out(y, x2)
),
y.21 = take.out(y.2, x1.2),
y.12 = take.out(y.1, x2.1)
)
data$y.lm <- resid(lm(y ~ x - 1)) # Multiple regression for comparison
#
# Analysis.
#
# Reorder the dataframe (for presentation):
data <- data[c(1:3, 5:12, 4)]
# Confirm that the three ways to obtain the fit are the same:
pairs(subset(data, select=c(y.12, y.21, y.lm)))
# Explore what happened:
panel.lm <- function (x, y, col=par("col"), bg=NA, pch=par("pch"),
cex=1, col.smooth="red", ...) {
box(col="Gray", bty="o")
ok <- is.finite(x) & is.finite(y)
if (any(ok)) {
b <- coef(lm(y[ok] ~ x[ok] - 1))
col0 <- ifelse(abs(b) < 10^-8, "Red", "Blue")
lwd0 <- ifelse(abs(b) < 10^-8, 3, 2)
abline(c(0, b), col=col0, lwd=lwd0)
}
points(x, y, pch = pch, col="Black", bg = bg, cex = cex)
points(matrix(c(0,0), nrow=1), col="Red", pch=1)
}
panel.hist <- function(x, ...) {
usr <- par("usr"); on.exit(par(usr))
par(usr = c(usr[1:2], 0, 1.5) )
h <- hist(x, plot = FALSE)
breaks <- h$breaks; nB <- length(breaks)
y <- h$counts; y <- y/max(y)
rect(breaks[-nB], 0, breaks[-1], y, ...)
}
par(lty=1, pch=19, col="Gray")
pairs(subset(data, select=c(-t.var, -y.12, -y.21)), col="Gray", cex=0.8,
lower.panel=panel.lm, diag.panel=panel.hist)
# Additional interesting plots:
par(col="Black", pch=1)
#pairs(subset(data, select=c(-t.var, -x1.2, -y.2, -y.21)))
#pairs(subset(data, select=c(-t.var, -x1, -x2)))
#pairs(subset(data, select=c(x2.1, y.1, y.12)))
# Details of the variances, showing how to obtain multiple regression
# standard errors from the OLS matches.
norm <- function(x) sqrt(sum(x * x))
lapply(data, norm)
s <- summary(lm(y ~ x1 + x2 - 1, data=data))
c(s$sigma, s$coefficients["x1", "Std. Error"] * norm(data$x1.2)) # Equal
c(s$sigma, s$coefficients["x2", "Std. Error"] * norm(data$x2.1)) # Equal
c(s$sigma, norm(data$y.12) / sqrt(length(data$y.12) - 2)) # Equal