Анализ данных ветра с помощью R


12

Привет, я анализирую данные о ветре для оценки энергии от ветряной турбины.
Я взял данные о ветре за 10 лет и составил гистограмму;
моя вторая стадия состояла в том, чтобы приспособить распределение Вейбулла к данным.
Я использовал 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 не подходит для ваших данных. Я вижу, что есть куча около нуля, у вас есть нулевые значения в ваших данных? В этом случае вам нужно будет смоделировать нулевые значения отдельно. Поэтому первым предложением было бы попробовать Вейбулла для ненулевых значений. Кроме того, почему Вейбулл, есть ли особая причина, возможно, какая-то ссылка из подобной работы?
mpiktas

1
обратите внимание, что «лаг» - это термин, используемый в основном для анализа данных во времени, относящихся к одной вещи, происходящей за другой. Это не задержка - это, возможно, более точно называется смещением - или, возможно, смещением - но смещение, вероятно, более распространено для распределений, они смещаются и масштабируются.
Spacedman

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

Ответы:


5

lmomФункция pelweiсоответствует распределению Вейбулла с тремя параметрами, с параметрами местоположения , масштаба и формы. rweibullгенерирует случайные числа для двух -параметрической распределения Вейбулла. Вам нужно вычесть параметр местоположения moments["zeta"]. Это должно дать лучшее прилегание, но он не появляется , это даст хорошую подгонку для ваших конкретных данных.

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


Вы думаете, вы можете помочь мне со вторым вопросом: вычисление энергии ветра на основе функции плотности?
eliavs

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

я знаю уравнение, с которым я сталкиваюсь, я хочу вычислить процент времени, в течение которого ветер
развивается

что я могу сказать, можете ли вы помочь мне с интеграцией -> спасибо
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)

Заговор Ветра

Извините, я не уверен, что это может быть вашей проблемой, но я думаю, что вы должны быть в состоянии приспособиться к вашим данным. Что вызывает у меня подозрение - это колокольчик на графике вашей плотности, я понятия не имею, откуда это взялось.

Вот моменты, которые я произвел:

wind.moments

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

Я только что проверил одну из ссылок Вейбулла в приведенном выше ответе SO. По какой-то причине ссылка не работает. Вот несколько ссылок, которые предоставляют одну и ту же основную информацию:

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

Кроме того, из-за энергии, генерируемой ветром, сезонность очевидна.

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

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


1

Я не уверен, что кто-то уже высказал эту мысль, но на самом деле pelwei можно заставить работать как двухпараметрическую функцию Вейбулла, добавив фиксированную границу.

Insead звонить, moments<-pelwei(wind.moments)вы должны просто позвонитьmoments<-pelwei(wind.moments,bound=0)

Вы всегда можете проверить значение дзета. Если это не 0, и вы используете dweibull, вам нужно что-то с этим сделать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.