Difficulté de tester la linéarité en régression

21

Dans la modélisation statistique: les deux cultures, Leo Breiman écrit

La pratique appliquée actuelle consiste à vérifier l'ajustement du modèle de données à l'aide de tests d'adéquation et d'analyse résiduelle. À un moment donné, il y a quelques années, j'ai mis en place un problème de régression simulé en sept dimensions avec une quantité contrôlée de non-linéarité. Les tests standard de qualité d'ajustement n'ont rejeté la linéarité que lorsque la non-linéarité était extrême.

Breiman ne donne pas les détails de sa simulation. Il fait référence à un article qui, selon lui, donne une justification théorique de son observation, mais l'article n'est pas publié.

Quelqu'un a-t-il vu un résultat de simulation publié ou un document théorique pour appuyer la demande de Brieman?

John D. Cook
la source
1
Extrême est difficile à juger, chaque fonction approche linéaire sur une certaine plage; comme nous le savons par la décomposition de la série Taylor. Pourquoi l'approche par critère d'information de Burnham et Anderson pour la sélection des modèles ne servirait-elle pas bien ce problème?
Patrick McCann,

Réponses:

11

J'ai créé une simulation qui répondrait à la description de Breiman et n'ai trouvé que l'évidence: le résultat dépend du contexte et de ce que l'on entend par «extrême».

Beaucoup pourrait être dit, mais permettez-moi de le limiter à un seul exemple mené au moyen de Rcode facilement modifiable que les lecteurs intéressés pourront utiliser dans leurs propres investigations. Ce code commence par mettre en place une matrice de conception composée de valeurs indépendantes approximativement uniformément réparties qui sont approximativement orthogonales (afin que nous n'entrions pas dans des problèmes de multicolinéarité). Il calcule une seule interaction quadratique (c'est-à-dire non linéaire) entre les deux premières variables: ce n'est là qu'un des nombreux types de "non-linéarités" qui pourraient être étudiées, mais au moins c'est une commune, bien comprise. Ensuite, il standardise tout pour que les coefficients soient comparables:

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

Pour le modèle OLS de base (sans non-linéarité), nous devons spécifier certains coefficients et l'écart-type de l'erreur résiduelle. Voici un ensemble de coefficients unitaires et un écart-type comparable:

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))

Plutôt que de parcourir toutes les sorties ici, regardons ces données en utilisant la sortie de la plotcommande:

SPM

Les traces inférieures sur le triangle inférieur ne montrent essentiellement aucune relation linéaire entre l'interaction ( x.12) et la variable dépendante ( y) et des relations linéaires modestes entre les autres variables et y. Les résultats de l'OLS le confirment; l'interaction est à peine significative:

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 *  

Je prendrai la valeur de p du terme d'interaction comme test de non-linéarité: lorsque cette valeur de p est suffisamment faible (vous pouvez choisir à quel point elle est faible), nous aurons détecté la non-linéarité.

(Il y a ici une subtilité dans ce que nous recherchons exactement. En pratique, nous pourrions avoir besoin d'examiner toutes les interactions quadratiques possibles 7 * 6/2 = 21, ainsi que peut-être 7 termes quadratiques supplémentaires, plutôt que de nous concentrer sur un seul terme comme cela est fait ici. Nous voudrions faire une correction pour ces 28 tests interdépendants. Je ne fais pas explicitement cette correction ici, car à la place j'affiche la distribution simulée des valeurs de p. Vous pouvez lire les taux de détection directement à partir de les histogrammes à la fin en fonction de vos seuils de signification.)

Mais ne faisons pas cette analyse une seule fois; faisons-le beaucoup de fois, générant de nouvelles valeurs de yà chaque itération selon le même modèle et la même matrice de conception. Pour ce faire, nous utilisons une fonction pour effectuer une itération et renvoyer la valeur de p du terme d'interaction:

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]
}

J'ai choisi de présenter les résultats de la simulation sous forme d'histogrammes des valeurs de p, en faisant varier le coefficient normalisé gammadu terme d'interaction. Tout d'abord, les histogrammes:

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

Maintenant, faisons le travail. Cela prend quelques secondes pour 1000 essais par simulation (et quatre simulations indépendantes, en commençant par la valeur donnée du terme d'interaction et en la divisant par deux à chaque fois)

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

Les resultats:

Histogrammes

xsdbeta1/41/81/16gamma1/2

1/321/4xsdbetasd

En bref, une simulation comme celle-ci peut prouver tout ce que vous aimez si vous la configurez et l'interprétez correctement. Cela suggère que le statisticien individuel devrait mener ses propres explorations, adaptées aux problèmes particuliers auxquels il est confronté, afin de parvenir à une compréhension personnelle et approfondie des capacités et des faiblesses des procédures qu'il utilise.

whuber
la source
+1, juste pour info, je remarque que vous écrivez votre propre fonction pour standardiser vos données, vous pouvez trouver ? Échelle utile.
gung - Réintégrer Monica
Merci, @gung. J'étais sûr qu'une telle fonction existait mais je ne pouvais pas penser à son nom. Je suis assez nouveau Ret apprécie toujours ces pointeurs.
whuber
1

Je ne sais pas , il donne une réponse définitive à la question, mais je donne un coup d' oeil à ce . Surtout le point 2. Voir également la discussion à l'annexe A2 du document .

Zos
la source
Merci d'avoir cherché, mais il semble que ce soient des applications adaptées à la distribution plutôt qu'une régression OLS.
whuber