Плохо подобранная кривая в натуральной логарифмической регрессии - PullRequest
0 голосов
/ 08 апреля 2019

Я подгоняю логарифмическую кривую к 20+ наборам данных, используя уравнение

y = intercept +  coefficient * ln(x) 

Генерируется в R через

output$curvePlot <- renderPlot ({
    x=medianX
    y=medianY
    Estimate = lad(formula = y~log(x),method = "EM")
    logEstimate = lad(formula = y~log(x),method = "EM")
    plot(x,predict(Estimate),type='l',col='white')
    lines(x,predict(logEstimate),col='red')
    points(x,y)
    cf <- round(coef(logEstimate),1)
    eq <- paste0("y = ", cf[1],
        ifelse(sign(cf[2])==1, " + ", " - "), abs(cf[2]), " * ln(x) from 0 to ",xmax)
    mtext(eq,3,line=-2,col = "red")
    output$summary <- renderPrint(summary(logEstimate))
    output$calcCurve <- 
        renderPrint(round(cf[2]*log(input$calcFeet)+cf[1]))

    })

Кривая последовательно «пересекается дважды» на данных; подгонка слишком низко в нижней / верхней точке на оси X, подгонка слишком высоко в середине оси X.

Я не очень понимаю, куда идти отсюда. Я пропускаю фактор или использую неправильную кривую? poorly fit curve

Набор данных имеет длину около 60 000 строк, но я сжал его до медиан. Медианы были выбраны из-за неизбежных выбросов в данных, особенно из-за толстого левого хвоста, вызванного нашими приборами.

x,y
2,6.42
4,5.57
6,4.46
8,3.55
10,2.72
12,2.24
14,1.84
16,1.56
18,1.33
20,1.11
22,0.92
24,0.79
26,0.65
28,0.58
30,0.34
32,0.43
34,0.48
36,0.38
38,0.37
40,0.35
42,0.32
44,0.21
46,0.25
48,0.24
50,0.25
52,0.23

Полная методология для контекста:

Образцы зависимой переменной, скорость (фут / мин), были собраны при различные расстояния от сопла вентилятора с помощью NIST-калиброванной горячей проволоки анемометр. Мы контролировали точность измерительных приборов, подвергая анемометр для еженедельного теста на известную среду, напорная труба с известным диаметром отверстия, обеспечивающая калибровка поддерживалась в пределах +/- 1%, анемометр опубликовал рейтинг точности.

Мы контролировали выравнивание вентилятора анемометром по всему длина дорожки с помощью лазера от центра вентилятора, который не более одного дюйма от центра анемометра расстояние.

Хотя мы явно не контролировали факторы окружающей среды, такие как температура наружного воздуха, атмосферное давление, мы считаем, что эти факторы будут иметь минимальное влияние на результаты теста. Для обеспечения эти данные были собраны равномерно в ряде экологических условия, мы построили робота, который вел анемометр вниз по дорожке на другое расстояние каждые пять минут. Это означало, что данные будут собираться в каждую независимую переменную позицию повторно, в течение ход часов, а не на одной позиции в течение ч. В результате 24-часовой тест будет измерять скорость воздуха при каждое расстояние более 200 раз, что позволяет изменять температуру как помещение обогревается или охлаждается в течение дня, чтобы устранить любые проблемы факторы окружающей среды путем введения рандомизации.

Данные были собраны через последовательный порт на анемометре с горячим проводом, сохранение CSV с меткой времени, включающей поля: дата, время, расстояние от вентилятора, измеренной температуры и измеренной скорости. Анализ на данные были выполнены в R.

Тестирование: чтобы собрать начальный набор гипотез, мы взяли медиану Скорость воздуха на каждом расстоянии. Медиана была выбрана, а не среднее значение, поскольку выбросы являются общими в наборах данных, измеряющих физическое величины. Поскольку воздух движется по комнате, это может привести к временно изгиба от анемометра. Это приводит к выбросам на нижнем конце, которые не отражают фактическую переменную, которую мы пытались измерять. Также бывает, что иногда скорость воздуха на измеренное расстояние выглядит как «затяжка», или всплеск и падение. Это ощутимо, просто стоя перед вентилятором, и это происходит на все поклонники на всех расстояниях, в некоторой степени. Мы считаем наиболее вероятным причина этого пыхтения из-за вихревых токов и увлечения окружающий воздух, временно увеличивающий поток воздуха. Медианный результат освобождает нас от беспокойства о том, насколько сильным или слабым может быть «затяжка», и это помогает ограничить влияние на скорость воздуха изгибающегося воздуха от анемометра, который не влияет на фактическую скорость воздуха, но только измеренная скорость воздуха. С нашим начальным набором данных медиан мы использовал логарифмическую регрессию для расчета кривой, чтобы соответствовать данным и генерировали наши начальные профили скорости на заданных расстояниях. Для проверки чтобы исходные данные были точными, мы побежали 10 раз в месяц моделирование на 25% набора данных и гарантирует, что сгенерированный медианы были в пределах разумного значения друг друга.

ВалиДания: вентиляторы запускались каждые три месяца, а Монте-Карло моделирование складывания не наблюдалось. Если уровень ошибок был <5% от нашего предыдущий тест, мы проверили предыдущий тест. </p>

1 Ответ

2 голосов
/ 09 апреля 2019

Нет проблем с самим кодом, вы нашли наилучшее возможное соответствие, используя логарифмическую кривую. Я дважды проверил с помощью Mathematica, и я получил те же результаты.

Кажется, проблема в вашей модели. Исходя из предоставленных вами данных и описания источника данных, логарифмическая функция может быть не лучшей моделью для ваших измерений. Описание указывает, что скорость должна быть конечной величиной при x=0 и медленно стремится к 0 при переходе в бесконечность. Тем не менее, отрицательная логарифмическая функция будет бесконечной при x=0 и отрицательной через некоторое время.

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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...