比较R中两个多项式回归之间差异的统计显着性


10

因此,首先,我在这个论坛上进行了一些研究,我知道 已经提出了非常相似的问题,但是通常没有得到正确答案,或者有时答案不够详尽,我无法理解。所以这一次我的问题是:我有两组数据,每组数据都像这样进行多项式回归:

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函数进行检验,从而知道两个天数的相关区间为[ 1100]。

根据我的理解,我无法直接应用方差分析测试,因为这些值来自两组不同的数据或AIC(用于比较模型/真实数据)。

我试图按照@Roland在相关问题中给出的说明进行操作,但在查看结果时可能会误解了一些内容:

这是我所做的:

我将两个数据集合并为一个。

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 '16

好几件事,由于不确定性在注释部分中,所以我不确定这是否是一个正确的答案,但是如果它起作用了,那么我只需要确保自己理解即可。基本上,我应该创建一个新的数据集,在其中创建一个像1和0一样的列,具体取决于它们最初来自哪个数据集?然后,我创建两个模型,每个数据一个模型,另一个仅考虑一个数据集。然后我进行了方差分析测试。是吗 另外,我从未使用过方差检验,我看到他们谈论了正确的p值,那到底是什么?
PaoloH,2016年

1
[0100]

Answers:


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,即分组变量的效果显着。由于分组变量代表各个数据集,因此可以认为两个数据集的多项式拟合显着不同。


抱歉,这很明显,但是我对Anova测试结果不熟悉,是什么告诉我们fit1比fit0好?是Pr(> F)极低吗?
PaoloH,2016年

1
p值告诉您模型是否存在显着差异(较低的p值表示考虑到变化的“更大差异”,通常将p <0.05视为有效)。RSS越小,表明拟合模型越好。
罗兰

@PaoloH顺便说一句,应避免将比率作为因变量。普通最小二乘模型的假设不适用于此类因变量。
罗兰

8

@Ronald的答案是最好的,它广泛适用于许多类似的问题(例如,体重和年龄之间的关系,男女之间在统计学上有显着差异吗?)。但是,我将添加另一个解决方案,该解决方案虽然不那么定量(不提供p值),但却可以很好地图形化显示差异。

编辑:根据这个问题,看起来predict.lm,用于ggplot2计算置信区间的函数不会计算回归曲线周围的同时置信带,而只会计算点状置信带。最后的频段不是评估两个拟合线性模型是否在统计上不同的正确方法,或者不是以其他方式表示它们是否可以与同一真实模型兼容的合适频段。因此,它们不是回答您问题的正确曲线。由于显然没有内置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%置信带。如您所见,它们比预期的要大。来自两条曲线的同时置信带不重叠的事实可以被认为是两个模型之间的差异具有统计学意义的事实。

当然,对于具有有效p值的假设检验,必须遵循@Roland方法,但是该图形方法可以视为探索性数据分析。此外,该情节可以给我们一些其他的想法。显然,两个数据集的模型在统计上是不同的。但是看起来两个1级模型几乎可以像两个二次模型一样拟合数据。我们可以轻松地检验这个假设:

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级模型之间的差异不明显,因此我们也可以对每个数据集使用两个线性回归。


3
+1作图。统计分析的关键部分。
罗兰

为了确保您的方法正确:“两条曲线的置信区间不重叠的事实可以被视为这两个模型之间的差异具有统计意义的事实的指示”。但是我不能说如果它们确实重叠就不会有很大的区别吧?
PaoloH

更具体地说,我在帖子中添加了一个示例。
PaoloH,2016年

@PaoloH,由于您在问题中添加了新图,因此我将在此处添加评论。
DeltaIV
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.