Интерпретация подходящих коэффициентов MARS

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

Мои данные представляют собой измерения экспрессии генов с течением времени в 14 временных точках, по 2 выборки от каждого пола на каждый временной момент. Вот пример одного гена:

df1 <- data.frame(y = c(0.145, 0.1, 0.144, -0.002, -0.031, 0.062, 0.089, -0.029, 0.046, -0.008, 0.001, -0.147, -0.009, -0.021, 0.169, 0.21, 0.141, 0.095, -0.125, 0.156, 0.156, 0.252, 0.135, 0.123, -0.037, -0.154, -0.162, -0.112, 0.026, 0.069, -0.068, 0.006, -0.349, -0.07, -0.147, -0.079, -0.146, -0.145, -0.377, -0.273, -0.176, -0.204, -0.013, 0.116, 0.033, 0.049, -0.104, -0.086, -0.068, -0.096, -0.056, -0.016, -0.281, -0.277, -0.29, -0.203),
                 t = rep(c(-1, 0, 1, 1.58, 2, 2.58, 3, 3.32, 3.58, 4.17, 4.58, 5.58, 6.17, 7.39),4),
                 sex = c(rep("F",28),rep("M",28)))
df1$sex <- factor(df1$sex, levels = c("M","F"))

Который выглядит как:

library(ggplot2)
ggplot(df1, aes(y = y, x = t, color = sex)) + geom_point(size = 3) + theme_minimal()

Я хочу оптимизировать # узлы и их расположение только для t переменная, следовательно, я подхожу:

mars.fit <- earth::earth(y ~ sex + t, data = df1, linpreds = "sex", thresh = 0, nfold = 10, ncross = 30, varmod.method = "lm")

Где используются последние три аргумента, чтобы я мог построить модель, используя: plotmo::plotmo(mars.fit, pt.col=1, level=.95):

Коэффициенты, которые я получаю:

> summary(lm(y ~ mars.fit$bx, data = df1))$coefficients
                        Estimate Std. Error   t value     Pr(>|t|)
(Intercept)          -0.20434144 0.04734724 -4.315805 7.504512e-05
mars.fit$bxh(t-3.32) -0.27889610 0.06733161 -4.142127 1.323844e-04
mars.fit$bxh(3.32-t)  0.06078628 0.01666151  3.648306 6.297134e-04
mars.fit$bxsexF       0.15757143 0.02252191  6.996362 6.080110e-09
mars.fit$bxh(t-4.58)  0.15469776 0.04939908  3.131592 2.903537e-03
mars.fit$bxh(t-2)     0.12419721 0.04345528  2.858046 6.198530e-03

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

Любая идея?

К тому же, mars.fit$dirs дает:

> mars.fit$dirs
            sexF  t
(Intercept)    0  0
h(t-3.32)      0  1
h(3.32-t)      0 -1
sexF           2  0
h(t-4.58)      0  1
h(t-2)         0  1

Любая идея, какова ценность 2 за sexF средства?

Мой другой вопрос, как бы я смоделировать interaction между переменной, для которой я хочу оптимизировать узлы, и переменной, которую я не оптимизирую (т. е. для линейного предиктора linpred)?

Вот пример набора данных, который включает в себя данные выше и другой набор из 56 образцов, с тем же дизайном, но из другой группы (группа B):

df2 <- data.frame(y = c(-0.07, -0.05, -0.08, -0.12, -0.02, -0.11, -0.16, 0.02, -0.24, -0.13, -0.2, -0.52, -0.2, -0.37, -0.12, 0.14, -0.02, -0.19, -0.05, -0.09, -0.13, -0.09, -0.44, -0.27, -0.16, -0.38, -0.23, -0.26, -0.09, -0.11, -0.06, -0.08, -0.02, -0.2, -0.21, -0.28, -0.5, -0.34, -0.16, -0.43, -0.16, -0.49, 0.04, 0.09, -0.01, -0.18, 0.16, -0.39, -0.21, -0.04, -0.09, -0.07, -0.13, -0.54, -0.13, -0.57, 0.27, 0.61, 1.57, 1.94, 2.2, 2.4, 2.13, 2.18, 2.12, 1.95, 1.99, 2.16, 2.38, 2.7, 0.4, 0.58, 1.33, 2.04, 1.99, 1.94, 1.59, 1.55, 1.94, 1.67, 2.36, 2.05, 2.25, 2.22, 0.31, 0.75, 1.84, 2.21, 2.51, 2.15, 2.33, 1.91, 2.4, 2.24, 1.02, 2.31, 2.45, 2.79, 0.35, 0.53, 1.32, 2.07, 2.13, 2.22, 2, 2.14, 2.28, 2.11, 1.92, 2.26, 2.1, 2.67),
                  t = rep(c(-1, 0, 1, 1.58, 2, 2.58, 3, 3.32, 3.58, 4.17, 4.58, 5.58, 6.17, 7.39),8),
                  group = c(rep("B",56),rep("A",56)),
                  sex = rep(c(rep("F",28),rep("M",28)),2))
df2$group <- factor(df2$group, levels = c("A","B"))
df2$sex <- factor(df2$sex, levels = c("M","F"))
df2$group_sex <- paste0(df2$group,"_",df2$sex)

Который выглядит как:

library(ggplot2)
ggplot(df2, aes(y = y, x = t, color = group_sex)) + geom_point(size = 3) + theme_minimal()

(group * t взаимодействие здесь довольно понятно)

Это правильно MARS модель:

earth::earth(y ~ sex + group*t, data = df2, thresh = 0, nfold = 10, ncross = 30, varmod.method = "lm")

Составление графика с использованием plotmo дает:

И резюме этой модели:

                              Estimate Std. Error    t value     Pr(>|t|)
(Intercept)                  0.8761333 0.16813559   5.210873 9.704648e-07
mars.fit$bxgroupB           -0.5412963 0.09186638  -5.892213 4.844315e-08
mars.fit$bxh(1.58-t)        -0.1815588 0.07860784  -2.309678 2.290128e-02
mars.fit$bxh(groupB:t-2)     1.0255966 0.10599440   9.675950 3.890338e-16
mars.fit$bxh(groupB:t-4.58) -0.4184100 0.09712737  -4.307849 3.774816e-05
mars.fit$bxh(t-4.58)         0.4021478 0.06937728   5.796534 7.457303e-08
mars.fit$bxh(t-2)           -0.8350190 0.11881038  -7.028165 2.338724e-10
mars.fit$bxh(t-0)            0.6909900 0.09677237   7.140364 1.356748e-10
mars.fit$bxh(groupB:t-0)    -0.9231932 0.06616621 -13.952637 1.769394e-25

Здесь то, что я хотел бы извлечь, это group*t наклон на каждом отрезке (т. е. groupB:t-knot).

Спасибо

0 ответов

Другие вопросы по тегам