ANCOVA in Rは異なるインターセプトを示唆していますが、95%のCIは重複しています…これはどのように可能ですか?


9

2つの共変量とカテゴリカルグループ化変数を含むデータセットがあり、異なるグループ化変数に関連付けられている共変量間で勾配または切片に有意差があるかどうかを知りたいと考えています。anova()とlm()を使用して、3つの異なるモデルの適合を比較しました:1)単一の勾配と切片、2)各グループの異なる切片、および3)勾配と各グループの切片。anova()の一般的な線形テストによると、2番目のモデルは3つのうち最も適切です。各グループに個別の切片を含めることにより、モデルに大幅な改善があります。ただし、これらのインターセプトの95%信頼区間を見ると、これらはすべて重複しており、インターセプト間に有意差がないことを示唆しています。これら2つの結果をどのように調整できますか?モデル選択法の結果を解釈する別の方法は、切片間に少なくとも1つの有意差がなければならないということであると考えましたが、おそらくこれは正しくありませんか?

以下は、この分析を再現するためのRコードです。dput()関数を使用しているので、取り組んでいるのとまったく同じデータを操作できます。

# Begin R Script
# > dput(data)
structure(list(Head = c(1.92, 1.93, 1.79, 1.94, 1.91, 1.88, 1.91, 
1.9, 1.97, 1.97, 1.95, 1.93, 1.95, 2, 1.87, 1.88, 1.97, 1.88, 
1.89, 1.86, 1.86, 1.97, 2.02, 2.04, 1.9, 1.83, 1.95, 1.87, 1.93, 
1.94, 1.91, 1.96, 1.89, 1.87, 1.95, 1.86, 2.03, 1.88, 1.98, 1.97, 
1.86, 2.04, 1.86, 1.92, 1.98, 1.86, 1.83, 1.93, 1.9, 1.97, 1.92, 
2.04, 1.92, 1.9, 1.93, 1.96, 1.91, 2.01, 1.97, 1.96, 1.76, 1.84, 
1.92, 1.96, 1.87, 2.1, 2.17, 2.1, 2.11, 2.17, 2.12, 2.06, 2.06, 
2.1, 2.05, 2.07, 2.2, 2.14, 2.02, 2.08, 2.16, 2.11, 2.29, 2.08, 
2.04, 2.12, 2.02, 2.22, 2.22, 2.2, 2.26, 2.15, 2, 2.24, 2.18, 
2.07, 2.06, 2.18, 2.14, 2.13, 2.2, 2.1, 2.13, 2.15, 2.25, 2.14, 
2.07, 1.98, 2.16, 2.11, 2.21, 2.18, 2.13, 2.06, 2.21, 2.08, 1.88, 
1.81, 1.87, 1.88, 1.87, 1.79, 1.99, 1.87, 1.95, 1.91, 1.99, 1.85, 
2.03, 1.88, 1.88, 1.87, 1.85, 1.94, 1.98, 2.01, 1.82, 1.85, 1.75, 
1.95, 1.92, 1.91, 1.98, 1.92, 1.96, 1.9, 1.86, 1.97, 2.06, 1.86, 
1.91, 2.01, 1.73, 1.97, 1.94, 1.81, 1.86, 1.99, 1.96, 1.94, 1.85, 
1.91, 1.96, 1.9, 1.98, 1.89, 1.88, 1.95, 1.9, 1.94, NA, 1.84, 
1.83, 1.84, 1.96, 1.74, 1.91, 1.84, 1.88, 1.83, 1.93, 1.78, 1.88, 
1.93, 2.15, 2.16, 2.23, 2.09, 2.36, 2.31, 2.25, 2.29, 2.3, 2.04, 
2.22, 2.19, 2.25, 2.31, 2.3, 2.28, 2.25, 2.15, 2.29, 2.24, 2.34, 
2.2, 2.24, 2.17, 2.26, 2.18, 2.17, 2.34, 2.23, 2.36, 2.31, 2.13, 
2.2, 2.27, 2.27, 2.2, 2.34, 2.12, 2.26, 2.18, 2.31, 2.24, 2.26, 
2.15, 2.29, 2.14, 2.25, 2.31, 2.13, 2.09, 2.24, 2.26, 2.26, 2.21, 
2.25, 2.29, 2.15, 2.2, 2.18, 2.16, 2.14, 2.26, 2.22, 2.12, 2.12, 
2.16, 2.27, 2.17, 2.27, 2.17, 2.3, 2.25, 2.17, 2.27, 2.06, 2.13, 
2.11, 2.11, 1.97, 2.09, 2.06, 2.11, 2.09, 2.08, 2.17, 2.12, 2.13, 
1.99, 2.08, 2.01, 1.97, 1.97, 2.09, 1.94, 2.06, 2.09, 2.04, 2, 
2.14, 2.07, 1.98, 2, 2.19, 2.12, 2.06, 2, 2.02, 2.16, 2.1, 1.97, 
1.97, 2.1, 2.02, 1.99, 2.13, 2.05, 2.05, 2.16, 2.02, 2.02, 2.08, 
1.98, 2.04, 2.02, 2.07, 2.02, 2.02, 2.02), Site = structure(c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L), .Label = c("ANZ", "BC", "DV", "MC", 
"RB", "WW"), class = "factor"), Leg = c(2.38, 2.45, 2.22, 2.23, 
2.26, 2.32, 2.28, 2.17, 2.39, 2.27, 2.42, 2.33, 2.31, 2.32, 2.25, 
2.27, 2.38, 2.28, 2.33, 2.24, 2.21, 2.22, 2.42, 2.23, 2.36, 2.2, 
2.28, 2.23, 2.33, 2.35, 2.36, 2.26, 2.26, 2.3, 2.23, 2.31, 2.27, 
2.23, 2.37, 2.27, 2.26, 2.3, 2.33, 2.34, 2.27, 2.4, 2.22, 2.25, 
2.28, 2.33, 2.26, 2.32, 2.29, 2.31, 2.37, 2.24, 2.26, 2.36, 2.32, 
2.32, 2.15, 2.2, 2.29, 2.37, 2.26, 2.24, 2.23, 2.24, 2.26, 2.18, 
2.11, 2.23, 2.31, 2.25, 2.15, 2.3, 2.33, 2.35, 2.21, 2.36, 2.27, 
2.24, 2.35, 2.24, 2.33, 2.32, 2.24, 2.35, 2.36, 2.39, 2.28, 2.36, 
2.19, 2.27, 2.39, 2.23, 2.29, 2.32, 2.3, 2.32, NA, 2.25, 2.24, 
2.21, 2.37, 2.21, 2.21, 2.27, 2.27, 2.26, 2.19, 2.2, 2.25, 2.25, 
2.25, NA, 2.24, 2.17, 2.2, 2.2, 2.18, 2.14, 2.17, 2.27, 2.28, 
2.27, 2.29, 2.23, 2.25, 2.33, 2.22, 2.29, 2.19, 2.15, 2.24, 2.24, 
2.26, 2.25, 2.09, 2.27, 2.18, 2.2, 2.25, 2.24, 2.18, 2.3, 2.26, 
2.18, 2.27, 2.12, 2.18, 2.33, 2.13, 2.28, 2.23, 2.16, 2.2, 2.3, 
2.31, 2.18, 2.33, 2.29, 2.26, 2.21, 2.22, 2.27, 2.32, 2.24, 2.25, 
2.17, 2.2, 2.26, 2.27, 2.24, 2.25, 2.09, 2.25, 2.21, 2.24, 2.21, 
2.22, 2.13, 2.24, 2.21, 2.3, 2.34, 2.35, 2.32, 2.46, 2.43, 2.42, 
2.41, 2.32, 2.25, 2.33, 2.19, 2.45, 2.32, 2.4, 2.38, 2.35, 2.39, 
2.29, 2.35, 2.43, 2.29, 2.33, 2.31, 2.28, 2.38, 2.32, 2.43, 2.27, 
2.4, 2.37, 2.27, 2.41, 2.32, 2.38, 2.23, 2.33, 2.21, 2.34, 2.19, 
2.34, 2.35, 2.35, 2.31, 2.33, 2.41, 2.53, 2.39, 2.17, 2.16, 2.38, 
2.34, 2.33, 2.33, 2.29, 2.43, 2.28, 2.34, 2.38, 2.3, 2.29, 2.43, 
2.36, 2.24, 2.35, 2.38, 2.4, 2.36, 2.42, 2.28, 2.45, 2.33, 2.32, 
2.33, 2.31, 2.44, 2.37, 2.4, 2.35, 2.33, 2.31, 2.36, 2.43, 2.38, 
2.4, 2.38, 2.46, 2.33, 2.38, 2.23, 2.24, 2.39, 2.36, 2.19, 2.32, 
2.37, 2.39, 2.34, 2.39, 2.23, 2.25, 2.29, 2.39, 2.35, NA, 2.28, 
2.35, 2.38, 2.34, 2.17, 2.29, NA, 2.26, NA, NA, NA, 2.24, 2.33, 
2.23, 2.28, 2.29, 2.23, 2.2, 2.27, 2.31, 2.31, 2.26, 2.28)), .Names = c("Head", 
"Site", "Leg"), class = "data.frame", row.names = c(NA, -312L
)) 

