Анализ множественных соответствий на лонгитюдных данных

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

set.seed(90114)
V1<-sample(rep(c("a", "A"), 100))
V2<-sample(rep(c("a", "A", "b", "B"), 50))
V3<-sample(rep(c("F", "M", "I"), 67), 200)
V4<-sample(rep(c("C", "R"), 100))
V5<-sample(rep(c(1970, 1980, 1990, 2000, 2010), 40))
data<-data.frame(V1, V2, V3, V4, V5)

Чтобы изучить поведение таких модальностей, я решил использовать анализ множественных соответствий (пакет FactoMineR). Чтобы учесть изменение во времени, можно разделить набор данных на 5 подвыборок, которые представляют разные уровни V5, а затем выполнить MCA для каждого подмножества. Остальная часть анализа состоит в сравнении положения модальностей на разных биплотах. Однако такая практика не без проблем, если исходный набор данных слишком мал. В таком случае размеры могут быть перевернуты или, что еще хуже, расположение активных переменных может измениться от одного графика к другому.

Чтобы избежать этой проблемы, одним из решений может быть стабилизация положения активных переменных во всех подмножествах и последующее предсказание координат дополнительной переменной, позволяющей последней перемещаться во времени. Я где-то читал, что координаты модальности можно получить, вычислив средневзвешенное значение координат людей, у которых эта модальность находится. Таким образом, нахождение координат модальности для 1970 года будет сводиться к вычислению средневзвешенного значения координат индивидов в подмножестве 1970 года для этой модальности. Однако я не знаю, является ли это обычной практикой, и если да, то просто не знаю, как реализовать такие вычисления. Я вставляю остальную часть кода, чтобы вы могли визуализировать проблему.

data.mca<-MCA(data[, -5], quali.sup=1, graph=F)

# Retrieve the coordinates of the first and second dimension

DIM1<-data.mca$ind$coord[, 1]
DIM2<-data.mca$ind$coord[, 2]

# Append the coordinates to the original dataframe

data1<-data.frame(data, DIM1, DIM2)

# Split the data into 5 clusters according to V5 ("year")

data1.split<-split(data1, data1$V5)
data1.split<-lapply(data1.split, function(x) x=x[, -5]) # to remove the fifth column with the years, no longer needed
seventies<-as.data.frame(data1.split[1])
eightties<-as.data.frame(data1.split[2])
# ...

a.1970<-seventies[seventies$X1970.V1=="a",]
A.1970<-seventies[seventies$X1970.V1=="A",]

# The idea, then, is to find the coordinates of the modalities "a" and "A" by computing the weighted mean of their respective indivuduals for each subset. The arithmetic mean would yield

# a.1970.DIM1<-mean(a.1970$X1970.DIM1) # 0.0818
# a.1970.DIM2<-mean(a.1970$X1970.DIM2) # 0.1104

# and so on for the other levels of V5.

Заранее благодарю за помощь!


person CBechet    schedule 22.11.2017    source источник


Ответы (1)


Я нашел решение своей проблемы. Мы можем просто взвесить среднее значение координат значением, возвращаемым row.w в FactoMineR. Чтобы учесть расширение MCA, значения результирующих координат барицентров следует разделить на квадратный корень из собственного значения измерения.

DIM1<-data.mca$ind$coord[, 1]
DIM2<-data.mca$ind$coord[, 2]
WEIGHT<-data.mca$call$row.w
data1<-data.frame(data, WEIGHT, DIM1, DIM2)

# Splitting the dataset according to values of V1

v1_a<-data1[data1$V1=="a",]
v1_A<-data1[data1$V1=="A",]

# Computing the weighted average of the coordinates of Dim1 and Dim2 for the first category of V1

V1_a_Dim1<-sum(v1_a$WEIGHT*v1_a$DIM1)/100 # -0.0248
v1_a_Dim2<-sum(v1_a$WEIGHT*v1_a$DIM2)/100 # -0.0382

# Account for the dilatation of the dimensions...

V1_a_Dim1/sqrt(data.mca$eig[1,1])
[1] -0.03923839
v1_a_Dim2/sqrt(data.mca$eig[2,1])
[1] -0.06338353

# ... which is the same as the following:

categories<-data.mca$quali.sup$coord[, 1:2]
categories
#            Dim 1       Dim 2
# V1_a -0.03923839 -0.06338353
# V1_A  0.03923839  0.06338353

Это может быть применено к различным разделам данных в соответствии с V5 или любой другой категориальной переменной.

person CBechet    schedule 23.11.2017