RのGLM後の因子のレベルの比較


25

ここに私の状況についての少しの背景があります。私のデータは、捕食者が首尾よく食べた獲物の数を参照しています。各トライアルでは獲物の数が限られているため(25個が利用可能)、使用可能な獲物の数を表す「サンプル」列(各トライアルでは25個)と、成功の数である「カウント」何匹の獲物が食べられたか)。プロポーションデータに関するRブック(578ページ)の例に基づいて分析を行いました。説明変数は体温(私は因子として扱った4つのレベル)、および捕食者の性別(明らかに、男性または女性)です。だから私はこのモデルになります:

model <- glm(y ~ Temperature+Sex+Temperature*Sex data=predator, family=quasibinomial) 

Analysis of Devianceテーブルを取得した後、温度と性別(相互作用ではない)が獲物の消費に大きな影響を与えることがわかりました。さて、私の問題:どの温度が異なるかを知る必要があります。つまり、4つの温度を互いに比較する必要があります。線形モデルがあれば、TukeyHSD関数を使用しますが、GLMを使用しているため、使用できません。パッケージMASSを調べて、コントラストマトリックスを設定しようとしましたが、何らかの理由で機能しません。提案や参考文献はありますか?

モデルを明確にするのに役立つ場合は、モデルから取得した要約を次に示します...

y <- cbind(data$Count, data$Sample-data$Count)
model <- glm(y ~ Temperature+Sex+Temperature*Sex data=predator, family=quasibinomial) 
> summary(model)

# Call:
# glm(formula = y ~ Temperature + Sex + Temperature * Sex, family=quasibinomial, data=data)

# Deviance Residuals: 
#     Min       1Q   Median       3Q      Max  
# -3.7926  -1.4308  -0.3098   0.9438   3.6831  

# Coefficients:
#                                        Estimate Std. Error t value Pr(>|t|)    
# (Intercept)                             -1.6094     0.2672  -6.024 3.86e-08 ***
# Temperature8                             0.3438     0.3594   0.957   0.3414    
# Temperature11                           -1.0296     0.4803  -2.144   0.0348 *  
# Temperature15                           -1.2669     0.5174  -2.449   0.0163 *  
# SexMale                                    0.3822     0.3577   1.069   0.2882    
# Temperature8:SexMale                    -0.2152     0.4884  -0.441   0.6606    
# Temperature11:SexMale                    0.4136     0.6093   0.679   0.4990    
# Temperature15:SexMale                    0.4370     0.6503   0.672   0.5033    
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

# (Dispersion parameter for quasibinomial family taken to be 2.97372)    
#     Null deviance: 384.54  on 95  degrees of freedom
# Residual deviance: 289.45  on 88  degrees of freedom
# AIC: NA   
# Number of Fisher Scoring iterations: 5

2
こんにちは@アンとようこそ。パッケージglht内の関数を使用してみることができmultcompます。温度のTukeyHSDテストを実行するには、そのように使用しglht(my.glm, mcp(Temperature="Tukey"))ます。また、モデル式は次のように短縮できますmodel<-glm(y ~ Temperature*Sex data=predator, family=quasibinomial)。アスタリスク()を使用する、相互作用主効果が適合します。
COOLSerdash

こんにちは、迅速な返信ありがとうございます!ただし、エラーメッセージしか表示されないため、何か間違ったことをしているに違いありません。mcpとは何ですか?係数の次元と共分散行列が一致しないというエラーメッセージが表示されます...?
アン

質問を編集してモデル出力を含めると便利です。
COOLSerdash

3
なぜTemperatureファクターとしてモデル化したのですか?実際の数値はわかりませんか?私はそれらを連続変数として使用しますが、この問題全体は意味がありません。
GUNG -復活モニカ

3
一般的にこれを行う方法を知りたいのは完全に合理的です。あなたの質問が立っています。ただし、特定の状況に関しては、tempを最初に因子として考えていたとしても、tempを連続変数として使用します。複数の比較を伴う問題はさておき、要因としての温度のモデリングは、持っている情報の非効率的な使用です。
GUNG -復活モニカ

