0

データフレームの砂丘 (ページの下) に3 つの列があり、3 つの異なる砂丘生態系について記録されたマラムグラスの被覆率を説明しています。

(1) 復元された; (2)劣化。(3) ナチュラル。

エコシステム間の有意差を確立するために、テスト 1 とテスト 2 という 2 つの異なる一元配置分散分析テスト (以下) を実行しました。テスト 1 は、生態系間の大きな違いを明確に示しています。ただし、テスト 2 では有意差は見られません。ボックス プロット (以下) は、生態系間の差異の著しい違いを示しています。

その後、データフレームを溶かして、応答変数でもある階乗列 (つまり、Ecosystem.Type という見出し) を作成しました。アイデアは、glm モデル (テスト 3 - 以下) を適用して、一方向 Anova でテストすることです。ただし、この方法は失敗しました (以下のエラー メッセージを参照してください)。

問題

各一元配置分散分析テストを実行するコードが正しいかどうか、および有意に異なる生態系のペアを区別するための事後テスト (トルコ HSD、シェッフェなど) を実行する正しい手順であるかどうか、私は混乱しています。どなたかお役に立てることがありましたら、アドバイスをいただければ幸いです。どうもありがとう....

data(dune)

テスト 1

dune.type.1<-aov(Natural~Restored+Degraded, data=dune)
summary.aov(dune.type.1, intercept=T)

               Df Sum Sq Mean Sq F value   Pr(>F)    
     (Intercept)  1  34694   34694 138.679 1.34e-09 ***
     Restored     1     94      94   0.375    0.548    
     Degraded     1    486     486   1.942    0.181    
     Residuals   17   4253     250                     
           ---
  Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

事後テスト

    posthoc<-TukeyHSD(dune.type.1, conf.level=0.95)

    Error in TukeyHSD.aov(dune.type.1, conf.level = 0.95) : 

    no factors in the fitted model

    In addition: Warning messages:
    1: In replications(paste("~", xx), data = mf) :
       non-factors ignored: Restored
    2: In replications(paste("~", xx), data = mf) :
       non-factors ignored: Degraded

テスト 2

     dune1<-aov(Restored~Natural, data=dune)
     dune2<-aov(Restored~Degraded, data=dune)
     dune3<-aov(Degraded~Natural, data=dune)

     summary(dune1)

                 Df Sum Sq Mean Sq F value Pr(>F)
     Natural      1     86   85.58   0.356  0.558
     Residuals   18   4325  240.26               

    summary(dune2)

                 Df Sum Sq Mean Sq F value Pr(>F)
     Degraded     1    160   159.7   0.676  0.422
     Residuals   18   4250   236.1               

     summary(dune3)

                 Df Sum Sq Mean Sq F value Pr(>F)
     Natural      1  168.5  168.49   2.318  0.145
     Residuals   18 1308.5   72.69   

テスト 3

melt.dune<-melt(dune, measure.vars=c("Degraded", "Restored", "Natural"))


colnames(melt.dune)=c("Ecosystem.Type", "Percentage.cover")
melt.dune$Percentage.cover<-as.numeric(melt.dune$Percentage.cover)

glm.dune<-glm(Ecosystem.Type~Percentage.cover, data=melt.dune)
summary(glm.dune)

Error

glm.dune<-glm(Ecosystem.Type~Percentage.cover, data=melt.dune)
Error in glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  : 
NA/NaN/Inf in 'y'
In addition: Warning messages:
1: In Ops.factor(y, mu) : ‘-’ not meaningful for factors
2: In Ops.factor(eta, offset) : ‘-’ not meaningful for factors
3: In Ops.factor(y, mu) : ‘-’ not meaningful for factors

溶けたデータフレーム

