Question:
Pourquoi le test de Breusch-Pagan est-il significatif sur des données simulées conçues pour ne pas être hétéroscédastiques?
Dail
2011-08-27 15:35:46 UTC
view on stackexchange narkive permalink

Je teste les résidus d'une régression linéaire en utilisant le test Breusch-Pagan pour détecter l'hétéroscédasticité.

Voici le graphique des résidus: Residuals

et voici le code R:

  > library (lmtest) > > mod <- lm (rnorm (1000) ~ 1) > > Baganch-student bptest (mod. testdata: mod BP = 0, df = 0, p-value < 2.2e-16  

Quelqu'un pourrait-il me dire pourquoi il rejette l'hypothèse nulle des erreurs homoscédastiques?

L'intrigue n'a pas l'air hétéroscédastique.

MODIFIER:

Cependant, l'intrigue est un exemple, j'ai deux listes de prix ( priceA et priceB ), je dois vérifier si les résidus générés par une régression linéaire de ces deux listes: lm (priceA ~ priceB + 0) I need zero intercept sont homescedastic ou non. Quelqu'un pourrait-il me donner un petit exemple? La longueur de chaque liste de prix est de 750.

MODIFIER:

J'obtiens également:

BP = 67.4362, df = 1 , p-value < 2.2e-16

avec ce graphique new charts

Est-ce que c'est homoscédastique? J'ai tracé les résidus.

@Wolfgang , j'obtiens ce résultat en suivant l'exemple que vous avez publié.

  > summary (mod) $ r .squared * 750 [1] 681.0114  
À moins que l'indice ne soit une * quantité significative * (par exemple, directement liée à une variable de temps), ce graphique ne vous en dit pas beaucoup. Vous pouvez commencer par regarder un graphique des résidus par rapport aux valeurs ajustées.
@cardinal J'ai besoin d'une méthode pour vérifier si mes résidus sont homo / hétéro scédastiques. Mon objectif n'est pas de voir le résultat tracer quelque chose. Je trace le graphique ci-dessus car j'obtiens une valeur p étrange, mais je n'ai besoin d'une réponse que si le modèle est homoscédastique. Cette méthode pourrait-elle me convenir? j'ai une matrice avec des prix donc je fais: lm (prix [, 1] ~ prix [, 2] +0) J'ai besoin de zéro interception .... si je mets +0 j'obtiens toujours p-value <2.2e-16
Pourquoi voulez-vous que l'interception soit 0?
@Wolfgang, parce que si une action augmente de +2, l'autre devrait être la même.
Malheureusement, je ne comprends pas vraiment votre raisonnement. Si vous voulez examiner si la variance des valeurs résiduelles (lors de la régression de `prix [, 1]` sur `prix [, 2]`) change en fonction de `prix [, 2]`, alors je vous suggère de faire ` bptest (lm (prix [, 1] ~ prix [, 2])) `.
Est-ce un graphique des résidus du modèle «lm (prix [, 1] ~ prix [, 2])»? Dans ce cas, vous n'avez besoin d'aucun test pour vous dire que les résidus ne ressemblent pas à ce qu'ils sont censés ressembler. Ils devraient se disperser au hasard autour de 0 sans motif apparent. Ce n'est clairement pas le cas. Il existe une forte autocorrélation dans ces résidus. Je dirais que l'hétéroscédasticité est le moindre de vos problèmes.
@Wolfgang, OUI, lm (prix [, 1] ~ prix [, 2]) pensez-vous que je dois utiliser un autre test pour vérifier l '"autocorrélation" au lieu de SI les résidus sont homoscédastiques / hétéroscédastiques? Dans ce cas quelle méthode me conseillez-vous? Évidemment, je dois le faire par programme, donc je ne peux pas vérifier chaque graphique visuellement. Les contrôles d'autocorrélation devraient être bons pour moi?
Vous n'avez pas besoin de tester l'autocorrélation. Il est évident d'après le graphique qu'il existe une autocorrélation.
Trois réponses:
#1
+16
Wolfgang
2011-08-27 16:32:11 UTC
view on stackexchange narkive permalink

Non, les données ne sont pas hétéroscédastiques (comme vous les avez simulées). Avez-vous remarqué les 0 degrés de liberté du test? C'est une indication que quelque chose ne va pas ici. Le test B-P prend les carrés des résidus du modèle et teste si les prédicteurs du modèle (ou tout autre prédicteur que vous spécifiez) peuvent expliquer des quantités substantielles de variabilité de ces valeurs. Puisque vous n'avez que l'interception dans le modèle, il ne peut pas tenir compte de la variabilité par définition.

Jetez un œil à: http://en.wikipedia.org/wiki/Breusch-Pagan_test

Assurez-vous également de lire help (bptest) . Cela devrait aider à clarifier les choses.

Une chose qui ne va pas ici est que la fonction bptest () ne teste apparemment pas ce cas errant et jette un minuscule valeur p. En fait, si vous regardez attentivement le code sous-jacent à la fonction bptest () , c'est essentiellement ce qui se passe:

  format.pval (pchisq (0,0), digits = 4)  

qui donne "< 2.2e-16" . Ainsi, pchisq (0,0) renvoie 0 et cela est transformé en "< 2.2e-16" par format.pval () . Dans un sens, tout est correct, mais il serait probablement utile de tester zéro dfs dans bptest () pour éviter ce genre de confusion.

EDIT

Il y a encore beaucoup de confusion concernant cette question. Peut-être que cela aide vraiment à montrer ce que fait réellement le test B-P. Voici un exemple. Tout d'abord, simulons certaines données homoscédastiques. Ensuite, nous ajustons un modèle de régression avec deux prédicteurs. Et puis nous effectuons le test BP avec la fonction bptest () .

  library (lmtest) n <- 100 x1i <- rnorm (n) x2i <- rnorm (n) yi <- rnorm (n) mod <- lm (yi ~ x1i + x2i) bptest (mod)  

Alors, que se passe-t-il vraiment? Tout d'abord, prenez les carrés des résidus basés sur le modèle de régression. Prenez ensuite $ n \ fois R ^ 2 $ lors de la régression de ces carrés des résidus sur les prédicteurs qui étaient inclus dans le modèle d'origine (notez que la fonction bptest () utilise les mêmes prédicteurs que dans le modèle d'origine, mais on peut aussi utiliser ici d'autres prédicteurs si l'on soupçonne que l'hétéroscédasticité est fonction d'autres variables). C'est la statistique de test pour le test B-P. Sous l'hypothèse nulle d'homoscédasticité, cette statistique de test suit une distribution du chi carré avec des degrés de liberté égaux au nombre de prédicteurs utilisés dans le test (sans compter l'interception). Voyons donc si nous pouvons obtenir les mêmes résultats:

  e2 <- resid (mod) ^ 2bp <- summary (lm (e2 ~ x1i + x2i)) $ r.squared * nbppchisq (bp, df = 2, lower.tail = FALSE)  

Oui, ça marche. Par chance, le test ci-dessus peut s'avérer significatif (ce qui est une erreur de type I puisque les données simulées sont homoscédastiques), mais dans la plupart des cas, il ne sera pas significatif.

Je suis consommé en ce moment. J'ai deux vecteurs avec de nombreux prix (cours des actions). Puis-je tester si leurs résidus sont constants avec cette méthode ou non? pouvez-vous me donner un petit exemple? Merci beaucoup!
Lorsque la variance des résidus est hétéroscédastique, cela signifie que la variance change en fonction de l'une des variables prédictives, en fonction d'une autre variable non incluse dans le modèle, et / ou qu'elle évolue dans le temps. Par exemple, comme Karl l'a déjà souligné, vous pouvez utiliser l'indice des observations comme variable explicative pour tester si la variance change avec le temps.
avec index voulez-vous dire un vecteur comme: c (1: N) où N est la longueur de mon vecteur de résidus?
Oui. Comme Karl l'a montré.
: Wolfgang BP teste l'hypothèse selon laquelle toutes les «informations» ont été extraites des prédicteurs. C'est loin de tester minutieusement la variance non constante, car la variance non constante peut provenir d'un certain nombre de sources. Veuillez consulter mon commentaire sur http://stats.stackexchange.com/questions/14842/how-to-check-if-the-volatility-is-stationary
@IrishStat Si le test est significatif, cela suggère une hétéroscédasticité en fonction des prédicteurs utilisés pour le test. C'est tout ce que fait le test. Les raisons réelles de l'hétéroscédasticité sont un autre problème. Il se peut que la variance des erreurs change vraiment, mais cela pourrait, par exemple, être également dû à des prédicteurs omis.
@Wolfgang si j'utilise bptest (lm (prix [, 1] ~ prix [, 2])) Je continue à obtenir: BP = 67.4362, df = 1, p-value <2.2e-16, jetez un œil au nouveau graphique au dessus.
#2
+4
Karl
2011-08-27 16:31:48 UTC
view on stackexchange narkive permalink

Les résultats ne sont pas significatifs sans un prédicteur (notez df = 0 ). Hétéroscédastique signifie que la variance n'est pas constante, mais pas constante par rapport à quoi ? Peut-être avez-vous en tête l'indice (ordre de mesure)? Alors vous devriez faire

  y <- rnorm (1000) x <- 1: 1000mod <- lm (y ~ x) bptest (mod) # J'obtiens p = 0.59  

Si vous avez juste un vecteur de nombres, la question "La variance est-elle constante?" Par exemple, considérons un mélange de deux distributions normales avec des variances différentes:

  v <- sample (c (1,10), 100, repl = TRUE) y <- rnorm (100, 0 , v)  

$ \ text {var} (y | v) $ n'est pas constant, mais dépend de $ v $. Mais inconditionnellement, $ \ text {var} (y) $ n'est qu'un nombre.

quels sont les éléments y?
Je suivais votre exemple; édité pour être plus clair
le dernier exemple semble constant, j'obtiens: BP = 0,0133, df = 1, p-value = 0,9083
cependant, comme je l'ai dit, j'ai besoin de ce test pour vérifier les résidus générés par une régression à deux listes de prix lm (priceA ~ PricesB) Comment puis-je utiliser cette méthode pour vérifier leurs résidus?
et si je fais: newMod <- lm (resid (mod) ~ c (1,750)) où 750 est la longueur du vecteur des prix. Ensuite, j'ai essayé lm (resid (mod) ~ rep (1,750)) J'obtiens toujours une valeur p = 1 est sûrement une question stupide mais, pourriez-vous expliquer la raison? Merci beaucoup!
Pour le modèle `mod <- lm (tarifsA ~ Prix)`, je pense que vous voulez juste `bptest (prix ~ Prix)`.
hmmm, dans ce cas j'ai: les données de test de Breusch-Pagan étudiées: prix [, 1] ~ prix [, 2] BP = 67,4362, df = 1, valeur p <2,2e-16
sinon Si je teste: bptest (resid (mod) ~ c (1: 750)) j'obtiens: les données de test de Breusch-Pagan étudiées: resid (mod) ~ c (1: 750) BP = 2.0368, df = 1, valeur p = 0,1535 c'est correct car j'ai fait le test sur un modèle qui est sûrement homoscédastique. Alors maintenant, seul le test avec "index" semble bien fonctionner
Karl, si j'utilise l '«index» sur le modèle qui a les résidus que je trace ci-dessus, j'obtiens 2.2e-16 qui est correct parce que les données sont hétéroscédastiques ... alors maintenant, comment l'utiliser correctement? avec ou sans index?
@Dail Le test B-P prend les résidus * au carré * pour la régression. J'ai mis à jour ma réponse pour fournir plus de détails et pour vraiment montrer ce qui se passe. J'espère que cela clarifiera les choses pour vous.
#3
  0
IrishStat
2011-08-28 06:29:01 UTC
view on stackexchange narkive permalink

: Dail Pour tester la variance non constante, il faut comprendre l'hypothèse derrière les tests statistiques populaires. vous devez suivre la recette i, e, les tests que j'ai décrits dans Comment vérifier si la volatilité est stationnaire? pour vérifier complètement qu'une série ne peut pas être prouvée comme ayant une variance non constante. Les six tests que j'ai décrits doivent aboutir à l'acceptation de l'hypothèse nulle de variance non constante. Le rejet par l'un des 6 tests suggère que la variance d'erreur est en effet non constante.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...