用R分析风数据


12

嗨,我正在分析风数据以估算风力涡轮机的能量。
我已经收集了10年的风力数据并绘制了直方图。
我的第二阶段是将Weibull分布拟合到数据。
我将R与包装lmom一起使用以计算Weibul形状并缩放,这是我使用的代码:

>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 2011年

2
从图上看,问题不是滞后。您所绘制的大致是拟合优度。因此,看来Weibull分布不适合您的数据。我看到有一堆接近零,您的数据中是否有零值?在这种情况下,您将需要分别对零值建模。因此,第一个建议是尝试将Weibull用于非零值。还有为什么韦布尔,是否有特定的原因,也许是类似作品的一些参考?
mpiktas 2011年

1
请注意,“滞后”是一个主要用于及时分析数据的术语,指的是一件又一件的事情。这不是滞后-也许更准确地称为转移-或偏移-但是转移对于分布来说可能更常见,它们会转移和缩放。
Spacedman

1
使用as.numeric(x)时要小心;您实际上想使用as.numeric(as.character(x))来确保获得正确的因子数值。
安迪·克利夫顿

Answers:


5

lmom函数pelwei拟合具有位置,比例和形状参数的三个参数的威布尔分布。生成参数威布尔分布的随机数。您需要减去location参数。这样应该可以更好地拟合,但是看起来并不能很好地拟合您的特定数据。rweibullmoments["zeta"]

我注意到http://www.reuk.co.uk/Wind-Speed-Distribution-Weibull.htm说:“可以使用Weibull分布对世界上大多数地区的风速进行建模。” 也许您只是不幸而生活在他们无法做到的世界中!


您是否可以帮助我解决第二个问题:根据密度函数计算风能?
eliavs 2011年

2
我不是物理学家,也不知道必要的方程式,但我想它会涉及密度上的一个数值积分。R的integrate()功能可能对此有用。
一站式

我知道方程式是我要计算风速在每种速度下所占的时间百分比
eliavs 2011年

我的意思是,您能帮我进行整合->谢谢
eliavs 2011年

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-annual-power-output-a-simple-formula-based-upon-blade-diameter- and-average-wind-speed-at-your-location-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

1

我不确定是否有人已经指出了这一点,但是实际上可以通过添加固定范围来强制pelwei用作2参数weibull函数。

打电话的想法moments<-pelwei(wind.moments)你应该简单地打电话moments<-pelwei(wind.moments,bound=0)

您可以随时检查zeta值是多少。如果它不为0,并且您正在使用dweibull,则需要对此做一些事情。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.