Rの2つの多項式回帰の差の統計的有意性を比較する


10

まず、このフォーラムでいくつかの調査を行いましたが、非常によく似た 質問が行われたことはわかっていますが、通常は適切に回答されていないか、回答の詳細がわからないだけで理解できない場合があります。したがって、今回は私の質問は次のとおりです。2つのデータセットがあり、それぞれに次のような多項式回帰を行います。

Ratio<-(mydata2[,c(2)])
Time_in_days<-(mydata2[,c(1)])
fit3IRC <- lm( Ratio~(poly(Time_in_days,2)) )

多項式回帰プロットは次のとおりです。

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

係数は次のとおりです。

> as.vector(coef(fit3CN))
[1] -0.9751726 -4.0876782  0.6860041
> as.vector(coef(fit3IRC))
[1] -1.1446297 -5.4449486  0.5883757 

そして、私が知りたいのは、R関数を使用して、関連する日数の間隔が[ 1,100]。

私が理解したことから、値は2つの異なるデータセットからも、モデル/真のデータの比較に使用されるAICからも得られるため、anovaテストを直接適用することはできません。

私は関連する質問で@Rolandによって与えられた指示に従ってみましたが、私の結果を見て、おそらく何かを誤解しました:

これが私がしたことです:

両方のデータセットを1つに結合しました。

f@Rolandが話している変動要因です。最初のセットには1を入れ、他のセットには0を入れました。

y<-(mydata2[,c(2)])
x<-(mydata2[,c(1)])
f<-(mydata2[,c(3)])

plot(x,y, xlim=c(1,nrow(mydata2)),type='p')

fit3ANOVA <- lm( y~(poly(x,2)) )

fit3ANOVACN <- lm( y~f*(poly(x,2)) )

私のデータは今このように見えます:

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

赤いものはfit3ANOVAまだ機能していますがfit3ANOVACN、モデルの奇妙な結果を持つ青いものに問題があります。フィットモデルが正しいかどうかはわかりません。@ Rolandが正確に何を意味するのかわかりません。

@DeltaIVソリューションを考えると、私はその場合を想定し ここに画像の説明を入力してください ています。私はそう仮定する権利がありますか?


リンクしている質問に対するユーザー@Rolandのコメントは、あなたの質問に完全に答えているようです。正確にあなたが理解していないことは何ですか?
DeltaIV

いくつかのことですが、コメントセクションにあるため、これが適切な答えであるかどうかはわかりませんでしたが、それが機能している場合は、理解していることを確認する必要があります。基本的に、元のデータセットに応じて1と0のような列を作成する新しいデータセットを作成する必要がありますか?次に、2つのモデルを作成し、1つはすべてのデータを使用し、もう1つはデータセットの1つだけを考慮に入れます。次に、anovaテストを適用します。それですか?また、私はanovaテストを使用したことがありません。適切なp値について彼らが話しているのを見ました。
PaoloH 2016

1
[0,100]

回答:


15
#Create some example data
mydata1 <- subset(iris, Species == "setosa", select = c(Sepal.Length, Sepal.Width))
mydata2 <- subset(iris, Species == "virginica", select = c(Sepal.Length, Sepal.Width))

#add a grouping variable
mydata1$g <- "a"
mydata2$g <- "b"

#combine the datasets
mydata <- rbind(mydata1, mydata2)

#model without grouping variable
fit0 <- lm(Sepal.Width ~ poly(Sepal.Length, 2), data = mydata)

#model with grouping variable
fit1 <- lm(Sepal.Width ~ poly(Sepal.Length, 2) * g, data = mydata)

#compare models 
anova(fit0, fit1)
#Analysis of Variance Table
#
#Model 1: Sepal.Width ~ poly(Sepal.Length, 2)
#Model 2: Sepal.Width ~ poly(Sepal.Length, 2) * g
#  Res.Df     RSS Df Sum of Sq      F    Pr(>F)    
#1     97 16.4700                                  
#2     94  7.1143  3    9.3557 41.205 < 2.2e-16 ***
#  ---
#  Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

ご覧のとおり、fit1はを大幅に上回っfit0ています。つまり、グループ化変数の効果は重要です。グループ化変数はそれぞれのデータセットを表すため、2つのデータセットへの多項式の適合は大幅に異なると考えることができます。


申し訳ありませんが、これは明白なはずですが、Anovaテストの結果に精通していないので、fit1がfit0よりも優れていることを教えてくれますか?それは非常に低いPr(> F)ですか?
PaoloH

1
p値は、モデルが大幅に異なるかどうかを示します(p値が低いほど、変動を考慮して「より多くの」を意味し、通常p <0.05が有意であると見なされます)。RSSが小さいほど、より適切なモデルを示します。
ローランド

@PaoloHところで、従属変数としての比率は避けてください。通常の最小二乗モデルの仮定は、このような従属変数には当てはまりません。
ローランド

8

@Ronaldの答えが最もよく、それは多くの同様の問題に広く適用できます(たとえば、体重と年齢の関係で男性と女性の間に統計的に有意な差があるかどうか)。ただし、別のソリューションを追加しますが、これは定量的ではありませんが(p値を提供しません)、違いをグラフィカルに表示します。

編集この質問によれば、信頼区間を計算するためにpredict.lm使用される関数は、回帰曲線の周りの同時信頼帯ggplot2ではなく、点ごとの信頼帯のみを計算するように見えます。これらの最後のバンドは、2つの近似線形モデルが統計的に異なるかどうか、または同じ真のモデルと互換性があるかどうかを別の言い方で言うかどうかを評価するのに適切なバンドではありません。したがって、それらはあなたの質問に答えるための正しい曲線ではありません。どうやら、同時の信頼帯(奇妙な!)を取得するRビルトインがないので、独自の関数を作成しました。ここにあります:

