回帰における直線性のテストの難しさ


21

統計モデリング:二つの文化レオ・ブレイマンは書いて

現在適用されている方法は、適合度テストと残差分析を使用してデータモデルの適合をチェックすることです。ある時点で、数年前、私は制御された量の非線形性を持つ7つの次元で回帰問題をシミュレートしました。適合度の標準テストでは、非線形性が極端になるまで線形性を拒否しませんでした。

ブライマンは、シミュレーションの詳細を提供していません。彼は、彼の観察を理論的に正当化する論文を引用していますが、論文は未発表です。

ブリーマンの主張を裏付ける公開されたシミュレーション結果や理論論文を見た人はいますか?


1
極端な判断は難しく、すべての関数はある範囲にわたって線形に近づきます。テイラー級数分解からわかるように。なぜバーナムとアンダーソンのモデル選択への情報基準アプローチがこの問題にうまく対応しないのでしょうか?
パトリックマッキャン

回答:


11

ブライマンの説明に答えるシミュレーションを作成し、明らかな結果のみを見つけました。結果は、コンテキストと「極端な」が意味するものに依存します。

非常に多くのことを言うことができますがR、興味のある読者が自分の調査で使用するために簡単に修正されたコードによって実施される1つの例に限定させてください。このコードは、ほぼ直交するほぼ均一に分布した独立値で構成される設計行列を設定することから始まります(そのため、多重共線性の問題に陥ることはありません)。最初の2つの変数間の単一の2次(つまり、非線形)相互作用を計算します。これは、研究できる多くの種類の「非線形性」の1つにすぎませんが、少なくとも一般的な、よく理解されているものです。次に、すべてが標準化され、係数が比較可能になります。

set.seed(41)
p <- 7                                            # Dimensions
n <- 2^p                                          # Observations
x <- as.matrix(do.call(expand.grid, lapply(as.list(1:p), function(i) c(-1,1))))
x <- x + runif(n*p, min=-1, max=1)
x <- cbind(x, x.12 = x[,1]*x[,2])                 # The nonlinear part
x <- apply(x, 2, function(y) (y - mean(y))/sd(y)) # Standardization

ベースOLSモデル(非線形性なし)の場合、いくつかの係数と残留誤差の標準偏差を指定する必要があります。単位係数と同等のSDのセットは次のとおりです。

beta <- rep(c(1,-1), p)[1:p]
sd <- 1

1/411

gamma = 1/4          # The standardized interaction term
df <- data.frame(x)
df$y <- x %*% c(beta, gamma) + rnorm(n, sd=sd)
summary(df)
cor(df)*100
plot(df, lower.panel=function(x,y) lines(lowess(y~x)), 
     upper.panel=function(x,y) points(x,y, pch=".", cex=4))
summary(lm(df$y ~ x))

ここですべての出力を調べるのではなく、plotコマンドの出力を使用してこれらのデータを見てみましょう。

SPM

下の三角形の最も低いトレースは、相互作用(x.12)と従属変数(y)の間には本質的に線形関係がなく、他の変数との間にはわずかな線形関係がありyます。OLSの結果は次のことを確認しています。相互作用はほとんど重要ではありません。

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   0.0263     0.0828    0.32    0.751    
xVar1         0.9947     0.0833   11.94   <2e-16 ***
xVar2        -0.8713     0.0842  -10.35   <2e-16 ***
xVar3         1.0709     0.0836   12.81   <2e-16 ***
xVar4        -1.0007     0.0840  -11.92   <2e-16 ***
xVar5         1.0233     0.0836   12.24   <2e-16 ***
xVar6        -0.9514     0.0835  -11.40   <2e-16 ***
xVar7         1.0482     0.0835   12.56   <2e-16 ***
xx.12         0.1902     0.0836    2.27    0.025 *  

相互作用項のp値を非線形性のテストとして使用します。このp値が十分に低い場合(どれだけ低いかを選択できます)、非線形性が検出されます。

(ここで正確に探しているものについて微妙な点があります。実際には、単一の用語に焦点を合わせるのではなく、7 * 6/2 = 21の可能性のあるすべての二次相互作用と、さらに7つの二次項を調べる必要があるかもしれませんこれらの28の相互関連テストの修正を行いたいと思いますが、p値のシミュレートされた分布を表示するため、ここではこの修正を明示的に行いません。基づいて最後にヒストグラムあなたの重要性のしきい値。)

しかし、この分析を一度だけ行うのはやめましょう。何回もy繰り返して、同じモデルと同じ設計マトリックスに従って、各反復で新しい値を生成します。これを実現するために、関数を使用して1つの反復を実行し、交互作用項のp値を返します。

test <- function(gamma, sd=1) {
  y <- x %*% c(beta, gamma) + rnorm(n, sd=sd)
  fit <- summary(lm(y ~ x))
  m <- coef(fit)
  n <- dim(m)[1]
  m[n, 4]
}

シミュレーション結果をp値のヒストグラムとして提示しgamma、相互作用項の標準化係数を変化させます。まず、ヒストグラム:

h <- function(g, n.trials=1000) {
  hist(replicate(n.trials, test(g, sd)), xlim=c(0,1), 
       main=toString(g), xlab="x1:x2 p-value")
}
par(mfrow=c(2,2)) # Draw a 2 by 2 panel of results

今、仕事をする。シミュレーションごとに1000回の試行に数秒かかります(および相互作用項の指定された値から開始し、毎回連続して半分になる4つの独立したシミュレーション)。

temp <- sapply(2^(-3:0) * gamma, h)

結果:

ヒストグラム

xsdbeta1/41/81/16gamma1/2

1/321/4xsdbetasd

要するに、このようなシミュレーション、セットアップして正しい方法で解釈すれば、好きなものを証明できます。 つまり、個々の統計学者は、使用している手順の能力と弱点を個人的に深く理解するために、直面する特定の問題に適した独自の調査を実施する必要があることを示唆しています。


+1は、ちょうどFYI、私はあなたを見つけることが、あなたのデータを標準化するために、独自の関数を記述気づく?スケールが便利。
GUNG -復活モニカ

ありがとう、@ gung。私はそのような関数が存在すると確信していましたが、その名前を考えることができませんでした。私はRそのようなポインタを使うのは初めてで、いつも感謝しています。
whuber

1

それが質問に対する最終的な答えを与えるかどうかはわかりませんが、私はこれを見ていきます。特にポイント2。論文の付録A2の説明も参照してください。


ご覧いただきありがとうございますが、これらはOLS回帰ではなく、分布に適したアプリケーションのようです。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.