Аппроксимация ковариации для массивов разного размера - PullRequest
4 голосов
/ 10 января 2012

Существуют ли в NumPy / SciPy какие-либо общие инструменты для вычисления меры корреляции, которая работает, даже если входные переменные имеют разный размер?В стандартной формулировке ковариации и корреляции требуется иметь одинаковое количество наблюдений для каждой тестируемой переменной.Как правило, вы должны передать матрицу, в которой каждая строка представляет собой отдельную переменную, а каждый столбец представляет отдельное наблюдение.

В моем случае у меня есть 9 различных переменных, но для каждой переменной число наблюдений не является постоянным.Некоторые переменные имеют больше наблюдений, чем другие.Я знаю, что есть такие области, как слияние сенсоров, которые изучают подобные проблемы, и какие существуют стандартные инструменты для вычисления реляционной статистики для рядов данных различной длины (предпочтительно в Python)?

Ответы [ 3 ]

3 голосов
/ 18 января 2012

"Проблема в том, что каждая переменная соответствует ответу на опрос, и не каждый участник опроса ответил на каждый вопрос. Таким образом, я хочу получить некоторую оценку того, как ответ на вопрос 2, скажем, влияет на вероятность ответов на вопрос 8 , например. "

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

образец 1:

question number: [1,2,3,4,5]
response       : [1,0,1,1,0]

образец 2:

question number: [2,4,5]
response       : [1,1,0]

когда образец 2 должен быть похож на это:

question number: [  1,2,  3,4,5]
response       : [NaN,1,NaN,1,0]

Важно номер вопроса, а не количество ответов. Без соответствия вопрос-вопрос невозможно вычислить что-либо, подобное ковариационной матрице.

Так или иначе, эта numpy.ma.cov функция, о которой ddodev упомянул , вычисляет ковариацию, используя тот факт, что суммируемые элементы, каждый зависит только от двух значений.

Так что он вычисляет те, которые он может. Затем, когда дело доходит до деления на n, оно делится на количество значений, которые были вычислены (для этого конкретного элемента ковариационной матрицы), а не на общее количество выборок.

2 голосов
/ 10 января 2012

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

2 голосов
/ 10 января 2012

Я бы изучил эту страницу:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.ma.cov.html

ОБНОВЛЕНИЕ:

Предположим, что каждая строка вашей матрицы данных соответствует определенной случайной переменной, а записи вСтрока наблюдения.То, что у вас есть, - это простая проблема с отсутствующими данными, если у вас есть соответствие между наблюдениями.То есть, если в одной из ваших строк есть только 10 записей, то соответствуют ли эти 10 записей (то есть испытания) 10 выборкам случайной величины в первой строке?Например, предположим, что у вас есть два датчика температуры, и они берут образцы одновременно, но один из них неисправен, а иногда пропускает образец.Затем вы должны рассматривать испытания, в которых неисправный датчик пропустил создание показаний, как «отсутствующие данные».В вашем случае это так же просто, как создать два вектора в NumPy одинаковой длины, положить нули (или любое другое значение на самом деле) в меньший из двух векторов, соответствующих отсутствующим испытаниям, и создать матрицу маски, которая указывает где ваши пропущенные значения существуют в вашей матрице данных.

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

...