Breiman'ın tanımına cevap verecek ve sadece açık olan bir simülasyon yarattım: sonuç, bağlama ve "aşırı" ile ne kastedildiğine bağlıdır.
Çok fazla şey söylenebilir, ancak R
ilgilenen okuyucuların kendi araştırmalarında kullanmaları için kolayca değiştirilmiş kodlar aracılığıyla yapılan bir örnekle sınırlamama izin verin . Bu kod, yaklaşık olarak dikgen (yaklaşık olarak çoklu-doğrusallık problemlerine girmememiz için) yaklaşık olarak homojen dağılmış bağımsız değerlerden oluşan bir tasarım matrisi kurarak başlar. İlk iki değişken arasında tek bir kuadratik (yani doğrusal olmayan) bir etkileşimi hesaplar: bu, üzerinde çalışılabilecek birçok "doğrusal olmayan" türden yalnızca biridir, ancak en azından ortak, iyi anlaşılmış bir durumdur. Sonra katsayılar karşılaştırılabilir olacak şekilde her şeyi standartlaştırır:
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
Temel OLS modeli için (doğrusal olmayan), bazı katsayıları ve artık hatanın standart sapmasını belirtmeliyiz. İşte bir dizi birim katsayı ve karşılaştırılabilir bir SD:
beta <- rep(c(1,-1), p)[1:p]
sd <- 1
Durumu göstermek için, işte simülasyonun kodlanmış bir yinelemesi. Bağımlı değişkeni üretir, değerlerini özetler, tüm değişkenlerin tam korelasyon matrisini (etkileşim dahil) görüntüler ve bir scatterplot matrisini görüntüler. Sonra OLS regresyonunu gerçekleştirir. Aşağıda, etkileşim katsayısı diğer katsayıların herhangi birinden büyük ölçüde daha küçüktür (hepsi veya eşittir ), bu nedenle "aşırı" olarak adlandırmak zor olacaktır: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))
Buradaki tüm çıktıları beklemek yerine , komutun çıktısını kullanarak şu verilere bakalımplot
:
Alttaki üçgendeki alçak izler, esasen etkileşim ( x.12
) ile bağımlı değişken ( y
) arasındaki doğrusal ilişkiyi ve diğer değişkenler arasındaki mütevazı doğrusal ilişkiyi göstermektedir y
. OLS sonuçları bunu doğrular; Etkileşim neredeyse hiç önemli değil:
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 *
Etkileşim teriminin p değerini, doğrusal olmayan bir test olarak kabul edeceğim: bu p değeri yeterince düşük olduğunda (ne kadar düşük olduğunu seçebilirsiniz), doğrusal olmayanlığı tespit ettik.
(Burada tam olarak aradığımız şey hakkında bir incelik var. Uygulamada, bu tür ikinci dereceden etkileşimlerin yanı sıra, tek bir terime odaklanmak yerine, belki de 7 ikinci dereceden tüm terimleri incelememiz gerekebilir. Burada yapıldığı gibi, birbiriyle bağlantılı bu 28 test için bir düzeltme yapmak isteriz, bu düzeltmeyi burada açıkça yapmam çünkü bunun yerine p-değerlerin simüle edilmiş dağılımını gösteriyorum. dayalı sonunda histogramlar senin önemi eşikleri.)
Ancak bu analizi sadece bir kez yapmayalım; y
Aynı modele ve aynı tasarım matrisine göre her yinelemede yeni değerler üreterek birçok kez yapalım . Bunu başarmak için, bir yineleme gerçekleştirmek ve etkileşim teriminin p-değerini döndürmek için bir işlev kullanıyoruz:
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]
}
Simülasyon sonuçlarını gamma
, etkileşim teriminin standartlaştırılmış katsayısını değiştiren p-değerlerinin histogramları olarak sunmayı seçiyorum . İlk olarak, histogramlar:
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
Şimdi işi yapmak için. Simülasyon başına 1000 deneme için birkaç saniye sürer (ve etkileşim teriminin verilen değerinden başlayarak ve her seferinde art arda yarıya indiren dört bağımsız simülasyon):
temp <- sapply(2^(-3:0) * gamma, h)
Sonuçlar:
Sağ alttan geriye doğru okuyan bu grafikler, bu tasarım matrisi x
için, bu standart hata sapması sd
için ve bu standart katsayılar için beta
, OLS'nin standart bir etkileşim tespit edebildiğini (diğer katsayıların boyutunun sadece dörtte biri) tespit edebiliyor. (güvenilir bir şekilde, zamanın% 80'inden fazlası (p değeri için% 5'lik bir eşik kullanılması - şimdi görmezden geldiğim çoklu karşılaştırmaların düzeltilmesiyle ilgili kısa tartışmayı hatırlayın); genellikle bir etkileşim boyutu algılayabilir (zamanın yaklaşık% 20); bazen boyutunda bir etkileşimi algılar1 / 41 / 81 / 16gamma
1 / 2
1 / 321 / 4x
sd
beta
sd
Kısacası, bunun gibi bir simülasyon , onu kurup doğru şekilde yorumlamanız durumunda ne istersen kanıtlayabilir. Bu, bireysel istatistikçilerin, kullandıkları prosedürlerin yeteneklerini ve zayıflıklarını kişisel ve derinlemesine anlayabilmek için karşılaştıkları belirli sorunlara uygun kendi araştırmalarını yapmaları gerektiğini ileri sürmektedir.