Всем здравствуйте.
Задали мне тут задачку в лаборатории, где практику прохожу, посчитать частные коэффициенты корреляции (далее ЧК) для 20 процессов, а задали как потом выяснилось потому что сами не знают как это сделать. Ну я порыскал по сети, нашёл одну формулу, неделю бился чтоб адаптировать её в эксель, усилиями себя и пары товарищей всё сделали. Довольный, что сделал то что они давно не могли сделать, сажусь считать эти ЧК и в один прекрасный момент понимаю что оно мне выдаёт значения больше единицы. Сначала подумал что где то в переносе формулы наврал, но перепроверив всё несколько раз убедился что всё правильно. Поэтому остаётся не доверять исходной формуле (она будет чуть ниже). В связи с этим прошу Вашего мнения по этому поводу, а точнее сказать насколько эта формула достоверна, ели всё нормально то откуда у меня такие значения берутся. Если она не правильная подскажите по какой формуле стоит рассчитывать этот показатель.

Заранее всем участником спасибо)

размер 162x49, 2.54 kb

GD Star Rating
loading...
Нужно посчитать частные коэффициенты корреляции, 9.0 out of 10 based on 1 rating

8 Responses to Нужно посчитать частные коэффициенты корреляции

  1. 91:

    в этой формуле р — ЧК, С — минор матрицы КК.

  2. Peels:

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

    Ближайшее из википедии, похожее на твою формулу, это вот, например:

  3. 91:

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

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

  4. Peels:

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

    И вопрос тогда скорее всего не в формуле а в твоем подсчете корреляций. Убедись что та матрица, по которой ты миноры считаешь, симметрична, имеет на диагонали 1 а вне диагонали числа между –1 и 1. Если это так, а ты все равно получаешь значения больше 1, то ты напортачил что–то с подсчетом тех миноров. Если это не так, то ты наверное неверно считаешь корреляции.

    И вообще, если ты неделю бился, ты явно что–то недоговариваешь. Ибо положим у тебя в экселе три столбца данных. Пусть A1, B1, C1 — заголовки, а А20, 20, 20 — данные. Фигачим куда–нибудь в клетку что–то вроде:
    :CORREL ( A20;B20 )–CORREL ( A20;C20 )*CORREL ( B20;C20 ) )/SQRT(1–CORREL ( A20;C20 )^2 )/SQRT ( 1–CORREL( B20;C20 )^2 )

    и в общем–то все, чего тут неделю мусолить?

  5. Peels:

    Наш любимый парсер конечно же заменил «= (» в самом начале формулы на «:».

  6. 91:

    я вычитаю влияние 18 процессов из корреляции оставшихся двух, поэтому этой формулой тут не воспользуешься, тут вычитается только влияние одного процесса из корреляции двух других.
    Сёдня пол дня с завлабом просидели в обсуждении этого случая, так не к чему не пришли… главное что 246 матрицы посчитало нормально, а вот 12 не смог…
    Просто если проблема только в изначальной матрице КК, то тогда хотя бы буду знать что эта формула рабочая, и правомерная, и уж канить исхитриться и получить правильную матрицу КК, наверно можно будет в будущем. Сейчас главное убедиться что это рабочая версия.
    Вот версия того что я считаю чтоб показать как это не просто.
    //www.rapidshare.ru/1494157
    А всю информацию брал с сайта — //www.statsoft.ru/home/portal/
    там всё очень понятно и с нормальными примерами.

  7. Peels:

    Я конечно ничего в твоем файле не понял, кроме того, что вам там больше делать нечего как фигачить такую дурь на экселе, и уж тем более, в таком вот формате. Положим твои данные о 20и процессах сохранены в текстовом файле data.txt, по 20 чисел на строке, разделенные табом. Первая строка — заголовки. Открываем R, фигачим в гугл «partial correlation R» и вот у нас уже готовый код:

    source ( «//www.yilab.gatech.edu/pcor.R» )
    data = read.table ( «data.txt», header = T )
    pcor.test (data[,1], data[,2], data[,–c(1,2))

    Если тебе надо все попарные частные корреляции, добавляешь вокруг

    source ( «//www.yilab.gatech.edu/pcor.R» )
    data = read.table ( «data.txt», header = T )
    for (i in seq(1,20)) for (j in seq(1,20)) if (i < j) {
    pcor.test (data[,i], data[,i], data[,–c(i,j))
    }

    Ура, еще неделя спасена!

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

  8. 91:

    Я конечно безумно благодарен, но я чуть чуть не программист, а всё таки физиолог) как говорил один наш препод–медик «когда я на такое смотрю больше 2 часов меня начинает тошнить», конечно в силу моего тех.образования меня тошнить не начинает, но всё равно ничего не понимаю, и даже не знаю что с этим делать… И для моих целей мне нужна не только получившаяся матрица, но и ещё очень много преобразований с ней, которые не запрограммированны кем–то, а я сам этого не смогу сделать, поэтому и делаю всё в экселе, так как это может немног муторно но не сложно. Я признаю что программный выход из этой проблемы был бы наилучшем, сам я начну заниматься этим только через пару месяцев, а объяснять кому–то это ещё дольше получится…
    А проблема из–за которой у меня не считалось найдена — исходная матрица КК не симметричная оказалась… я просто даже не подозревал что такое может быть, ибо в лаборатории они по этой проге уже не одно десятилетие работали… а оказалась такая фигня…
    Короче спасибо за помощь, узнал много нового, может когданить пригодится)

Добавить комментарий