Хорошо подходит для 2D гистограмм


19

У меня есть два набора данных, представляющих параметры звезд: наблюдаемый и смоделированный. С помощью этих наборов я создаю так называемую двухцветную диаграмму (TCD). Образец можно увидеть здесь:

histogramas

Быть наблюдаемые данные и Аргументы B данных , извлеченные из модели (не говоря уже о черных линиях, точки представляют данные) У меня есть только один A - схема, но могут производить множество различных B диаграмм , как я хочу, и что мне нужно чтобы сохранить тот , который лучше всего подходит А .

Так что мне нужен надежный способ проверить правильность подгонки диаграммы B (модель) к диаграмме A (наблюдается).

Сейчас я создаю двухмерную гистограмму или сетку (это то, что я называю, возможно, у нее более подходящее имя) для каждой диаграммы, разбивая обе оси (по 100 корзин для каждой). Затем я прохожу каждую ячейку сетки. и я нахожу абсолютную разницу в количестве между А и В для этой конкретной ячейки. После того , как прошел через все клетки, я просуммировать значения для каждой ячейки , и поэтому я в конечном итоге с одного положительного параметра , представляющего степень согласия ( ) между A и B . Чем ближе к нулю, тем лучше подходит. По сути, так выглядит этот параметр:грамме

; где я J есть число звезд в диаграммеАдля этой конкретной ячейки (определяется я J ) и б я J есть число дляB.граммезнак равноΣяJ|aяJ-бяJ|aяJяJбяJ

Это то, что те как выглядят a i j - b i j ) различия в количестве ячеек в каждой ячейке всетке, которуюя создаю (обратите внимание, что я не использую абсолютные значения ( a i j - b i j ) на этом изображении, но Ясделатьих использовать при вычислении г ф параметра):(aяJ-бяJ)(aяJ-бяJ)грамме

Hess

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


Важно :

(спасибо @PeterEllis за это)

1- Точки B не связаны один-к-одному с точками A . Это важная вещь , чтобы иметь в виду при поиске наилучшего: число точек А и В является не обязательно то же самое и благость пригонки теста следует также учитывать это несоответствие и попытаться свести его к минимуму.

2- Количество точек в каждом наборе данных B (вывод модели), который я пытаюсь подогнать к A , не является фиксированным.


Я видел, как в некоторых случаях использовался критерий хи-квадрат :

Σя(Оя-Ея)2/ЕяОяЕя

ЕяЕя

Кроме того, я читал, что некоторые люди рекомендуют использовать логарифмический критерий Пуассона для правдоподобия в случаях, подобных этому, где используются гистограммы Если это правильно, я бы очень признателен, если бы кто-то мог научить меня, как использовать этот тест в данном конкретном случае (помните, мои знания статистики довольно скудны, поэтому, пожалуйста, держите его как можно проще :)


Есть ли у точек в B взаимно-однозначные отношения с точками в A (например, каждая является определенной звездой) или это более абстрактно?
Питер Эллис

Привет @PeterEllis, нет очков в B не не связаны один к одному с точками A . На самом деле это еще одна важная вещь , чтобы иметь в виду при поиске наилучшего: число точек в A и B являются не обязательно равны.
Габриэль

Привет - интересный вопрос, постараюсь написать правильный ответ. Является ли каждая версия B одинаковым количеством очков или они тоже различаются?
Питер Эллис

Они тоже меняются, только количество точек в A остается постоянным. Вы понятия не имеете, сколько бы вы мне помогли, если бы помогли мне разобраться в этом @PeterEllis.
Габриэль

Этот вопрос очень похож на эту тему: stats.stackexchange.com/questions/71036/… Где я дал ответ.
Л. Фишман,

Ответы:


14

Хорошо, я тщательно пересмотрел этот ответ. Я думаю, что вместо того, чтобы объединять ваши данные и сравнивать счетчики в каждом бине, предложение, которое я похоронил в своем первоначальном ответе о подборе 2-мерной оценки плотности ядра и сравнении их, является гораздо лучшей идеей. Более того, в пакете ks Tarn Duong для R есть функция kde.test (), которая делает это легко, как пирог.

Проверьте документацию для kde.test для получения более подробной информации и аргументов, которые вы можете настроить. Но в основном это делает именно то, что вы хотите. Возвращаемое значение p - это вероятность генерации двух наборов данных, которые вы сравниваете в соответствии с нулевой гипотезой о том, что они были получены из одного и того же распределения. Таким образом, чем выше значение p, тем лучше соответствие между A и B. См. Мой пример ниже, где легко обнаружить, что B1 и A различны, но что B2 и A правдоподобно совпадают (как они были сгенерированы) ,

# generate some data that at least looks a bit similar
generate <- function(n, displ=1, perturb=1){
    BV <- rnorm(n, 1*displ, 0.4*perturb)
    UB <- -2*displ + BV + exp(rnorm(n,0,.3*perturb))
    data.frame(BV, UB)
}
set.seed(100)
A <- generate(300)
B1 <- generate(500, 0.9, 1.2)
B2 <- generate(100, 1, 1)
AandB <- rbind(A,B1, B2)
AandB$type <- rep(c("A", "B1", "B2"), c(300,500,100))

# plot
p <- ggplot(AandB, aes(x=BV, y=UB)) + facet_grid(~type) + 
    geom_smooth() +     scale_y_reverse() + theme_grey(9)
win.graph(7,3)
p +geom_point(size=.7)

введите описание изображения здесь

> library(ks)
> kde.test(x1=as.matrix(A), x2=as.matrix(B1))$pvalue
[1] 2.213532e-05
> kde.test(x1=as.matrix(A), x2=as.matrix(B2))$pvalue
[1] 0.5769637

