การวิเคราะห์ข้อมูลลมด้วย 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

2
ตัดสินจากกราฟปัญหาไม่ใช่ความล่าช้า สิ่งที่คุณได้วางแผนไว้มีความเหมาะสมพอดี ดังนั้นดูเหมือนว่าการแจกจ่าย Weibull จะไม่เป็นผลดีต่อข้อมูลของคุณ ฉันเห็นว่ามีกลุ่มใกล้ศูนย์คุณมีค่าเป็นศูนย์ในข้อมูลของคุณหรือไม่? ในกรณีนี้คุณจะต้องแยกโมเดลค่าศูนย์ ดังนั้นข้อเสนอแนะแรกคือลอง Weibull ด้วยค่าที่ไม่ใช่ศูนย์ ทำไม Weibull ถึงมีเหตุผลบางอย่างอ้างอิงบางอย่างจากงานที่คล้ายกัน?
mpiktas

1
โปรดทราบว่า 'ล่าช้า' เป็นคำที่ใช้เป็นหลักในการวิเคราะห์ข้อมูลในเวลาหมายถึงสิ่งหนึ่งที่เกิดขึ้นหลังจากที่อื่น นี่ไม่ใช่ความล่าช้า - อาจเรียกได้อย่างแม่นยำว่าการเปลี่ยนแปลง - หรืออาจเป็นการชดเชย - แต่การเปลี่ยนแปลงนั้นอาจพบได้บ่อยกว่าสำหรับการแจกแจง
Spacedman

1
ระมัดระวังเกี่ยวกับการใช้ as.numeric (x) ด้วยปัจจัย คุณต้องการใช้ as.numeric (as.character (x)) เพื่อให้แน่ใจว่าคุณได้รับค่าตัวเลขที่ถูกต้องสำหรับตัวคูณ
Andy Clifton

คำตอบ:


5

lmomฟังก์ชั่นpelweiเหมาะกับสามพารามิเตอร์การกระจาย Weibull พร้อมพารามิเตอร์ตำแหน่งขนาดและรูปร่าง rweibullสร้างตัวเลขสุ่มสำหรับการแจกแจงสองพารามิเตอร์ Weibull moments["zeta"]คุณจำเป็นต้องลบพารามิเตอร์สถานที่ นั่นควรจะให้พอดีดีกว่าแต่ไม่ปรากฏว่าจะให้ข้อมูลที่เหมาะสมกับคุณโดยเฉพาะ

ฉันสังเกตเห็นhttp://www.reuk.co.uk/Wind-Speed-Distribution-Weibull.htmกล่าวว่า "ความเร็วลมในส่วนใหญ่ของโลกสามารถสร้างแบบจำลองโดยใช้การกระจาย Weibull" บางทีคุณอาจโชคร้ายและอาศัยอยู่ในส่วนหนึ่งของโลกที่พวกเขาทำไม่ได้!


คุณคิดยังไงกับคำถามที่สองของฉัน: คำนวณพลังงานลมจากฟังก์ชั่นความหนาแน่น
eliavs

2
ฉันไม่ใช่นักฟิสิกส์และฉันไม่ทราบสมการที่จำเป็น แต่ฉันคิดว่ามันจะเกี่ยวข้องกับอินทิกรัลเชิงตัวเลขเกี่ยวกับความหนาแน่น integrate()ฟังก์ชั่นของ R อาจมีประโยชน์สำหรับสิ่งนั้น
onestop

ฉันรู้ว่าสมการของฉัน problam คือฉันต้องการคำนวณเปอร์เซ็นต์ของเวลาที่ลมอยู่ที่ความเร็วแต่ละ
eliavs

สิ่งที่ฉันทำได้คุณสามารถช่วยฉันในการบูรณาการ -> ขอบคุณ
eliavs

6

ฉันสร้างพล็อตของคุณใหม่ด้วยข้อมูลจากhttp://hawaii.gov/dbedt/ert/winddata/krab0192.txt (ฉันวัดได้ 1,200 ครั้ง) ฉันได้รับข้อมูลที่เหมาะสมโดยทั่วไปใช้รหัสของคุณ:

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

ฉันเพิ่งตรวจสอบหนึ่งในลิงค์ Weibull ในคำตอบดังกล่าวข้างต้น ด้วยเหตุผลบางอย่างลิงก์ไม่ทำงาน นี่คือลิงค์บางส่วนที่ให้ข้อมูลพื้นฐานเดียวกัน:

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 สามารถถูกบังคับให้ทำงานเป็นฟังก์ชั่น Weibull พารามิเตอร์ 2 โดยเพิ่มขอบเขตคงที่

Insead การโทรmoments<-pelwei(wind.moments)คุณควรโทรmoments<-pelwei(wind.moments,bound=0)

คุณสามารถตรวจสอบได้ว่าค่าซีต้าคืออะไร หากไม่ใช่ 0 และคุณใช้ dweibull คุณต้องทำอะไรบางอย่างกับมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.