Сравните профиль со структурой с R - PullRequest
0 голосов
/ 04 января 2012

Я хотел бы сравнить профиль (средний вид переменной) с заданной структурой (реальный вид переменной).

Набор данных выглядит так для профиля P:

structure(list(V1 = c(0.047, 0.092, 0.065, 0.091, 0.076, 0.067, 
0.087, 0.065, 0.076, 0.052), V2 = c(0.086, 0.06, 0.056, 0.076, 
0.09, 0.071, 0.075, 0.063, 0.078, 0.038), V3 = c(0.065, 0.085, 
0.097, 0.082, 0.061, 0.053, 0.073, 0.083, 0.073, 0.081), V4 = c(0.071, 
0.083, 0.091, 0.07, 0.063, 0.067, 0.107, 0.071, 0.109, 0.094), 
    V5 = c(0.102, 0.104, 0.107, 0.101, 0.12, 0.116, 0.113, 0.112, 
    0.122, 0.1), V6 = c(0.086, 0.067, 0.091, 0.08, 0.07, 0.067, 
    0.073, 0.067, 0.083, 0.081), V7 = c(0.086, 0.079, 0.095, 
    0.082, 0.093, 0.114, 0.081, 0.079, 0.078, 0.083), V8 = c(0.053, 
    0.056, 0.046, 0.058, 0.067, 0.037, 0.043, 0.057, 0.034, 0.063
    ), V9 = c(0.069, 0.065, 0.069, 0.042, 0.067, 0.069, 0.071, 
    0.075, 0.06, 0.096), V10 = c(0.067, 0.054, 0.048, 0.042, 
    0.063, 0.051, 0.045, 0.053, 0.058, 0.073), V11 = c(0.024, 
    0.044, 0.042, 0.066, 0.023, 0.051, 0.024, 0.024, 0.022, 0.044
    ), V12 = c(0.047, 0.048, 0.048, 0.04, 0.044, 0.047, 0.045, 
    0.051, 0.042, 0.052), V13 = c(0.075, 0.075, 0.056, 0.072, 
    0.053, 0.079, 0.075, 0.079, 0.06, 0.046), V14 = c(0.122, 
    0.088, 0.089, 0.095, 0.11, 0.11, 0.087, 0.12, 0.105, 0.098
    )), .Names = c("V1", "V2", "V3", "V4", "V5", "V6", "V7", 
"V8", "V9", "V10", "V11", "V12", "V13", "V14"), row.names = c(NA, 
10L), class = "data.frame")

Структура выглядит так:

structure(c(1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 
1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 
1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 
1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 
0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 
1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 
0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 
1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 
1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 
0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0), .Dim = c(20L, 14L), .Dimnames = list(
    NULL, c("UH6401", "UH6402", "UH6403", "UH6404", "UH6409", 
    "UH6410", "UH6411", "UH6412", "UH6503", "UH66", "UH68", "UH6501a", 
    "UH6405a", "UH6407a")))

Так что в обоих случаях количество переменных одинаково. Также структура. Разница в количестве в каждой ячейке. Где это находится в профилях число с плавающей запятой, и ячейка является двоичной (переменная доступна или нет). Я хотел бы найти этот ряд матрицы профилей, который находится ближе всего к строке структуры.


UPDATE:

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

     V1    V2    V3    V4    V5    V6    V7    V8    V9   V10   V11   V12   V13   V14
1  0.047 0.086 0.065 0.071 0.102 0.086 0.086 0.053 0.069 0.067 0.024 0.047 0.075 0.122
2  0.092 0.060 0.085 0.083 0.104 0.067 0.079 0.056 0.065 0.054 0.044 0.048 0.075 0.088
3  0.065 0.056 0.097 0.091 0.107 0.091 0.095 0.046 0.069 0.048 0.042 0.048 0.056 0.089
4  0.091 0.076 0.082 0.070 0.101 0.080 0.082 0.058 0.042 0.042 0.066 0.040 0.072 0.095
5  0.076 0.090 0.061 0.063 0.120 0.070 0.093 0.067 0.067 0.063 0.023 0.044 0.053 0.110
6  0.067 0.071 0.053 0.067 0.116 0.067 0.114 0.037 0.069 0.051 0.051 0.047 0.079 0.110
7  0.087 0.075 0.073 0.107 0.113 0.073 0.081 0.043 0.071 0.045 0.024 0.045 0.075 0.087
8  0.065 0.063 0.083 0.071 0.112 0.067 0.079 0.057 0.075 0.053 0.024 0.051 0.079 0.120
9  0.076 0.078 0.073 0.109 0.122 0.083 0.078 0.034 0.060 0.058 0.022 0.042 0.060 0.105
10 0.052 0.038 0.081 0.094 0.100 0.081 0.083 0.063 0.096 0.073 0.044 0.052 0.046 0.098

Каждая строка представляет собой так называемый профиль переменных (от V1 до V14). Я называю синюю линию профилем переменных (Ausländer, Keine Umweltbelastung и т. Д.)

enter image description here

