Аналіз даних про вітер за допомогою R


12

Привіт, я аналізую дані про вітер для оцінки енергії вітрогенератора.
Я взяв дані про вітер за 10 років і схопив гістограму;
моїм другим етапом було пристосування розподілу Weibull до даних.
Я використовував R з пакетом lmomдля обчислення форми та масштабу Вейбула. Це код, який я використовував:

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

Схоже, існує деякий відставання між даними та функцією щільності; ви можете мені допомогти в цьому? Ще одне питання - чи можете ви допомогти мені у підрахунку ануальної енергії за допомогою функції щільності?

введіть тут опис зображення
Дякую


Щодо зображення, опублікуйте якийсь хостинг зображень і покладіть посилання - я перетворять його в вставлене зображення.

+1, цікаве запитання, ви можете виявити, що незабаром у вас буде достатньо репутації :)
mpiktas

2
судячи з графіка, проблема не в відставанні. Те, що ви побудували, - це приблизно корисність. Тож здається, що розподіл Weibull не підходить для ваших даних. Я бачу, що в районі нуля є купа, чи є у вас нульові значення у своїх даних? У цьому випадку вам потрібно буде моделювати нульові значення окремо. Тому першою пропозицією було б спробувати Weibull для ненульових значень. Крім того, чому Вейбул, можливо, є певна причина, якась посилання на подібну роботу?
mpiktas

1
зауважте, що "відставання" - це термін, що використовується в основному для аналізу даних у часі, посилаючись на одне, що відбувається за іншим. Це не відставання - це, можливо, більш точно називається зміною - або, можливо, зміщенням, - але зміна, мабуть, частіше зустрічається для розподілів, вони зміщуються та масштабуються.
Спайдермен

1
будьте обережні щодо використання as.numeric (x) з факторами; ви дійсно хочете використовувати as.numeric (as.character (x)), щоб переконатися, що ви отримаєте правильне значення числа для коефіцієнта.
Енді Кліфтон,

Відповіді:


5

lmomФункція pelweiвідповідає три- параметровому розподілу Weibull з параметрами розташування , масштабу та форми. rweibullгенерує випадкові числа для двох -параметріческой розподілу Вейбулла. Потрібно відняти параметр розташування moments["zeta"]. Це має краще відповідати, але, схоже, це не зможе добре відповідати вашим конкретним даним.

Я зауважую, що http://www.reuk.co.uk/Wind-Speed-Distribution-Weibull.htm говорить: "Швидкість вітру в більшості країн світу можна моделювати за допомогою розподілу Weibull." Можливо, тобі просто не пощастило і живеш у тій частині світу, де вони не можуть!


Ви думаєте, ви можете мені допомогти з моїм другим питанням: обчислення енергії вітру на основі функції густини?
eliavs

2
Я не фізик і не знаю необхідних рівнянь, але я думаю, що це буде містити числовий інтеграл над щільністю. integrate()Функція R може бути корисною для цього.
onestop

я знаю рівняння, моє завдання, я хочу обчислити відсоток часу, коли вітер з кожною швидкістю
eliavs

що я мені, чи можете ви допомогти мені з інтеграцією?> дякую
eliavs

6

Я відтворив ваш сюжет із даними http://hawaii.gov/dbedt/ert/winddata/krab0192.txt (я взяв 1200 вимірювань). Я отримав гідну придатність даних, як правило, використовуючи ваш код:

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)

Вітровий сюжет

Вибачте, я не впевнений, що з вашою проблемою могли бути проблеми, але я думаю, ви повинні мати можливість прилаштувати weibull до своїх даних. Що викликає у мене підозрілість - це крива дзвінки вашої ділянки щільності, я не знаю, звідки це взялося.

Ось такі моменти, які я створив:

вітер.моменти

       l_1         l_2         t_3         t_4 
15.17287544  4.80372580  0.14963501  0.06954438

моменти

     zeta      beta     delta 
 0.516201 16.454233  1.745413 

WTR до річного випуску: Я вважаю, що я би генерував дискретні значення для функції щільності ймовірності, помножував ці значення на вихідну функцію та підсумовував їх. Крім того, ви можете просто використовувати ваші необроблені дані, помножити значення з функцією виведення, підсумувати їх та обчислити середньорічні показники, ви повинні контролювати сезонність відповідним чином (наприклад, переконайтесь, що використовуєте цілі роки, або зважуйте відповідно) .

Ось неконтрольований вихід (використовуючи формулу з http://www.articlesbase.com/diy-articles/determining-wind-turbine-an year-power-output-a-simple-formula-based-upon-blade- diameter- і середня швидкість вітру у вашому місці розташування-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

Ось нещодавній пост в SO про вітрогенератори. У моїй відповіді на цьому посиланні є три посилання, які можуть вас зацікавити:

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

Я щойно перевірив одне з посилань на Вейбулла у вищевказаній відповіді ТА. Чомусь посилання не працює. Ось декілька посилань, які надають ту саму основну інформацію:

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

http://www.weru.ksu.edu/new_weru/publications/pdf/Comppare%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

Також із енергії, виробленої вітром, очевидність сезону.

введіть тут опис зображення

введіть тут опис зображення


1

Я не впевнений, чи хтось уже до цього звернувся, але насправді pelwei може бути змушений працювати як функція Weibull з 2 параметрами, додаючи фіксовану межу.

Замість дзвінка moments<-pelwei(wind.moments)вам слід просто зателефонуватиmoments<-pelwei(wind.moments,bound=0)

ви завжди можете перевірити, що таке значення zeta. Якщо це не 0, а ви використовуєте dweibull, вам потрібно щось зробити з цим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.