# plot graph
library(ggplot2)

qplot(Head, Leg, 
    color=Site, 
    data=data) + 
        stat_smooth(method="lm", alpha=0.2) + 
        theme_bw()

ここに画像の説明を入力してください

# create linear models
lm.1 <- lm(Leg ~ Head, data)
lm.2 <- lm(Leg ~ Head + Site, data)
lm.3 <- lm(Leg ~ Head*Site, data)

# evaluate linear models
anova(lm.1, lm.2, lm.3)
anova(lm.1, lm.2)

# > anova(lm.1, lm.2)
# Analysis of Variance Table
# Model 1: Leg.3.1 ~ Head.W1
# Model 2: Leg.3.1 ~ Head.W1 + Site
  # Res.Df     RSS Df Sum of Sq     F    Pr(>F)    
# 1    302 1.25589                                 
# 2    297 0.91332  5   0.34257 22.28 < 2.2e-16 ***


# examining the multiple-intercepts model (lm.2)
summary(lm.2)
coef(lm.2)
confint(lm.2)

# extracting the intercepts
intercepts <- coef(lm.2)[c(1, 3:7)]
intercepts.1 <- intercepts[1]
intercepts <- intercepts.1 + intercepts
intercepts[1] <- intercepts.1
intercepts

# extracting the confidence intervals
ci <- confint(lm.2)[c(1, 3:7),]
ci[2:6,] <- ci[2:6,] + confint(lm.2)[1,]
ci[,1]