Сумма каждой строки равна 1, поэтому число в каждой ячейке - это доля переменной всей строки.

Resp - это матрица 21000 x 14, которая выглядит следующим образом:

      V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14
 [1,]  1  1  0  1  0  1  0  1  1   1   0   1   1   0
 [2,]  1  1  1  0  1  1  0  1  1   1   0   1   1   1
 [3,]  0  0  0  0  0  1  0  1  1   1   0   0   1   0
 [4,]  1  1  0  0  0  0  0  1  1   1   0   1   0   0
 [5,]  1  1  1  1  0  1  1  1  1   1   1   1   0   0
 [6,]  0  0  0  0  0  0  1  1  1   1   0   1   0   0
 [7,]  1  1  1  0  0  1  0  1  0   0   1   0   0   0
 [8,]  0  0  0  0  0  0  0  0  1   1   0   1   0   0
 [9,]  1  1  1  1  1  0  0  1  1   1   1   1   0   0
[10,]  1  1  1  1  0  0  0  1  1   1   1   1   1   0
[11,]  0  0  0  0  0  1  1  1  1   1   0   1   0   0
[12,]  1  1  0  0  0  0  0  1  1   1   1   1   1   0
[13,]  0  1  0  1  0  1  0  1  1   1   0   1   0   0
[14,]  0  0  0  0  0  1  1  1  1   1   0   1   0   0
[15,]  1  0  1  1  0  0  0  1  1   1   1   1   0   0
[16,]  1  1  1  1  0  0  0  1  1   1   0   1   0   0
[17,]  1  1  1  0  0  1  1  1  1   1   0   1   1   1
[18,]  1  1  1  0  0  1  0  1  1   1   0   1   0   0
[19,]  1  1  1  1  1  1  1  1  1   1   1   1   1   1
[20,]  1  1  1  1  0  0  0  1  1   1   0   1   0   0

Каждая строка теперь является респондентом, и запись в ячейке указывает, доступна ли для него переменная (от V1 до V14) (1) или нет (0). Принимая во внимание, что записи в переменных были средними данными по всем респондентам подгруппы, записи в соответсвии наблюдаются. Переменные представляют структуру окрестности группы. Vars показывают 10 разных подгрупп. Я хотел бы знать, к какой подгруппе, возможно, принадлежит респондент из респ. Поэтому мне нужно сравнить каждый ряд от соответсвующего с каждым рядом с переменными. Я предполагаю, что респондент принадлежит к подгруппе, где общая разница минимальна. Моей первой мыслью было разделить каждый ряд соотношения на сумму ряда, но результат на самом деле не применим. Затем я подумал взвесить каждую переменную по среднему профилю:

aver <- c(0.0718023287061849, 0.0693420423225302, 0.0753384763664876, 
0.0827043835101492, 0.109631516692048, 0.0765927537218141, 0.0870322381232645, 
0.0515014684350035, 0.0683398169561522, 0.0554744519820495, 0.0363337127130046, 
0.0463575341160886, 0.0671060291182815, 0.102443247236942)

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

Таким образом, вопрос в том, что является подходящим способом для создания сопоставимого профиля из соответственных и как сравнить оба профиля ...

Надеюсь, это было немного лучше понять. Спасибо за помощь!

1 Ответ

0 голосов
/ 04 января 2012

Во втором случае у вас есть матрица, которая на самом деле представляет собой сложенный вектор длины prod(dim(mtx)), сворачивание которого управляется атрибутом .Dim.В первом случае у вас есть специальная форма списка с длиной == 14, называемая фреймом данных, который, как и список, имеет прямоугольную форму, но в отличие от матрицы может иметь значения различных режимов: логический, целочисленный, символьный, числовой илифактор.Это действительно коллекция именованных списков, которые проверяются на одинаковую длину.Вы говорите о ячейках и профилях, но ни один из них на самом деле не является термином R, поэтому немного неясно, о чем на самом деле просят ваши два последних вопроса.

Если вы хотите быстро просмотреть данные-объекты, попробуйте:

str(object-name)

Ответ: Если я правильно понимаю ваше обновление, вы хотите разработать меру расстояния между строками в первом объекте, который я собираюсь назвать «Профили», и вторым объектом, которыйЯ собираюсь позвонить "Клетки".Поскольку все строки профиля имеют сумму 1, их среднее значение составляет 1/14.Вы можете создать матрицу, элементы которой равны 1 или 0, в зависимости от того, находится ли каждый элемент строки / столбца в «Профили» выше или ниже среднего.Назовите это «продолжением».

discrProfTF <- 0+ (profiles >1/14)

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

Существует distфункция, которая имеет «двоичную» меру, и вы можете применить ее к:

cbind(discrProfTF, Cells)   # a 30 x 14 matrix

dist(cbind(discrProfTF, Cells), "binary") # a 30 x 30 lower-triangular "distance matrix"

И вы игнорируете расстояния, сравнивая строки разных процедур и строки Ячеек, и просто сосредотачиваетесь на расстоянии между процессами и Ячейками.Я думаю, что вы найдете другие стратегии, применимые в Cluster Task View.

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