Моделирование данных с использованием существующих данных и вероятности
Я измерил несколько атрибутов (высота, вид, ширина кроны, состояние и т. Д.) Для 1500 деревьев в городе. Используя методы дистанционного зондирования, у меня также есть высоты для остальных 9000 деревьев в городе. Я хочу смоделировать / сгенерировать / оценить недостающие атрибуты для этих неизмеренных деревьев, используя их высоту.
Из измеренных данных я могу получить пропорцию каждого вида в измеренной популяции (и, следовательно, приблизительную вероятность), распределение высоты для каждого вида, соотношение высоты и ширины кроны для вида, соотношение вида и состояния и так далее. Я хочу использовать данные о высоте для неизмеренных деревьев, чтобы сначала оценить вид, а затем оценить остальные атрибуты, используя теорию вероятностей. Таким образом, для высоты, скажем, 25 м, более вероятно, что это кедр (высота 5 - 30 м), а не тутовое дерево (высота 2 -8 м), и более вероятно, что он кедр (50% населения), чем дуб (тот же диапазон высоты, но 2% населения) и, следовательно, будет иметь ширину кроны 10 м и состояние здоровья 95% (на основании распределений для кедровых деревьев в моих данных измерений). Но я также ожидаю, что некоторые другие деревья 25 м получат дуб, но реже, чем кедр, исходя из пропорции в популяции.
Есть ли способ сделать это, используя теорию вероятностей в R, предпочтительно используя байесовские или машинные методы обучения?
Я не прошу, чтобы кто-то написал код для меня - у меня достаточно опыта работы с R. Я просто хочу, чтобы меня указывали в правильном направлении, то есть в пакет, который делает такие вещи аккуратно.
Спасибо!
3 ответа
Поскольку вы хотите предсказать категориальную переменную, то есть вид, вы должны рассмотреть возможность использования регрессии дерева, метода, который можно найти в R-пакетах rpart и RandomForest. Эти модели превосходны, когда у вас есть дискретное количество категорий, и вам нужно разделить свои наблюдения на эти категории. Я думаю, что эти пакеты будут работать в вашем приложении. Для сравнения вы также можете посмотреть на полиномиальную регрессию (mnlogit, nnet, maxent), которая также может предсказать категориальные результаты; к сожалению, полиномиальная регрессия может быть громоздкой с большим количеством результатов и / или большими наборами данных.
Если вы хотите затем спрогнозировать отдельные значения для отдельных деревьев в вашем виде, сначала запустите регрессию всех ваших измеренных переменных, включая тип вида, на измеренных деревьях. Затем возьмите предсказанные вами категориальные метки и прогнозируйте вне выборки для неизмеренных деревьев, где вы используете категориальные метки в качестве предикторов для неизмеряемой переменной, представляющей интерес, скажем, высоты дерева. Таким образом, регрессия будет предсказывать среднюю высоту для этого вида / фиктивной переменной, плюс некоторую ошибку и включать любую другую информацию, которую вы имеете в этом дереве вне выборки.
Если вы хотите использовать байесовский метод, рассмотрите возможность использования иерархической регрессии для моделирования этих прогнозов вне выборки. Иногда иерархические модели лучше предсказывают, поскольку имеют тенденцию быть довольно консервативными. Посмотрите на пакет Rstanarm для некоторых примеров.
Я предлагаю вам просмотреть байесовские сети с таблицами CPD по вашим случайным переменным. Это порождающая модель, которая может обрабатывать недостающие данные и делать вывод о случайных отношениях между переменными. Структура байесовской сети может быть задана вручную или получена из данных с помощью алгоритма.
R имеет несколько реализаций Байесовских сетей, одной из которых является bnlearn: http://www.bnlearn.com/
Пожалуйста, ознакомьтесь с руководством по его использованию здесь: https://www.r-bloggers.com/bayesian-network-in-r-introduction/
Для каждого вида распределение других переменных (высота, ширина, состояние), вероятно, является довольно простым выступом. Вы, вероятно, можете смоделировать высоту и ширину как совместное распределение Гаусса; не знаю о состоянии. В любом случае с совместным распределением для переменных, отличных от вида, вы можете построить смешанное распределение всех этих ударов по видам, с весами смешивания, равными доле каждого вида в доступных данных. Учитывая высоту, вы можете найти условное распределение других переменных, зависящих от высоты (и это также будет смешанное распределение). Учитывая условную смесь, вы можете сделать выборку из нее как обычно: выбрать удар с частотой, равной его весу смешивания, а затем произвести выборку из выбранного удара.
Похоже, хорошая проблема. Удачи и приятного времяпровождения.