Многократный Анализ Соответствия на продольных данных
Я хотел бы изучить профиль двух модальностей категориальной переменной во времени по отношению к данному набору других категориальных переменных. Я вставляю воспроизводимый пример такого набора данных ниже.
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.
Заранее благодарю за помощь!
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 или любой другой категориальной переменной.