Analyse des données de vent avec R

12

Salut, je suis en train d'analyser les données de vent pour estimer l'énergie d'une éolienne.
J'ai pris 10 ans de données de vent et tracé un histogramme;
ma deuxième étape a été d'adapter une distribution de Weibull aux données.
J'ai utilisé R avec le package lmompour calculer la forme et l'échelle de Weibul, voici le code que j'ai utilisé:

>library(lmom)    
wind.moments<-samlmu(as.numeric(pp$WS))      
moments<-pelwei(wind.moments)     
x.wei<-rweibull(n=length(pp$WS), shape=moments["delta"], scale=moments["beta"])    
hist(as.numeric(pp$WS), freq=FALSE)    
lines(density(x.wei), col="red", lwd=4)    

Il semble qu'il y ait un certain décalage entre les données et la fonction de densité; Peux-tu m'aider avec ceci? Une autre question est: pouvez-vous m'aider à calculer l'énergie annuelle à partir de la fonction de densité?

entrez la description de l'image ici
Merci

eliavs
la source
À propos de l'image, postez sur un hébergement d'images et mettez un lien - je vais le convertir en une image collée.
+1, question intéressante, vous pourriez trouver que bientôt vous aurez assez de réputation :)
mpiktas
2
à en juger par le graphique, le problème n'est pas le décalage. Ce que vous avez tracé est à peu près la qualité de l'ajustement. Il semble donc que la distribution de Weibull ne soit pas appropriée pour vos données. Je vois qu'il y a un tas près de zéro, avez-vous des valeurs nulles dans vos données? Dans ce cas, vous devrez modéliser les valeurs nulles séparément. La première suggestion serait donc d'essayer Weibull pour des valeurs non nulles. Aussi pourquoi Weibull, y a-t-il une raison particulière, une référence à des travaux similaires peut-être?
mpiktas
1
notons que le «décalage» est un terme utilisé principalement dans l'analyse des données dans le temps, se référant à une chose se produisant après l'autre. Ce n'est pas un décalage - c'est peut-être plus précisément appelé un décalage - ou peut-être un décalage - mais le décalage est probablement plus courant pour les distributions, elles se décalent et évoluent.
Spacedman
1
soyez prudent lorsque vous utilisez as.numeric (x) avec des facteurs; vous voulez réellement utiliser as.numeric (as.character (x)) pour vous assurer d'obtenir la bonne valeur numérique pour le facteur.
Andy Clifton

Réponses:

5

lmomLa fonction pelweis'adapte à une distribution de Weibull à trois paramètres, avec des paramètres d' emplacement , d'échelle et de forme. rweibullgénère des nombres aléatoires pour une distribution de Weibull à deux paramètres. Vous devez soustraire le paramètre d'emplacement moments["zeta"]. Cela devrait donner un meilleur ajustement, mais il ne semble pas que cela donnera un bon ajustement à vos données particulières.

Je remarque que http://www.reuk.co.uk/Wind-Speed-Distribution-Weibull.htm dit "Les vitesses du vent dans la plupart du monde peuvent être modélisées en utilisant la distribution Weibull.". Peut-être que vous n'avez pas de chance et que vous vivez dans une partie du monde où ils ne peuvent pas!

un arrêt
la source
pensez-vous que vous pouvez m'aider avec ma deuxième question: calculer l'énergie éolienne en fonction de la fonction de densité?
eliavs
2
Je ne suis pas physicien et je ne connais pas les équations nécessaires, mais j'imagine que cela impliquera une intégrale numérique sur la densité. La integrate()fonction de R peut être utile pour cela.
onestop
Je connais l'équation de mon problème: je veux calculer le pourcentage de temps où le vent est à chaque vitesse
eliavs
ce que je suis, pouvez-vous m'aider avec l'intégration -> merci
eliavs
6

J'ai recréé votre intrigue avec des données de http://hawaii.gov/dbedt/ert/winddata/krab0192.txt (j'ai pris les 1200 mesures). J'ai obtenu un ajustement décent des données, généralement en utilisant votre code:

library(lmom)

daten <- read.delim("wind.txt")
wind.avg <- na.omit(as.numeric(daten[,"X12"]))
wind.moments<-samlmu(wind.avg)
moments<-pelwei(wind.moments)
x.wei<-rweibull(n=length(wind.avg), shape=moments["delta"], scale=moments["beta"])
hist(as.numeric(wind.avg), freq=FALSE)
lines(density(x.wei), col="red", lwd=4)

Parcelle de vent

Désolé, je ne suis pas sûr que votre problème puisse être, mais je pense que vous devriez pouvoir adapter Weibull à vos données. Ce qui me rend suspect, c'est la courbe en cloche de votre graphique de densité, je ne sais pas d'où cela vient.

Voici les moments que j'ai générés:

wind.moments

       l_1         l_2         t_3         t_4 
15.17287544  4.80372580  0.14963501  0.06954438

des moments

     zeta      beta     delta 
 0.516201 16.454233  1.745413 

WTR à la sortie annuelle: Je suppose que je générerais des valeurs discrètes pour la fonction de densité de probabilité, multiplierais ces valeurs par la fonction de sortie et les résumerais. Alternativement, vous pouvez simplement utiliser vos données brutes, multiplier les valeurs avec la fonction de sortie, les résumer et calculer la moyenne annuelle, vous devez contrôler la saisonnalité de manière appropriée (par exemple, assurez-vous d'utiliser des années entières ou de pondérer en conséquence) .

Voici la sortie non contrôlée (en utilisant la formule de http://www.articlesbase.com/diy-articles/determining-wind-turbine-annual-power-output-a-simple-formula-based-upon-blade-diameter- et-vitesse-de-vent-moyenne-à-votre-emplacement-513080.html )

years  <- length(wind.avg)/365
diameter <- 150
Power = (0.01328*diameter^2)*((wind.avg)^3)
(annual.power <- sum(Power)/years)
[1] 791828306
Owe Jessen
la source
4

Voici un article récent à SO sur les éoliennes. Ma réponse sur ce lien contient trois liens qui pourraient vous intéresser:

/programming/4843194/r-language-sorting-data-into-ranges-averaging-ignore-outliers/4844783#4844783

Je viens de vérifier l'un des liens Weibull dans la réponse SO ci-dessus. Pour une raison quelconque, le lien est en panne. Voici quelques liens qui fournissent les mêmes informations de base:

http://www.gso.uri.edu/ozone/

http://www.weru.ksu.edu/new_weru/publications/pdf/Comparison%20of%20the%20Weibull%20model%20with%20measured%20wind%20speed%20distributions%20for%20stochastic%20wind%20genera.pdf

http://www.kfupm.edu.sa/ri/publication/cer/41_JP_Weibull_parameters_for_wind_speed_distribution_in_Saudi_Arabia.pdf

http://journal.dogus.edu.tr/13026739/2008/cilt9/sayi1/M00195.pdf

http://www.eurojournals.com/ejsr_26_1_01.pdf

De plus, à partir de la puissance générée par le vent, la saisonnalité est évidente.

entrez la description de l'image ici

entrez la description de l'image ici

bill_080
la source
1

Je ne sais pas si quelqu'un a déjà fait valoir ce point, mais pelwei peut en fait être forcé de fonctionner comme une fonction weibull à 2 paramètres en ajoutant une limite fixe.

Au lieu d'appeler, moments<-pelwei(wind.moments)vous devez simplement appelermoments<-pelwei(wind.moments,bound=0)

vous pouvez toujours vérifier quelle est la valeur zêta. Si ce n'est pas 0 et que vous utilisez dweibull, vous devez faire quelque chose.

Chris
la source