Как я могу оценить плотность целевой скорости ветра по суточным распределениям Вейбулла за 13 лет большого набора данных

Добрый день,

Я хочу создать распределение Вейбулла на основе скорости ветра, измеряемой каждые полчаса (48 скоростей ветра в день, иногда не хватает нескольких часов).
И затем, основываясь на распределении Вейбулла, я хочу рассчитать плотность определенной целевой скорости ветра (в этом наборе данных, 29 км / ч) на основе каждого суточного распределения Вейбулла.
Чтобы сделать это, мне нужно организовать 13-летний набор данных каждый день, чтобы вычислить два параметра для распределения Вейбулла (scale = a и shape = b) для оценки плотности целевой точки каждый день. Поскольку это большой набор данных, мне нужно использовать определенную функцию для его автоматической обработки и поместить ежедневные результаты в другую таблицу (a, b, плотность 29 км / ч) (возможно, функция return)?

Мои данные выглядят так:

    Time             windspeed direction    Date            day_index
1   24/07/2000 13:00    31       310    2000-07-24 13:00:00 2000_206
2   24/07/2000 13:30    41       320    2000-07-24 13:30:00 2000_206
3   24/07/2000 14:30    37       290    2000-07-24 14:30:00 2000_206
4   24/07/2000 15:00    30       300    2000-07-24 15:00:00 2000_206
5   24/07/2000 15:30    24       320    2000-07-24 15:30:00 2000_206
6   24/07/2000 16:00    22       330    2000-07-24 16:00:00 2000_206
7   24/07/2000 16:30    37       270    2000-07-24 16:30:00 2000_206  

Это еще один вопрос по этой ссылке на веб-странице ( Как я могу применить "sapply" в R с несколькими кодами в одной функции?)

Предыдущие комментарии указывают на то, что мне может понадобиться использовать функции "aggregate" или "ddply". Как я могу поместить несколько аргументов в функции для моего намерения анализа?

Моя функция для нескольких аргументов:

library(bReeze) 
library(xts) 
time_ballarat <- strptime(ballarat_alldata[,1], "%d/%m/%Y %H:%M")

multiple.function <- set1 <- createSet(height=10, v.avg=ballarat_alldata[,2], dir.avg=ballarat_alldata[,3]) + ballarat <- createMast(time.stamp=time_ballarat, set1) + ballarat <- clean(mast=ballarat) + ballarat.wb <- weibull(mast=ballarat, v.set=1, print=FALSE) + my.x <- density(ballarat_alldata$windspeed, from = 0, to = max(ballarat_alldata$windspeed))$x + my.y <- density(ballarat_alldata$windspeed, from = 0, to = max(ballarat_alldata$windspeed))$y + df <- data.frame(x = my.x, y = my.y) + my.nls <- nls(y ~ (a/b) * (x/b)^(a-1) * exp(- (x/b)^a), + data = df[df$x > 0, ], + start = c(a = ballarat.wb[13,2], b = ballarat.wb[13,1])) + xValues <- seq(from = 0, to = 40, length.out = 100) + my.predicted <- predict(my.nls, data.frame(x = xValues)) + my.coef <- coef(my.nls) + my.weibull.predict <- function(x, a, b) { + y <- (a/b) * (x/b)^(a-1) * exp(- (x/b)^a) + return(y)} + return(c(ballarat.parameter = my.coef[1], ballarat.scale= my.coef[2], + my29 = my.weibull.predict(29, my.coef[1], my.coef[2])))}

Я не уверен, что это может рассчитать плотность целевой скорости в каждый день. Не могли бы вы проверить, соответствует ли она моим намерениям? Основная проблема "множественной функции" заключается в том, что коды распределения Weibull должны создаваться по-разному на основе разных данных каждого дня. Это отсутствует в кодах.

Например, в "createSet(height=10, v.avg=ballarat_alldata[,2], dir.avg=ballarat_alldata[,3])", v.avg а также dir.avg не должен содержать все наборы данных для расчета, но я не знаю, как.

Я все еще новичок в R, поэтому заранее прошу прощения за свои вопросы. Вопросы могут быть слишком конкретными.. Пожалуйста, помогите мне найти способ решить мои проблемы!

С Уважением,

Kangmin.

0 ответов

Другие вопросы по тегам