5

パッケージgamから使用して、一般化加法モデルに適合します。従属変数、独立変数、他の独立変数、および 2 水準因子mgcvを含むデータ テーブルがあります。次のモデルに適合したいYXOthFac

Y ~ s(X) + Oth

s(X)ただし、項が因子の 2 つのレベルのいずれかにのみ適合するという追加の制約がありますFac==1。他の用語Othは、データ全体に適合する必要があります。

探索してみs(X,by=Fac)ましたが、これは の適合性に偏りがありOthます。つまり、 if のみにX関連する信念を表現したいと思います。それ以外の場合は、モデル化する意味がありません。YFac==1X

4

2 に答える 2

5

チープなトリック: Fac == 1 の場合は X であり、それ以外の場合は 0 である補助変数を使用します。

library("mgcv")
library("ggplot2")


# simulate data

N <- 1e3

dat <- data.frame(covariate = runif(N),
                  predictor = runif(N),
                  group = factor(sample(0:1, N, TRUE)))

dat$outcome <- rnorm(N,
                     1 * dat$covariate +
                     ifelse(dat$group == 1,
                            .5 * dat$predictor +
                            1.5 * sin(dat$predictor * pi),
                            0), .1)

# some plots

ggplot(dat, aes(x = predictor, y = outcome,
                col = group, group = group)) +
    geom_point()

ggplot(dat, aes(x = covariate, y = outcome,
                col = group, group = group)) +
    geom_point()

# create auxiliary variable

dat$aux <- ifelse(dat$group == 1,
                  dat$predictor,
                  0)

# fit the data

fit1 <- gam(outcome ~ covariate + s(predictor, by = group),
            data = dat)

fit2 <- gam(outcome ~ covariate + s(aux, by = group),
            data = dat)

# compare fits

summary(fit1)

summary(fit2)
于 2015-12-09T17:20:02.013 に答える
1

私の理解が正しければ、次のような相互作用を持つモデルについて考えていることになります。

Y ~ 0th + (Fac==1)*s(X)  

「場合にのみX関連する信念を表現したい」場合は、としてではなく、変数として扱います。この場合、インタラクションと 1 セットのみが得られます( 2 つある場合)。このタイプのモデルは.YFac==1Facfactornumericnumericcoefficientsfactorvarying coefficient model

# some data
data <- data.frame(th = runif(100),
              X = runif(100),
              Y = runif(100),
              Fac = sample(0:1, 100, TRUE))
data$Fac<-as.numeric(as.character(data$Fac)) #change to numeric
# then run model
gam(Y~s(X, by=Fac)+th,data=data)

byドキュメント内のオプションについては、ドキュメントを参照してください?s

于 2015-12-15T16:06:05.470 に答える