# putting everything together in a dataframe
labels <- c("ANZ", "BC", "DV", "MC", "RB", "WW")
ci.dataframe <- data.frame(Site=labels, Intercept=intercepts, CI.low = ci[,1], CI.high = ci[,2])
ci.dataframe

# plotting intercepts and 95% CI
qplot(Site, Intercept, geom=c("point", "errorbar"), ymin=CI.low, ymax=CI.high, data=ci.dataframe, ylab="Intercept & 95% CI")

アンコバ迎撃

要約すると、問題はインターセプトの95%CIがすべてオーバーラップすることですが、モデル選択方法は、最良のモデルが異なるインターセプトに適合するものであることを示唆しています。したがって、モデル選択方法に欠陥があるか、切片の推定値の95%CIが誤って計算されたと考える傾向があります。どんな考えでも大歓迎です!


1
あなたの統計用語は混乱しています。あなたはグループの意味を「切片」と融合させています。実際にはコーディングの問題ではありません。stats.exchangeに移動することをモデレーターに提案します。
DWin

回答:


11

有意と非有意違いは(常に)統計的に有意ではないことに注意してください

さて、質問の要点として、モデル1はプールされた回帰と呼ばれ、モデル2はプールされない回帰と呼ばれます。お気づきのように、プールされた回帰では、グループは関連性がないと想定します。つまり、グループ間の分散はゼロに設定されます。