structure(list(Ecosystem.Type = structure(c(1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("Degraded", "Restored", 
"Natural"), class = "factor"), Percentage.cover = c(12, 17, 21, 
11, 22, 16, 7, 9, 14, 2, 3, 15, 23, 4, 19, 36, 26, 4, 15, 23, 
38, 46, 65, 35, 54, 29, 48, 13, 19, 33, 37, 55, 11, 53, 13, 24, 
28, 44, 42, 39, 18, 61, 31, 46, 51, 51, 41, 44, 55, 47, 73, 43, 
25, 42, 21, 13, 65, 30, 47, 29)), row.names = c(NA, -60L), .Names =         c("Ecosystem.Type", 
 "Percentage.cover"), class = "data.frame")

ここに画像の説明を入力

データ

 structure(list(Degraded = c(12L, 17L, 21L, 11L, 22L, 16L, 7L, 
 9L, 14L, 2L, 3L, 15L, 23L, 4L, 19L, 36L, 26L, 4L, 15L, 23L), 
 Restored = c(38L, 46L, 65L, 35L, 54L, 29L, 48L, 13L, 19L, 
 33L, 37L, 55L, 11L, 53L, 13L, 24L, 28L, 44L, 42L, 39L), Natural = c(18L, 
 61L, 31L, 46L, 51L, 51L, 41L, 44L, 55L, 47L, 73L, 43L, 25L, 
 42L, 21L, 13L, 65L, 30L, 47L, 29L)), .Names = c("Degraded", 
 "Restored", "Natural"), class = "data.frame", row.names = c(NA, 
 -20L))
4

1 に答える 1

1

指摘したいことがいくつかあります。

まず、テスト 1 とテスト 2 は同様の結果を生成します。唯一の違いは、テスト 1 で切片を選択したことです。その結果、線形モデルに適合する場合 (数分後に説明します)、切片が必要であることがわかります。したがって、表示される重要性は、強制的に適合させる線が切片を必要とするかどうかについてです。"intercept=T" を他の結果に使用してみてください。同様の結果が得られると確信しています。

2 番目に注意すべきことは、あてはめようとする線形モデルについてです。dune.type.1 モデルは、異なる砂丘の生態系がどのように相関しているかを実際に見るモデルです。言い換えれば、天然物と復元物の間に線形の関連性があり、復元物の単位が増加するたびに、天然物がいくらか増加すると仮定します。私が正しく理解していれば、あなたが望むのは、相関関係ではなく平均差を調べることです。したがって、次の 2 つのことができます。

  1. データは、t.tests (いくつかのカテゴリ間の平均を比較する検定) を実行する準備ができています。すべての変数が適度に正規であるため、R で行うのは非常に簡単で有効です。ただし、複数のテストの問題が発生するため (すべての平均差を取得するために、おそらく 3 つの t 検定を実行します)、ボンフェローニ補正を使用する必要があります。

  2. しかし、あなたが本当に欲しいのは次のことだと思います:

まずデータを改造する

       data <- data.frame(v = c(dune$Degraded, dune$Restored, dune$Natural), 
                   labels = c(rep("Degraded", times = 20), rep("Restored", times = 20), 
                              rep("Natural", times = 20)))

次に、線形モデルを当てはめます

    mod.1 <- lm(v ~ labels, data = data)
    summary(mod.1)
    lm(formula = v ~ labels, data = data)

Residuals:
Min      1Q  Median      3Q     Max 
-28.650 -10.725   0.875   8.050  31.350 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)      14.950      3.066   4.875 9.07e-06 ***
labelsNatural    26.700      4.337   6.157 7.95e-08 ***
labelsRestored   21.350      4.337   4.923 7.64e-06 ***

ここで、ベースライン カテゴリ (劣化カテゴリ) の平均が、自然カテゴリの平均などよりも大幅に小さいことが実際にわかります。また、モデルの仮定をチェックして、モデルが適切に適合しているかどうかを確認することもできます。

    qqnorm(residuals(mod.1))
    qqline(residuals(mod.1))

ここに画像の説明を入力 それらの残差はかなり正常であるため、モデルは問題ありません。anova アプローチに従って、次のこともできます。

    anova.model <- aov(v ~ labels, data = data))
    summary(anova.model)

             Df Sum Sq Mean Sq F value   Pr(>F)    
 labels       2   7982    3991   21.22 1.29e-07 ***
 Residuals   57  10720     188  

これは、砂丘生態系の平均値の間に少なくとも 1 つの有意差があることを示しており、点ごとの間隔について Tukey をフォローアップします。

    post <- TukeyHSD(aov(v ~ labels, data = data))
    plot(post, ylim = c(0, 4))

ここに画像の説明を入力

すでに複数のテスト用に調整されています:)

于 2016-11-08T17:10:31.107 に答える