МОЙ ОРИГИНАЛЬНЫЙ ОТВЕТ НИЖЕ, УДЕРЖИВАЕТСЯ ТОЛЬКО ТОЛЬКО, ЧТО ЕСТЬ СЕЙЧАС ССЫЛКИ НА ЭТО ОТ ДРУГОГО, КОТОРОЕ НЕ ОЗНАЧАЕТ

Во-первых, могут быть и другие способы сделать это.

Justel и др. Предложили многовариантное расширение критерия пригодности по Колмогорову-Смирнову, которое, я думаю, можно использовать в вашем случае, чтобы проверить, насколько хорошо каждый набор смоделированных данных соответствует оригиналу. Я не мог найти реализацию этого (например, в R), но, возможно, я не выглядел достаточно сложно.

В качестве альтернативы может быть способ сделать это, подгоняя связку как к исходным данным, так и к каждому набору смоделированных данных, а затем сравнивая эти модели. Есть реализации этого подхода в R и других местах, но я не особенно знаком с ними, поэтому не пробовал.

Но для непосредственного решения вашего вопроса разумный подход. Несколько пунктов предлагают себя:

  • Если ваш набор данных больше, чем кажется, я думаю, что сетка 100 х 100 - это слишком много бинов. Интуитивно я могу представить, что вы пришли к выводу, что различные наборы данных более различны, чем просто потому, что точность ваших бинов означает, что у вас есть много бинов с небольшим количеством точек в них, даже когда плотность данных высока. Однако это в конечном итоге является предметом суждения. Я бы обязательно проверил ваши результаты с разными подходами к биннингу.

  • После того как вы выполнили сборку и преобразовали свои данные в (фактически) таблицу на случай непредвиденных обстоятельств с двумя столбцами и числом строк, равным количеству бинов (в вашем случае 10000), у вас возникает стандартная проблема сравнения двух столбцов отсчетов. Подойдет либо критерий хи-квадрат, либо подгонка к какой-либо модели Пуассона, но, как вы говорите, есть неловкость из-за большого числа нулевых отсчетов. Любая из этих моделей обычно подбирается путем минимизации суммы квадратов разности, взвешенной по обратной величине ожидаемого числа отсчетов; когда это приближается к нулю, это может вызвать проблемы.

Редактировать - остальная часть этого ответа я больше не считаю подходящим подходом.

Я думаю, что точный тест Фишера может оказаться бесполезным или неуместным в этой ситуации, когда предельные суммы строк в кросс-таблице не фиксированы. Это даст правдоподобный ответ, но мне трудно совместить его использование с его первоначальным выводом из экспериментального плана. Я оставляю оригинальный ответ здесь, чтобы комментарии и последующие вопросы имели смысл. Кроме того, все еще может быть способ ответить на желаемый подход ОП - объединение данных и сравнение элементов с помощью некоторого теста, основанного на средних абсолютных или квадратичных различиях. Такой подход все равно будет использовать Nграмм×2

Nграмм×2Nграмм

Я смоделировал некоторые данные, чтобы они немного походили на ваши, и обнаружил, что этот подход был довольно эффективным для определения того, какие из моих наборов данных "B" были сгенерированы из того же процесса, что и "A", а какие немного отличались. Конечно, более эффективно, чем невооруженным глазом.

  • Nграмм×2 таблицы сопряженности, это не имеет значения , что число точек в A отличается от тех , в B (хотя заметит , что она являетсяпроблема, если вы используете только сумму абсолютных разностей или квадратов, как вы изначально предлагали). Тем не менее, важно, что каждая из ваших версий B имеет разное количество баллов. В основном, большие наборы данных B будут иметь тенденцию возвращать более низкие значения p. Я могу придумать несколько возможных решений этой проблемы. 1. Вы можете уменьшить все ваши наборы данных B до одного размера (размер наименьшего из ваших наборов B), взяв случайную выборку такого размера из всех наборов B, которые больше этого размера. 2. Сначала вы можете подогнать двумерную оценку плотности ядра к каждому из ваших наборов B, а затем смоделировать данные из этой оценки, которые равны размерам. 3. Вы можете использовать какую-то симуляцию, чтобы выяснить отношение значений p к размеру и использовать это, чтобы «исправить» p-значения, которые вы получаете из описанной выше процедуры, поэтому они сравнимы. Возможно, есть и другие альтернативы. То, что вы сделаете, будет зависеть от того, как были сгенерированы данные B, насколько различны размеры и т. Д.

Надеюсь, это поможет.


Я сделал несколько небольших исправлений опечаток; Надеюсь, ты не против. Там может быть способ форматирования вещей, чтобы выделить основные идеи немного более заметно, особенно в последнем пункте. Но я не хотел быть слишком усердным. Приветствия. :)
кардинал

нет проблем. Я боролся с хорошим способом сделать форматирование моей последней маркированной точки - то, что я хотел, было иерархией нумерованного списка под маркированной точкой. Но я не мог найти, как это сделать.
Питер Эллис

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

1
Я рекомендую книгу Уилкокса в качестве общего текста статистики, в котором используется R (см. Мой ответ stats.stackexchange.com/questions/25632/… ). Несмотря на то, что он не покрывает точный текст Фишера, есть достаточно подробностей о конкретном тексте в Интернете, который будет иметь больше смысла, если у вас есть опыт в этой книге по аналогичным тестам. Может быть, есть лучший текст об этой специфической проблеме соответствия, но я думаю, что книга Уилкокса великолепна как общее введение, которое быстро выводит вас на высокий уровень.
Питер Эллис

1
Вау. Вы, черт возьми, ответили на это. Если бы был «лучший обмен стека», это было бы в нем.
Колин К
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.