Вопрос или проблема
У меня есть такой датафрейм:
dframe <- structure(list(c(60, 91, 377, 419, 893, 905), c(-0.6647, -0.0275000000000001,
-0.6311, 0.1328, -0.4559, -1.0208), c(-1.6964, -1.3851, -1.1428,
-1.4191, -1.2979, -1.441), c(4.1104, 2.998, 3.4623, 1.9545, 3.5166,
3.9912), c(-1.6663, -1.0789, -1.6608, -1.0137, -1.4022, -1.6189
), c(0.902, 0.5417, 0.2651, -0.4998, 0.72, 1.0902), c(0.061,
-0.1321, -0.6613, -0.9655, -0.3879, -0.3222), c(0.6573, -1.8156,
-1.1072, -1.6147, -1.7412, -0.8048), c(-1.6561, 3.3495, 3.1694,
4.7327, 3.7275, 3.0135), c(0.2499, -1.5437, -1.3843, -1.8279,
-1.487, -1.133), c(1.1265, 0.2224, 0.5074, 0.9983, 0.4906, 0.3672
), structure(c(3, 1, 3, 1, 1, 3), label = "TwoStep Cluster Number", labels = c(`Outlier Cluster` = -1), class = "haven_labelled"),
structure(c(2, 3, 1, 3, 3, 1), label = "TwoStep Cluster Number", labels = c(`Outlier Cluster` = -1), class = "haven_labelled")), .Names = c("id",
"colA", "colB", "colC", "colD", "colE", "colA_new", "colB_new",
"colC_new", "colD_new", "colE_new", NA, NA), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
dframe
id colA colB colC colD colE colA_new colB_new colC_new colD_new colE_new NA NA
1 60 -0.6647 -1.6964 4.1104 -1.6663 0.9020 0.0610 0.6573 -1.6561 0.2499 1.1265 3 2
2 91 -0.0275 -1.3851 2.9980 -1.0789 0.5417 -0.1321 -1.8156 3.3495 -1.5437 0.2224 1 3
3 377 -0.6311 -1.1428 3.4623 -1.6608 0.2651 -0.6613 -1.1072 3.1694 -1.3843 0.5074 3 1
4 419 0.1328 -1.4191 1.9545 -1.0137 -0.4998 -0.9655 -1.6147 4.7327 -1.8279 0.9983 1 3
5 893 -0.4559 -1.2979 3.5166 -1.4022 0.7200 -0.3879 -1.7412 3.7275 -1.4870 0.4906 1 3
6 905 -1.0208 -1.4410 3.9912 -1.6189 1.0902 -0.3222 -0.8048 3.0135 -1.1330 0.3672 3 1
id уникален. Я хочу узнать для каждой пары переменных, таких как colA-colA_new, colB-colB_new и т.д., как изменения в значениях меняются в первом и новом столбце.
Как я могу это смоделировать?
Перед тем как делать что-то более сложное, я бы проверил корреляцию пар новых значений / старых значений. Если кажется, что есть линейная зависимость или какая-то корреляция, это будет легко решить. Если это не так и “новое” значение для каждого столбца зависит от каждого другого столбца ненадежным образом, вам, возможно, придется использовать более сложные методы.
Такую задачу называют Многомерным Регрессионным Анализом, и если у вас достаточно большой набор данных, вы можете попробовать использовать нейронную сеть. Я бы использовал старые значения для каждой переменной как входные данные, а новые значения как выходные. Полносвязная нейронная сеть — с размером, зависящим от объема вашего набора данных — может быть хорошим первым шагом. Но, честно говоря, у меня нет большого опыта с такими моделями, и я не знаю, есть ли какие-либо доступные онлайн-учебники. Другой вариант — обучать отдельные регрессионные модели для каждого вывода. В таком случае вы можете искать корреляции с различными входами и, возможно, исключать любые бесполезные.
Кстати, какие названия у последних двух столбцов NA? Если они несут информацию, я бы добавил их в входной слой.
Ответ или решение
Для решения задачи анализа изменений в переменных в вашем датафрейме, необходимо учитывать несколько ключевых аспектов. Рассмотрим поэтапно подход, который поможет выявить изменения между старыми и новыми значениями переменных.
1. Корреляционный анализ
Первоначальным шагом будет выполнение корреляционного анализа между парами переменных: colA
и colA_new
, colB
и colB_new
и так далее. Этот анализ поможет определить, существует ли линейная зависимость между старыми и новыми значениями. Для этого можно использовать коэффициент корреляции Пирсона, который даст представление о том, насколько сильно связаны переменные.
cor(dframe[, c("colA", "colA_new")])
cor(dframe[, c("colB", "colB_new")])
# и так далее для остальных колонок
2. Моделирование зависимостей
Если результаты корреляционного анализа покажут значимую линейную зависимость, можно использовать линейные модели для предсказания новых значений на основе старых. Для этого подойдут простые линейные регрессии:
model_A <- lm(colA_new ~ colA, data = dframe)
summary(model_A)
Если же корреляции нет, можно рассмотреть более сложные методы.
3. Мультивариантный регрессионный анализ
Если новые значения зависят от нескольких старых переменных, стоит применить мультивариантный регрессионный анализ, который учитывает взаимодействие между несколькими переменными. Это поможет выявить, как каждая старая переменная влияет на новую.
model_combined <- lm(cbind(colA_new, colB_new, colC_new) ~ colA + colB + colC, data = dframe)
summary(model_combined)
Здесь cbind
объединяет новые переменные в один набор данных, чтобы сразу провести анализ для всех переменных.
4. Нейронные сети
При наличии большого объема данных стоит также рассмотреть использование нейронной сети. Каждое из старых значений можно использовать в качестве входных данных, а новые значения — в качестве целевых выходов. Для построения модели нейронной сети можно использовать пакеты, такие как keras
или nnet
в R.
library(keras)
# Здесь определите структуру модели, количество слоев и нейронов, а также функцию активации.
5. Обработка дополнительных переменных
Необходимо обратить внимание на последние два столбца, помеченные как NA
. Если эти данные несут информацию (например, категориальные переменные), их следует включить в анализ. Они могут существенно повлиять на результаты моделирования и взаимосвязи между значениями.
В заключение
Подход к решению задачи будет зависеть от выявленных взаимосвязей. Начинать стоит с анализа корреляции, а затем двигаться к более сложным моделям, если линейная зависимость не наблюдается. Использование нейронных сетей может быть оправдано при наличии большого объема данных. Не забудьте учитывать все доступные переменные, которые могут оказать влияние на результаты.