Analysieren von Winddaten mit R


12

Hallo, ich analysiere Winddaten, um die Energie einer Windkraftanlage abzuschätzen.
Ich habe 10 Jahre Winddaten genommen und ein Histogramm erstellt.
Meine zweite Stufe bestand darin, eine Weibull-Verteilung an die Daten anzupassen.
Ich habe R mit dem Paket verwendet lmom, um die Weibul-Form zu berechnen und zu skalieren. Dies ist der Code, den ich verwendet habe:

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

Es scheint eine gewisse Verzögerung zwischen den Daten und der Dichtefunktion zu geben. kannst du mir dabei helfen? Eine andere Frage ist, können Sie mir bei der Berechnung der jährlichen Energie aus der Dichtefunktion helfen?

Bildbeschreibung hier eingeben
Danke


Über das Bild, poste ein paar Bilder und setze einen Link - ich werde es in ein eingefügtes Bild umwandeln.

+1, interessante Frage, könnten Sie feststellen, dass Sie bald genug Ruf haben :)
mpiktas

2
Aus der Grafik geht hervor, dass das Problem nicht die Verzögerung ist. Was Sie geplant haben, ist ungefähr die Passform. Es scheint also, dass die Weibull-Verteilung für Ihre Daten nicht geeignet ist. Ich sehe, dass ein Haufen in der Nähe von Null ist. Haben Sie Nullwerte in Ihren Daten? In diesem Fall müssen Sie die Nullwerte separat modellieren. Der erste Vorschlag wäre also, Weibull für Werte ungleich Null zu versuchen. Auch warum Weibull, gibt es einen besonderen Grund, sich auf ähnliche Arbeiten zu beziehen?
mpiktas

1
Beachten Sie, dass „Verzögerung“ ein Begriff ist, der hauptsächlich bei der Analyse von Daten in der Zeit verwendet wird und sich auf eine Sache bezieht, die nach der anderen auftritt. Dies ist keine Verzögerung - es wird vielleicht genauer eine Verschiebung genannt - oder vielleicht ein Versatz -, aber eine Verschiebung ist wahrscheinlich häufiger bei Verteilungen, sie verschieben sich und skalieren.
Spacedman

1
Seien Sie vorsichtig, wenn Sie as.numeric (x) mit Faktoren verwenden. Sie möchten eigentlich as.numeric (as.character (x)) verwenden, um sicherzustellen, dass Sie den richtigen Zahlenwert für den Faktor erhalten.
Andy Clifton

Antworten:


5

lmomDie Funktion pelweipasst eine Weibull-Verteilung mit drei Parametern mit den Parametern Position , Skalierung und Form an. rweibullgeneriert Zufallszahlen für eine Zwei- Parameter-Weibull-Verteilung. Sie müssen den Standortparameter subtrahieren moments["zeta"]. Das sollte eine bessere Anpassung ergeben, aber es scheint nicht, dass es eine gute Anpassung für Ihre bestimmten Daten ergibt .

Ich stelle fest, dass http://www.reuk.co.uk/Wind-Speed-Distribution-Weibull.htm besagt, dass Windgeschwindigkeiten in den meisten Teilen der Welt mithilfe der Weibull-Verteilung modelliert werden können. Vielleicht hast du einfach Pech und lebst in einem Teil der Welt, in dem sie es nicht können!


Glaubst du, du kannst mir bei meiner zweiten Frage helfen: Berechnung der Windenergie basierend auf der Dichtefunktion?
Eliavs

2
Ich bin kein Physiker und kenne die notwendigen Gleichungen nicht, aber ich stelle mir vor, dass es sich um ein numerisches Integral über die Dichte handelt. Die integrate()Funktion von R kann dafür nützlich sein.
Uhr

Ich kenne die Gleichung, die mein Problem ist Ich möchte berechnen, wie viel Prozent der Zeit der Wind bei jeder Geschwindigkeit ist
Eliavs

Was ich bin Kannst du mir bei der Integration helfen -> danke
Eliavs

6

Ich habe Ihr Grundstück mit Daten von http://hawaii.gov/dbedt/ert/winddata/krab0192.txt nachgebildet (ich habe 1200 Messungen durchgeführt). Ich habe eine anständige Übereinstimmung der Daten, in der Regel mit Ihrem 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)

Wind Plot

Entschuldigung, ich bin nicht sicher, ob Ihr Problem sein könnte, aber ich denke, Sie sollten in der Lage sein, weibull an Ihre Daten anzupassen. Was mich misstrauisch macht, ist die Glockenkurve Ihres Dichtediagramms. Ich habe keine Ahnung, woher das kommt.

Hier sind die Momente, die ich generiert habe:

wind.moments

       l_1         l_2         t_3         t_4 
15.17287544  4.80372580  0.14963501  0.06954438

Momente

     zeta      beta     delta 
 0.516201 16.454233  1.745413 

WTR zur jährlichen Ausgabe: Ich nehme an, ich würde diskrete Werte für die Wahrscheinlichkeitsdichtefunktion erzeugen, diese Werte mit der Ausgabefunktion multiplizieren und zusammenfassen. Alternativ können Sie einfach Ihre Rohdaten verwenden, die Werte mit der Ausgabefunktion multiplizieren, sie aufsummieren und den Jahresdurchschnitt berechnen. Sie sollten die Saisonalität auf geeignete Weise kontrollieren (z. B. stellen Sie sicher, dass Sie ganze Jahre verwenden oder entsprechend gewichten). .

Hier ist die unkontrollierte Ausgabe (unter Verwendung der Formel von http://www.articlesbase.com/diy-articles/determining-wind-turbine-annual-power-output-a-simple-formula-based-upon-blade-diameter- und-durchschnittliche-Windgeschwindigkeit-an-deinem-Standort-513080.html )

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

4

Hier ist ein neuer Beitrag bei SO zu Windkraftanlagen. Meine Antwort auf diesen Link enthält drei Links, die Sie interessieren könnten:

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

Ich habe gerade einen der Weibull-Links in der obigen SO-Antwort überprüft. Aus irgendeinem Grund ist die Verbindung unterbrochen. Hier sind einige Links, die dieselben grundlegenden Informationen enthalten:

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

Auch aus der Kraft des Windes ist die Saisonalität offensichtlich.

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben


1

Ich bin mir nicht sicher, ob jemand bereits darauf hingewiesen hat, aber Pelwei kann tatsächlich gezwungen werden, als 2-Parameter-Weibull-Funktion zu arbeiten, indem eine feste Grenze hinzugefügt wird.

Insead anrufen moments<-pelwei(wind.moments)solltest du einfach anrufenmoments<-pelwei(wind.moments,bound=0)

Sie können jederzeit überprüfen, wie hoch der Zeta-Wert ist. Wenn es nicht 0 ist und Sie Dweibull verwenden, müssen Sie etwas dagegen tun.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.