グループ化されていない回帰では、グループごとの切片を使用して、分散を無限大に設定します。

一般的に、私は、階層モデルまたは部分プールされた回帰(または収縮推定量)である中間ソリューションを優先します。lmer4パッケージを使用して、このモデルをRに適合させることができます。

最後に、Gelmanによるこの論文を見てください。彼は、階層モデルが多重比較問題に役立つ理由を論じています(あなたの場合、グループごとの係数は異なりますか?多重比較のp値をどのように修正しますか)。

たとえば、あなたの場合、

library(lme4)
summary(lmer( leg ~ head + (1 | site)) # varying intercept model

変化する切片、変化する勾配(3番目のモデル)を近似する場合は、次を実行します。

summary(lmer( leg ~ head + (1 | site) + (0+head|site) )) # varying intercept, varying-slope model

次に、グループ分散を調べて、それがゼロとは異なり(プールされた回帰は優れたモデルではありません)、無限大から離れている(プールされていない回帰)かどうかを確認できます。

更新:コメント(下記参照)の後、私は自分の答えを拡張することにしました。

階層モデルの目的は、特にこのような場合、グループ(この場合はサイト)ごとにバリエーションをモデル化することです。したがって、ANOVAを実行してモデルが別のモデルと異なるかどうかをテストする代わりに、モデルの予測を見て、グループ別の予測が階層モデルとプールされた回帰(古典的回帰)のどちらで優れているかを確認します。

さて、私は上空で実行し、それを実行しました

ranef(lmer( leg ~ head + (1 | site) + (0+head|site) )

変化する勾配の推定値としてゼロを返します(サイトごとに異なる頭部の影響)。それから私は走った

ranef(lmer( leg ~ head + (head| site))

そして、私は頭のさまざまな効果についてゼロ以外の見積もりを得ました。私がこれを見つけたのは初めてなので、なぜこれが起こったのかはまだわかりません。この問題については本当に申し訳ありませんが、私の弁護のために、私はlmer関数のヘルプで概説されている仕様に従っているだけです。(データsleepstudyの例を参照してください)。私は何が起こっているのかを理解しようとし、私が何が起こっているのかを理解している場合は、ここで報告します。


@ manoel-galdinoに感謝-これらの結果から結論を出すことは正しいのでしょうか。サイトに関連付けられている差異はsigではないからです。0と異なる場合、この係数はモデルで重要ではありませんか? Random effects: Groups Name Variance Std.Dev. Site (Intercept) 0.0019094 0.043697 Residual 0.0030755 0.055457
James Waters、

また、@ manoel-galdino、モデルのこの部分を英語で解釈するのを手伝ってくれませんか?(0+head|site)
James Waters

@JamesWaters、うん、サイトは0と大きく異ならないため、サイト間のばらつきはそれほど重要ではありません。
Manoel Galdino 2012

(0 + head | site)は、サイトによって変化するヘッドの効果(変動勾配)をモデル化する必要があります。ただし、実行するとゼロが返されました。理由はわかりません。単にreg <-lmer(Leg〜Head +(Head | Site)、data = mydata)を実行すると、変量効果の推定値が得られます。コマンドranef(reg)を使用して、変量効果を出力します。しかし、私は私の答えを拡張します...
Manoel Galdino '19

3

モデレーターが介入する前に、

library(car)

crPlots(lm.2,terms=~Site)

これらは、コンポーネント+残差(部分残差)プロットです

コンポーネント+残差プロット


@BenBarnesに感謝します。これから、サイトRBはBCに比べてインターセプトがかなり低いことがわかります。これらのインターセプトのそれぞれに適合するモデルが単一のインターセプトに適合するモデルよりも大幅に優れているために、この比較が大幅に異なる必要はないのですか?
James Waters

@James、とのanova()比較lm.1lm.2は、F検定(en.wikipedia.org/wiki/F-test#Regression_problems)を実行します。これは、基本的に、2つのネストされたモデル間の残差二乗和の減少と、より多くの項を持つモデル。したがって、個々の回帰係数が統計的に有意であるかどうかは特に考慮されません。@Manoelのように、Andrew Gelmanの論文や本、特に「回帰と階層モデルを使用したデータ分析」は非常に役に立ちます。
BenBarnes 2012

3

特に、信頼区間を間違って計算していると思います。これを見るには、2つの方法があります。

(1)ベースライン(ANZ)サイトからの各サイトの差異[合計からゼロへのコントラストに変更することにより、全体の平均からの差異を計算することもできます

library(coefplot2)  ## on r-forge
coefplot2(lm.2)

または(2)すべてのペアごとの比較(このアプローチは好きではありませんが、一般的です):

library(multcomp)
ci <- confint(glht(lm.2, linfct = mcp(Site = "Tukey")))
ggplot(fortify(ci),aes(lhs,estimate,ymin=lwr,ymax=upr))+
    geom_pointrange()+theme_bw()+geom_hline(yintercept=0,col="red")

multcompパッケージアプローチでこのエラーが発生しました:Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : cannot coerce class 'c("confint.glht", "glht")' into a data.frame
James Waters

1

Head切片がでLeg値を推定しようとしている間、すべての値は1.7〜2.4の範囲にあることに注意してくださいHead=0。これは主要な外挿であるため、多くの不確実性があります。Head値を中央に配置し、この分析を繰り返すと、信頼区間は非常に狭くなります。

さらに、95%の信頼区間の重複は、統計的に有意な差がないことを意味しません。実際、2つのグループでは、重複しない84%信頼区間は、5%レベルで有意差があると近似しています。もちろん、複数のテストがあるため、これは複数のグループではうまく機能しません。


1

他の回答に加えて、重複する信頼区間に関連し、それらが何を意味し、何を意味するのかについての適切で短いリマインダーとして機能する、コーネル統計コンサルティングユニットからのリンクを以下に示します。

http://www.cscu.cornell.edu/news/statnews/stnews73.pdf http://www.cscu.cornell.edu/news/statnews/Stnews73insert.pdf

ここに要点があります:

2つの統計に重複しない信頼区間がある場合、それらは必然的に有意に異なります、重複する信頼区間がある場合、それらに有意差ないわけではありません。

最初のリンクからの関連テキストは次のとおりです。

簡単な例でこれを説明できます。2つの独立したサンプルの平均値を比較することに関心があるとします。最初のサンプルの平均は9で、2番目のサンプルの平均は17です。2つのグループの平均が2.5に等しい同じ標準誤差を持っていると仮定しましょう。最初のグループ平均の95%信頼区間は、次のように計算できます。±×5.296.19ここで、1.96は臨界t値です。したがって、最初のグループ平均の信頼区間は(4.1、13.9)です。同様に、2番目のグループの場合、平均の信頼区間は(12.1、21.9)です。2つの間隔が重なっていることに注意してください。ただし、2つの平均を比較するためのt統計は次のとおりです。

t = (17-9)/√(2.5² + 2.5²) = 2.26

これは、2つのグループの平均が同じであるという帰無仮説がα= 0.05レベルで棄却される必要があることを反映しています。上記の結論を検証するには、2つのグループの平均値の差について95%の信頼区間を考えます。区間にはゼロが含まれていないため、グループ平均が同じであるという帰無仮説を棄却します。

一般に、2つのパラメーター推定値を比較する場合、信頼区間がオーバーラップしない場合、統計は統計的に有意に異なることが常に当てはまります。ただし、その逆は成り立ちません。つまり、重複する信頼区間に基づいて2つの統計値の差の統計的有意性を判断するのは誤りです。これが平均の2標本比較の場合に当てはまる理由の説明については、次のリンクを参照してください。http//www.cscu.cornell.edu/news/statnews/Stnews73insert.pdf

他のリンクからの情報はここにあります:

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.