Analiza danych wiatru za pomocą R.

12

Cześć, analizuję dane dotyczące wiatru w celu oszacowania energii z turbiny wiatrowej.
Wziąłem 10 lat danych wiatrowych i wykreśliłem histogram;
moim drugim etapem było dopasowanie rozkładu Weibulla do danych.
Użyłem R z pakietem lmomdo obliczenia kształtu i skali Weibula. Użyłem tego kodu:

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

Wydaje się, że istnieje pewne opóźnienie między danymi a funkcją gęstości; czy możesz mi z tym pomóc? Innym pytaniem jest, czy możesz mi pomóc w obliczeniu rocznej energii z funkcji gęstości?

wprowadź opis zdjęcia tutaj
Dziękuję Ci

eliavs
źródło
O zdjęciu, opublikuj na jakimś hostingu obrazów i umieść link - przekonwernę go na wklejone zdjęcie.
+1, ciekawe pytanie, może się okazać, że wkrótce będziesz miał wystarczającą reputację :)
mpiktas
2
sądząc z wykresu, problemem nie jest opóźnienie. To, co nakreśliłeś, to w przybliżeniu dobroć dopasowania. Wygląda więc na to, że dystrybucja Weibulla nie jest odpowiednia dla twoich danych. Widzę, że jest pęczek w pobliżu zera, czy masz zerowe wartości w swoich danych? W takim przypadku musisz osobno modelować wartości zerowe. Tak więc pierwszą sugestią byłoby wypróbowanie Weibulla dla niezerowych wartości. Także dlaczego Weibull, czy istnieje jakiś szczególny powód, może jakieś odniesienia do podobnej pracy?
mpiktas,
1
należy zauważyć, że „opóźnienie” jest terminem używanym głównie do analizy danych w czasie, odnoszącym się do jednej rzeczy występującej po drugiej. To nie jest opóźnienie - to może być bardziej dokładnie nazywane przesunięciem - a może przesunięciem - ale przesunięcie jest prawdopodobnie bardziej powszechne dla rozkładów, zmieniają się i skalują.
Spacedman,
1
bądź ostrożny, używając as.numeric (x) z czynnikami; faktycznie chcesz użyć as.numeric (as.character (x)), aby upewnić się, że otrzymałeś poprawną wartość liczbową dla współczynnika.
Andy Clifton

Odpowiedzi:

5

lmomFunkcja pelweipasuje do trzech parametrów rozkładu Weibulla z lokalizacji parametrów rozmiarach i kształcie. rweibullgeneruje liczb losowych dla dwóch -parameter rozkładu Weibulla. Musisz odjąć parametr lokalizacji moments["zeta"]. To powinno dać lepsze dopasowanie, ale nie wydaje się, aby dobrze pasowało do twoich danych.

Zauważyłem http://www.reuk.co.uk/Wind-Speed-Distribution-Weibull.htm mówi „prędkości wiatru w większości krajów świata można modelować za pomocą Weibulla.”. Być może masz po prostu pecha i mieszkasz w części świata, w której nie mogą!

jeden przystanek
źródło
myślisz, że możesz mi pomóc z moim drugim pytaniem: obliczaniem energii wiatru na podstawie funkcji gęstości?
eliavs
2
Nie jestem fizykiem i nie znam niezbędnych równań, ale wyobrażam sobie, że będzie to obejmowało całkę liczbową ponad gęstością. integrate()Funkcja R może być do tego przydatna.
onestop
wiem równania mój problam ja chcemy obliczyć procent czasu wiatr przy każdej prędkości
eliavs
Czym jest ja? Czy możesz mi pomóc w integracji -> dziękuję
eliavs
6

Odtworzyłem twoją fabułę na podstawie danych z http://hawaii.gov/dbedt/ert/winddata/krab0192.txt (wykonałem 1200 pomiarów). Dostałem porządne dopasowanie danych, ogólnie używając twojego kodu:

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)

Działka wiatrowa

Przepraszam, nie jestem pewien, czy twój problem może być, ale myślę, że powinieneś być w stanie dopasować weibull do swoich danych. To, co mnie podejrzewa, to krzywa dzwonowa twojego wykresu gęstości, nie mam pojęcia, skąd to się wzięło.

Oto momenty, które wygenerowałem:

wiatr. chwile

       l_1         l_2         t_3         t_4 
15.17287544  4.80372580  0.14963501  0.06954438

chwile

     zeta      beta     delta 
 0.516201 16.454233  1.745413 

WTR do rocznej produkcji: Przypuszczam, że wygenerowałbym wartości dyskretne dla funkcji gęstości prawdopodobieństwa, pomnożyłem te wartości przez funkcję produkcji i zsumowałem. Alternatywnie, możesz po prostu użyć swoich surowych danych, pomnożyć wartości przez funkcję wyjściową, zsumować je i obliczyć średnią roczną, powinieneś kontrolować sezonowość w odpowiedni sposób (np. Upewnij się, że używasz całych lat lub odpowiednio ważą) .

Oto niekontrolowane dane wyjściowe (przy użyciu wzoru z http://www.articlesbase.com/diy-articles/determining-wind-turbine-annual-power-output-a-simple-formula-based-upon-blade-diameter- i -średnia prędkość wiatru-w-twojej-lokalizacji-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
źródło
4

Oto ostatni post w SO na temat turbin wiatrowych. Moja odpowiedź na ten link zawiera trzy linki, którymi możesz być zainteresowany:

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

Właśnie sprawdziłem jeden z linków Weibull w powyższej odpowiedzi SO. Z jakiegoś powodu link nie działa. Oto kilka linków, które zapewniają te same podstawowe informacje:

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

http://www.weru.ksu.edu/new_weru/publications/pdf/Comparison%20of%20the%20Weibull%20model%20with%20measured%20wind%20speed%20distribution%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

Ponadto, z energii wytwarzanej przez wiatr, sezonowość jest oczywista.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

rachunek_80
źródło
1

Nie jestem pewien, czy ktoś już to zauważył, ale pelwei może faktycznie zostać zmuszony do pracy jako funkcja 2-parametrowa weibull poprzez dodanie stałej granicy.

Zamiast dzwonić moments<-pelwei(wind.moments), powinieneś po prostu zadzwonićmoments<-pelwei(wind.moments,bound=0)

zawsze możesz sprawdzić, jaka jest wartość zeta. Jeśli nie jest to 0, a używasz dweibull, musisz coś z tym zrobić.

Chris
źródło