Попытка привести данные к гауссовой кривой, и результаты не такие, как ожидалось - PullRequest
1 голос
/ 22 января 2020

это не вопрос подгонки кривой. Вместо этого у меня есть коллекция из 60 различных сайтов, из которых я могу собрать максимальные, минимальные и средние температуры. Мне нужно уметь использовать эти данные для расчета рабочей температуры фотоэлемента c; однако это не имеет смысла делать со средними температурами, потому что они включают значения после заката. Вместо этого я сначала создаю «поддельную» среднюю температуру (это наше «поддельное среднее», totalityoftemperatures_fakemeans), которая представляет собой среднее значение максимальной и минимальной температур. В этот момент я вычисляю скорректированную минимальную температуру, вычитая одно стандартное отклонение (предполагая, что 6 * sd = max - min), а затем, наконец, вычисляю «скорректированную» среднюю температуру, которая является средним значением нового минимума (поддельное среднее значение - 1 * sd) и ранее существовавшая максимальная температура (так что это наше «среднее значение»).

Что меня действительно беспокоит, так это то, что это пересчитанное среднее должно быть выше, чем среднее значение «фальшивка»; в конце концов, это среднее значение скорректированного минимума вместе с исходным максимальным значением. Я мог бы также перепостить это в обмен стеками статистики или что-то еще, но я почти уверен, что это проблема кодирования прямо сейчас. Есть ли кто-нибудь, кто может посмотреть на приведенный ниже код в R?

#The first data sets of maxima and minima are taken from empirical data 

for(i in 1:nrow(totalityofsites))
{
  for(j in 1:12)
  {
    totalityoftemperatures_fakemeans[i,j] = mean(totalityoftemperatures_maxima[i,j], totalityoftemperatures_minima[i,j])
  }
}  

totality_onesigmaDF = abs((1/6)*(totalityoftemperatures_maxima - totalityoftemperatures_minima))
totalityoftemperatures_adjustedminima = totalityoftemperatures_fakemeans - totality_onesigmaDF


for(i in 1:nrow(totalityofsites))
{
  for(j in 1:12)
  {
  totalityoftemperatures_adjustedmeans[i,j] = mean(totalityoftemperatures_adjustedminima[i,j], totalityoftemperatures_maxima[i,j])
  }

}

#The second calculation of the average should be higher than "fake" but that is not the case

1 Ответ

0 голосов
/ 22 января 2020

Я думаю, что ваша проблема заключается в использовании вами функции mean. Когда вы делаете это:

mean(totalityoftemperatures_adjustedminima[i,j], totalityoftemperatures_maxima[i,j])

Вы называете среднее с двумя аргументами. Функция принимает только один аргумент - вектор чисел. Если вы предоставите ему два числа, оно проигнорирует второе. Посмотрите:

mean(2, 100)
#[1] 2

Принимая во внимание, что если вы объедините значения в один вектор, вы получите правильный ответ:

mean(c(2, 100))
#[1] 51

Так что вам нужно изменить

mean(totalityoftemperatures_maxima[i,j], totalityoftemperatures_minima[i,j])

до

mean(c(totalityoftemperatures_maxima[i,j], totalityoftemperatures_minima[i,j]))

и

mean(totalityoftemperatures_adjustedminima[i,j], totalityoftemperatures_maxima[i,j])

до

mean(c(totalityoftemperatures_adjustedminima[i,j], totalityoftemperatures_maxima[i,j]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...