Регресс или устранение возраста как мешающего фактора из экспериментального результата - PullRequest
2 голосов
/ 21 октября 2019

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

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

Я сделал следующее:

modcombat = model.matrix(~1, data=data.frame(data_val))
modcancer = model.matrix(~Age, data=data.frame(data_val))
combat_edata = ComBat(dat=t(data_val), batch=Age, mod=modcombat, par.prior=TRUE, prior.plots=FALSE)

pValuesComBat = f.pvalue(combat_edata,mod,mod0)
qValuesComBat = p.adjust(pValuesComBat,method="BH")

data_val - матрица генной экспрессии / значений CT. Возраст - вектор возраста для всех образцов. Для некоторых генов значение р является значимым. Так как правильно изменить эти значения генов, чтобы убрать эффект возраста?

Я также попробовал линейную регрессию (после проверки некоторых блогов):

lm1 = lm(data_val[1,] ~ Age) #1 indicates first gene. Did this for all genes
cor.test(lm1$residuals, Age)

Блог предложил проверить p-val соотношения невязок и смешанных факторов. Я не понимаю, зачем тестировать соотношение остатков с возрастом. И как применить коррекцию к значениям КТ с помощью регрессии?

Пожалуйста, укажите, правильно ли то, что я сделал. Если это неверно, пожалуйста, сообщите мне, как получить data_val без эффекта возраста.

1 Ответ

0 голосов
/ 25 октября 2019

Существует множество методов для решения этой проблемы: -

Базовый статистический подход

Очень простой метод для включения эффекта параметра Age в данные исделать окончательный возрастной набор данных агностиком следующим:

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

Для стандартизации вы можете использовать два метода:

1) z-score нормализация: при этом вы можете изменить каждую точку данных на (x-mean(x))/standard-dev(x));с помощью среднего и группового стандартного отклонения.

2) mean нормализация: при этом вы просто вычитаете групповое значение из каждого наблюдения.

3) min-max нормализация: это модификация нормализации z-счета, в которой вместо standard deviation вы можете использовать min или max группы, т.е. (x-mean(x))/min(x)) или(x-mean(x))/max(x)).

Для более сложной статистики:

Вы можете получить важность всех функций / столбцов в вашем наборе данных, используя некоторые алгоритмы, такие как PCA (основной компонентанализ) (https://en.wikipedia.org/wiki/Principal_component_analysis),, хотя он обычно используется в качестве алгоритма уменьшения размерности, тем не менее его можно использовать для получения дисперсии во всем наборе данных, а также для получения информации о важности функций.

Ниже приведенопростой пример, объясняющий это:

Я изобразил важность, используя биплот и график, используя набор данных decathlon из пакета factoextra:

library("factoextra")
data(decathlon2)

colnames(data)

data<-decathlon2[,1:10] # taking only 10 variables/columns for easyness

res.pca <- prcomp(data, scale = TRUE)
#fviz_eig(res.pca)
fviz_pca_var(res.pca,
             col.var = "contrib", # Color by contributions to the PC
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = TRUE     # Avoid text overlapping
)


hep.PC.cor = prcomp(data, scale=TRUE)

biplot(hep.PC.cor)

output

[1] "X100m"        "Long.jump"    "Shot.put"     "High.jump"    "X400m"        "X110m.hurdle"
 [7] "Discus"       "Pole.vault"   "Javeline"     "X1500m"

enter image description here

enter image description here

На этих похожих линиях вы можете использовать PCA для ваших данных, чтобы получить важностьпараметр age в ваших данных.

Надеюсь, это поможет, если я найду большетакими методами я поделюсь.

...