Menganalisis data angin dengan R


12

Hai, saya menganalisis data angin untuk memperkirakan energi dari turbin angin.
Saya telah mengambil data angin 10 tahun dan membuat grafik histogram;
tahap kedua saya adalah menyesuaikan distribusi Weibull ke data.
Saya menggunakan R dengan paket lmomuntuk menghitung bentuk dan skala Weibul ini adalah kode yang saya gunakan:

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

Sepertinya ada beberapa jeda antara data dan fungsi kerapatan; dapatkah anda membantu saya dengan ini? Pertanyaan lain adalah dapatkah Anda membantu saya dalam menghitung energi anual dari fungsi kepadatan?

masukkan deskripsi gambar di sini
Terima kasih


Tentang gambar, poskan ke hosting gambar dan pasang tautan - Saya akan mengonversinya menjadi gambar yang ditempel.

+1, pertanyaan menarik, Anda mungkin segera mengetahui bahwa Anda akan memiliki reputasi yang cukup :)
mpiktas

2
kalau dilihat dari grafik, masalahnya bukan lag. Apa yang Anda rencanakan kira-kira adalah kebaikan yang pas. Jadi sepertinya distribusi Weibull tidak sesuai untuk data Anda. Saya melihat ada banyak yang mendekati nol, apakah Anda memiliki nilai nol dalam data Anda? Dalam hal ini Anda perlu memodelkan nilai nol secara terpisah. Jadi saran pertama adalah mencoba Weibull untuk nilai bukan nol. Juga mengapa Weibull, adakah alasan khusus, beberapa referensi dari karya serupa mungkin?
mpiktas

1
perhatikan bahwa 'lag' adalah istilah yang digunakan terutama dalam analisis data dalam waktu, mengacu pada satu hal yang terjadi setelah yang lain. Ini bukan lag - itu mungkin lebih tepat disebut shift - atau mungkin offset - tetapi shift mungkin lebih umum untuk distribusi, mereka bergeser dan berskala.
Spacedman

1
hati-hati menggunakan as.numeric (x) dengan faktor; Anda sebenarnya ingin menggunakan as.numeric (as.character (x)) untuk memastikan Anda mendapatkan nilai angka yang tepat untuk faktor tersebut.
Andy Clifton

Jawaban:


5

lmomfungsi pelweisesuai dengan tiga parameter distribusi Weibull, dengan parameter lokasi , skala dan bentuk. rweibullmenghasilkan angka acak untuk distribusi Weibull dua parameter. Anda perlu mengurangi parameter lokasi moments["zeta"]. Itu harus memberikan yang lebih baik cocok, tapi tidak muncul itu akan memberikan yang baik cocok untuk data tertentu Anda.

Saya perhatikan http://www.reuk.co.uk/Wind-Speed-Distribution-Weibull.htm mengatakan "Kecepatan angin di sebagian besar dunia dapat dimodelkan menggunakan Weibull Distribution.". Mungkin Anda hanya beruntung dan tinggal di bagian dunia di mana mereka tidak bisa!


apakah Anda pikir Anda dapat membantu saya dengan pertanyaan kedua: menghitung energi angin berdasarkan fungsi kepadatan?
eliavs

2
Saya bukan seorang ahli fisika dan saya tidak tahu persamaan yang diperlukan, tetapi saya membayangkan itu akan melibatkan integral numerik atas kepadatan. integrate()Fungsi R mungkin berguna untuk itu.
onestop

saya tahu persamaan problam saya adalah saya ingin menghitung persen waktu angin pada setiap kecepatan
eliavs

apa yang saya maksud adalah dapatkah Anda membantu saya dengan integrasi -> terima kasih
eliavs

6

Saya membuat ulang plot Anda dengan data dari http://hawaii.gov/dbedt/ert/winddata/krab0192.txt (saya mengambil 1.200 pengukuran). Saya mendapatkan data yang layak, umumnya menggunakan kode Anda:

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)

Plot Angin

Maaf, saya tidak yakin kalau masalah Anda bisa, tapi saya pikir Anda harus dapat menyesuaikan weibull dengan data Anda. Yang membuat saya curiga adalah kurva lonceng plot kepadatan Anda, saya tidak tahu dari mana itu berasal.

Inilah saat-saat yang saya hasilkan:

angin

       l_1         l_2         t_3         t_4 
15.17287544  4.80372580  0.14963501  0.06954438

momen

     zeta      beta     delta 
 0.516201 16.454233  1.745413 

WTR ke output tahunan: Saya kira saya akan menghasilkan nilai diskrit untuk fungsi kepadatan probabilitas, kalikan nilai-nilai ini dengan fungsi output dan jumlahkan. Atau, Anda bisa menggunakan data mentah Anda, mengalikan nilai dengan fungsi output, menjumlahkannya dan menghitung rata-rata tahunan, Anda harus mengontrol musiman dengan cara yang sesuai (mis. Pastikan untuk menggunakan seluruh tahun, atau untuk menimbang sesuai dengan itu) .

Ini adalah output yang tidak terkendali (menggunakan rumus dari http://www.articlesbase.com/diy-articles/determining-wind-turbine-annual-power-output-a-simple-formula-based-upon-blade-diameter- dan kecepatan angin rata-rata di lokasi Anda-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

Berikut ini pos terbaru di SO tentang turbin angin. Jawaban saya pada tautan itu memiliki tiga tautan yang mungkin menarik bagi Anda:

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

Saya baru saja memeriksa salah satu tautan Weibull dalam jawaban SO di atas. Untuk beberapa alasan, tautannya down. Berikut ini beberapa tautan yang memberikan informasi dasar yang sama:

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

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

Juga, dari kekuatan yang dihasilkan dari angin, musiman jelas.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini


1

Saya tidak yakin apakah seseorang telah membuat poin ini, tetapi pelwei sebenarnya dapat dipaksa untuk bekerja sebagai fungsi weibull 2 ​​parameter dengan menambahkan dalam batas tetap.

Bawaan panggilan moments<-pelwei(wind.moments)Anda hanya harus meneleponmoments<-pelwei(wind.moments,bound=0)

Anda selalu dapat memeriksa apa nilai zeta itu. Jika bukan 0 dan Anda menggunakan dweibull, Anda perlu melakukan sesuatu untuk itu.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.