回答:


15

アン、このような多重比較の一般的な方法を簡単に説明します。特定のケースでこれが機能しない理由はわかりません。ごめんなさい。

ただし、通常は、multcompパッケージと関数を使用して実行できますglht。以下に例を示します。

mydata      <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
mydata$rank <- factor(mydata$rank)
my.mod      <- glm(admit~gre+gpa*rank, data=mydata, family=quasibinomial)

summary(my.mod)
# 
# Coefficients:
#              Estimate Std. Error t value Pr(>|t|)  
# (Intercept) -4.985768   2.498395  -1.996   0.0467 *
# gre          0.002287   0.001110   2.060   0.0400 *
# gpa          1.089088   0.731319   1.489   0.1372  
# rank2        0.503294   2.982966   0.169   0.8661  
# rank3        0.450796   3.266665   0.138   0.8903  
# rank4       -1.508472   4.202000  -0.359   0.7198  
# gpa:rank2   -0.342951   0.864575  -0.397   0.6918  
# gpa:rank3   -0.515245   0.935922  -0.551   0.5823  
# gpa:rank4   -0.009246   1.220757  -0.008   0.9940  
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

rankTukeyのHSDを使用した場合のペアワイズ比較を計算する場合は、次の方法で実行できます。

library(multcomp)
summary(glht(my.mod, mcp(rank="Tukey")))
# 
#    Simultaneous Tests for General Linear Hypotheses
# 
# Multiple Comparisons of Means: Tukey Contrasts
# 
# Fit: glm(formula = admit ~ gre + gpa * rank, family = quasibinomial, data = mydata)   
# 
# Linear Hypotheses:
#            Estimate Std. Error z value Pr(>|z|)
# 2 - 1 == 0   0.5033     2.9830   0.169    0.998
# 3 - 1 == 0   0.4508     3.2667   0.138    0.999
# 4 - 1 == 0  -1.5085     4.2020  -0.359    0.984
# 3 - 2 == 0  -0.0525     2.6880  -0.020    1.000
# 4 - 2 == 0  -2.0118     3.7540  -0.536    0.949
# 4 - 3 == 0  -1.9593     3.9972  -0.490    0.960
# (Adjusted p values reported -- single-step method)
# 
# Warning message:
# In mcp2matrix(model, linfct = linfct) :
#   covariate interactions found -- default contrast might be inappropriate

p

注:@gungがコメントで指摘したように、可能であれば、温度をカテゴリ変数ではなく連続変数として含める必要があります。相互作用について:尤度比検定を実行して、相互作用項がモデルの適合を大幅に改善するかどうかを確認できます。あなたの場合、コードは次のようになります。

# Original model
model <- glm(y ~ Temperature+Sex+Temperature*Sex, data=predator, family=quasibinomial) 

# Model without an interaction
model2 <- glm(y ~ Temperature+Sex data=predator, family=quasibinomial) 

# Likelihood ratio test
anova(model, model2, test="LRT")

このテストが重要でない場合、モデルから相互作用を削除できます。たぶんglht動作しますか?


1
ああ、本当にありがとう!今回はコマンドを正しく記述できましたが、うまくいきました!再度、感謝します !
アン

1
追加の質問:相互作用で複数の比較を取得する方法はありますか?...私は相互作用(最初の質問から、それは温度になります*セックス)が重要である同様のデータを、持っている、それらを一緒に比較することが可能である場合、私は思っていた
アン・

1
相互作用の各レベルの多重比較を意味しますか?はいの場合、このサイトがおもしろいと思うかもしれません(最後の段落は、可能なすべてのペアワイズの組み合わせをテストする方法を示しています)。
COOLSerdash

変数の相互作用に対応する変数を作成し、この変数を使用してmcpを実行できます。このようにします。mydata $ gparank <-インタラクション(mydata $ gpa、mydata $ランク)
Notquitesure 2014

1
@Novaはどのリンクですか?コメントにあるもの?こちらがそのサイトへの新しいリンクです。
-COOLSerdash
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.