2009-10-28 3 views
2

D'après un livre de simulation par ordinateur, j'ai obtenu cette équation.Comment utiliser le corrélogramme pour estimer la variance?

alt text http://i37.tinypic.com/x2ugxz.jpg

La première consiste à calculer correlogram, la seconde est de savoir comment utiliser corrélogramme pour estimer la variance.

L'approche commune pour estimer la variance d'observation n'est souvent pas incorrecte dans la simulation par ordinateur parce que les observations sont souvent liées.

Ma question est, la valeur que j'ai calculée à partir de mon programme est très grande, donc il ne pourrait pas être correct.

Je pense que parce que r [k] va se rapprocher de 0 quand k devient plus grand, la deuxième équation donnera une valeur assez grande, alors peut-être que l'équation est incorrecte?

Comme vous avez demandé, voici le programme complet (écrit en Python):

@property 
def autocorrelation(self): 
    n = self.packet_sent 
    mean = self.mean 
    waiting_times = self.waiting_times 
    R = [ sum([(x - mean) ** 2 for x in waiting_times[:-1]])/n ] 
    #print R 

    for k in range(1, n/4 + 1): 
     R.append(0) 
     for i in range(0, n - k): 
      R[k] += (waiting_times[i] - mean) * (waiting_times[i + k] - mean) 
     R[k] /= n 

    auto_cor = [r/R[0] for r in R] 
    return auto_cor 

@property 
def standard_deviation_wrong(self): 
    '''This must be a wrong method''' 
    s_x = self.standard_deviation_simple 
    auto_cor = self.autocorrelation 
    s = 0 
    n = self.packet_sent 
    for k, r in enumerate(auto_cor[1:]): 
     s += 1 - (k + 1.0) * r/n 
     #print "%f %f %f" % (k, r, s) 
    s *= 2 
    s += 1 
    s = ((s_x ** 2) * s) ** 0.5 
    return s 
+0

difficile à dire sans les fonctions réelles que vous avez programmées. – nlucaroni

+0

Avez-vous vérifié dans d'autres logiciels? Les formules décrivent-elles une limite supérieure? Pourriez-vous nous donner un lien vers le livre ou une autre source? –

+0

Nous devons voir les données. Lorsque votre variance approche zéro, r [k] approchera l'infini. – Paul

Répondre

1

Le corrélogramme peut être calculé avec la fonction acf() aussi.

-k

+0

Voulez-vous dire acf() en langage R? J'ai essayé ça. – ablmf

+0

Oh, ce que j'avais à l'esprit, c'est que vous pourriez essayer d'utiliser acf() (espérons que sa mise en œuvre est correcte) pour affiner l'espace de recherche concernant la cause de vos bogues. – knguyen

Questions connexes