simultaneous_CBs <- function(linear_model, newdata, level = 0.95){
    # Working-Hotelling 1 – α confidence bands for the model linear_model
    # at points newdata with α = 1 - level

    # summary of regression model
    lm_summary <- summary(linear_model)
    # degrees of freedom 
    p <- lm_summary$df[1]
    # residual degrees of freedom
    nmp <-lm_summary$df[2]
    # F-distribution
    Fvalue <- qf(level,p,nmp)
    # multiplier
    W <- sqrt(p*Fvalue)
    # confidence intervals for the mean response at the new points
    CI <- predict(linear_model, newdata, se.fit = TRUE, interval = "confidence", 
                  level = level)
    # mean value at new points
    Y_h <- CI$fit[,1]
    # Working-Hotelling 1 – α confidence bands
    LB <- Y_h - W*CI$se.fit
    UB <- Y_h + W*CI$se.fit
    sim_CB <- data.frame(LowerBound = LB, Mean = Y_h, UpperBound = UB)
}

library(dplyr)
# sample datasets
setosa <- iris %>% filter(Species == "setosa") %>% select(Sepal.Length, Sepal.Width, Species)
virginica <- iris %>% filter(Species == "virginica") %>% select(Sepal.Length, Sepal.Width, Species)

# compute simultaneous confidence bands
# 1. compute linear models
Model <- as.formula(Sepal.Width ~ poly(Sepal.Length,2))
fit1  <- lm(Model, data = setosa)
fit2  <- lm(Model, data = virginica)
# 2. compute new prediction points
npoints <- 100
newdata1 <- with(setosa, data.frame(Sepal.Length = 
                                       seq(min(Sepal.Length), max(Sepal.Length), len = npoints )))
newdata2 <- with(virginica, data.frame(Sepal.Length = 
                                          seq(min(Sepal.Length), max(Sepal.Length), len = npoints)))
# 3. simultaneous confidence bands
mylevel = 0.95
cc1 <- simultaneous_CBs(fit1, newdata1, level = mylevel)
cc1 <- cc1 %>% mutate(Species = "setosa", Sepal.Length = newdata1$Sepal.Length)
cc2 <- simultaneous_CBs(fit2, newdata2, level = mylevel)
cc2 <- cc2 %>% mutate(Species = "virginica", Sepal.Length = newdata2$Sepal.Length)

# combine datasets
mydata <- rbind(setosa, virginica)
mycc   <- rbind(cc1, cc2)    
mycc   <- mycc %>% rename(Sepal.Width = Mean) 
# plot both simultaneous confidence bands and pointwise confidence
# bands, to show the difference
library(ggplot2)
# prepare a plot using dataframe mydata, mapping sepal Length to x,
# sepal width to y, and grouping the data by species
p <- ggplot(data = mydata, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + 
# add data points
geom_point() +
# add quadratic regression with orthogonal polynomials and 95% pointwise
# confidence intervals
geom_smooth(method ="lm", formula = y ~ poly(x,2)) +
# add 95% simultaneous confidence bands
geom_ribbon(data = mycc, aes(x = Sepal.Length, color = NULL, fill = Species, ymin = LowerBound, ymax = UpperBound),alpha = 0.5)
print(p)

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

内部バンドは、デフォルトでgeom_smooth次のように計算されたものです。これらは、回帰曲線の点ごとの 95%信頼バンドです。外側の半透明のバンド(グラフィックヒントの@Rolandに感謝)は、同時に 95%の信頼バンドです。ご覧のとおり、予想どおり、それらは点ごとのバンドよりも大きくなっています。2つの曲線の同時信頼帯が重ならないという事実は、2つのモデル間の差が統計的に有意であることを示していると見なすことができます。

もちろん、有効なp値を使用した仮説検定では、@ Rolandアプローチに従う必要がありますが、このグラフィカルなアプローチは探索的データ分析と見なすことができます。また、プロットはいくつかの追加のアイデアを与えることができます。2つのデータセットのモデルが統計的に異なることは明らかです。しかし、2つの1次モデルが2つの2次モデルとほぼ同様にデータに適合するようにも見えます。この仮説は簡単にテストできます。

fit_deg1 <- lm(data = mydata, Sepal.Width ~ Species*poly(Sepal.Length,1))
fit_deg2 <- lm(data = mydata, Sepal.Width ~ Species*poly(Sepal.Length,2))
anova(fit_deg1, fit_deg2)
# Analysis of Variance Table

# Model 1: Sepal.Width ~ Species * poly(Sepal.Length, 1)
# Model 2: Sepal.Width ~ Species * poly(Sepal.Length, 2)
#  Res.Df    RSS Df Sum of Sq      F Pr(>F)
# 1     96 7.1895                           
# 2     94 7.1143  2  0.075221 0.4969   0.61

次数1のモデルと次数2のモデルの違いは重要ではないため、データセットごとに2つの線形回帰を使用することもできます。


3
+1でプロットします。統計分析の重要な部分。
ローランド

念のために言っておきますが、「2つの曲線の信頼区間が重なっていないという事実は、2つのモデルの差が統計的に有意であるという事実の指標と見なすことができます。」しかし、それらが正しく重なっていても、その違いは重要ではないとは言えませんか?
PaoloH 2016

具体的には、投稿に例を追加しました。
PaoloH

@PaoloH、あなたはあなたの質問に新しいプロットを追加したので、そこにコメントを追加します。
DeltaIV
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.