ブライマンの説明に答えるシミュレーションを作成し、明らかな結果のみを見つけました。結果は、コンテキストと「極端な」が意味するものに依存します。
非常に多くのことを言うことができますが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 / 41− 1
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
コマンドの出力を使用してこれらのデータを見てみましょう。
下の三角形の最も低いトレースは、相互作用(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)
結果:
x
sd
beta
1 / 41 / 81 / 16gamma
1 / 2
1 / 321 / 4x
sd
beta
sd
要するに、このようなシミュレーションは、セットアップして正しい方法で解釈すれば、好きなものを証明できます。 つまり、個々の統計学者は、使用している手順の能力と弱点を個人的に深く理解するために、直面する特定の問題に適した独自の調査を実施する必要があることを示唆しています。