测试简单线性回归中的斜率是否等于 R 中的给定常数
Test if the slope in simple linear regression equals to a given constant in R
我想测试简单线性回归中的斜率是否等于除零以外的给定常量。
> x <- c(1,2,3,4)
> y <- c(2,5,8,13)
> fit <- lm(y ~ x)
> summary(fit)
Call:
lm(formula = y ~ x)
Residuals:
1 2 3 4
0.4 -0.2 -0.8 0.6
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.0000 0.9487 -2.108 0.16955
x 3.6000 0.3464 10.392 0.00913 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.7746 on 2 degrees of freedom
Multiple R-squared: 0.9818, Adjusted R-squared: 0.9727
F-statistic: 108 on 1 and 2 DF, p-value: 0.009133
> confint(fit)
2.5 % 97.5 %
(Intercept) -6.081855 2.081855
x 2.109517 5.090483
在这个例子中,我想测试斜率是否等于 5。我知道我不会拒绝它,因为 5 在 95% CI 中。但是有没有一个函数可以直接给我p值?
测试拟合是否与特定系数显着不同的一种方法是构建一个 "offset",其中将该系数用作应用于 x 值的因子。您应该将此视为重新设置 "zero" 至少为零斜率。截距还是"free"到"move around",呃,估计。
fit2 <- lm( y~x +offset(5*x) )
#----------------
summary(fit2)
#--------
Call:
lm(formula = y ~ x + offset(5 * x))
Residuals:
1 2 3 4
0.4 -0.2 -0.8 0.6
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.0000 0.9487 -2.108 0.1695
x -1.4000 0.3464 -4.041 0.0561 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.7746 on 2 degrees of freedom
Multiple R-squared: 0.9818, Adjusted R-squared: 0.9727
F-statistic: 108 on 1 and 2 DF, p-value: 0.009133
现在与您的 fit
对象的结果进行比较。 x 的系数恰好相差 5。模型拟合统计数据相同,但正如您所怀疑的那样,x
变量的 p 值要低得多……呃,更高,即不太重要。
> summary(fit)
Call:
lm(formula = y ~ x)
Residuals:
1 2 3 4
0.4 -0.2 -0.8 0.6
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.0000 0.9487 -2.108 0.16955
x 3.6000 0.3464 10.392 0.00913 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.7746 on 2 degrees of freedom
Multiple R-squared: 0.9818, Adjusted R-squared: 0.9727
F-statistic: 108 on 1 and 2 DF, p-value: 0.009133
您只需为原假设构造 t 统计量 slope=5:
# Compute Summary with statistics
sfit<- summary(fit)
# Compute t-student H0: intercept=5. The estimation of coefficients and their s.d. are in sfit$coefficients
tstats <- (5-sfit$coefficients[2,1])/sfit$coefficients[2,2]
# Calculates two tailed probability
pval<- 2 * pt(abs(tstats), df = df.residual(fit), lower.tail = FALSE)
print(pval)
我的印象是 car
包中的 linearHypothesis
函数提供了执行此操作的标准方法。
例如
library(car)
x <- 1:4
y <- c(2, 5, 8, 13)
model <- lm(y ~ x)
linearHypothesis(model, "x = 1")
#> Linear hypothesis test
#>
#> Hypothesis:
#> x = 1
#>
#> Model 1: restricted model
#> Model 2: y ~ x
#>
#> Res.Df RSS Df Sum of Sq F Pr(>F)
#> 1 3 35.0
#> 2 2 1.2 1 33.8 56.333 0.01729 *
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
这里的假设检验表明,受限模型(即 x
的系数等于 1 的情况)以统计显着的方式解释了比完整模型更少的方差,如 F 统计量所评估的.
这比在公式中使用 offset
更有用,因为您可以一次测试多个限制条件:
model <- lm(y ~ x + I(x^2))
linearHypothesis(model, c("I(x^2) = 1", "x = 1"))
#> Linear hypothesis test
#>
#> Hypothesis:
#> I(x^2) = 1
#> x = 1
#>
#> Model 1: restricted model
#> Model 2: y ~ x + I(x^2)
#>
#> Res.Df RSS Df Sum of Sq F Pr(>F)
#> 1 3 30.0
#> 2 1 0.2 2 29.8 74.5 0.08165 .
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
我想测试简单线性回归中的斜率是否等于除零以外的给定常量。
> x <- c(1,2,3,4)
> y <- c(2,5,8,13)
> fit <- lm(y ~ x)
> summary(fit)
Call:
lm(formula = y ~ x)
Residuals:
1 2 3 4
0.4 -0.2 -0.8 0.6
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.0000 0.9487 -2.108 0.16955
x 3.6000 0.3464 10.392 0.00913 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.7746 on 2 degrees of freedom
Multiple R-squared: 0.9818, Adjusted R-squared: 0.9727
F-statistic: 108 on 1 and 2 DF, p-value: 0.009133
> confint(fit)
2.5 % 97.5 %
(Intercept) -6.081855 2.081855
x 2.109517 5.090483
在这个例子中,我想测试斜率是否等于 5。我知道我不会拒绝它,因为 5 在 95% CI 中。但是有没有一个函数可以直接给我p值?
测试拟合是否与特定系数显着不同的一种方法是构建一个 "offset",其中将该系数用作应用于 x 值的因子。您应该将此视为重新设置 "zero" 至少为零斜率。截距还是"free"到"move around",呃,估计。
fit2 <- lm( y~x +offset(5*x) )
#----------------
summary(fit2)
#--------
Call:
lm(formula = y ~ x + offset(5 * x))
Residuals:
1 2 3 4
0.4 -0.2 -0.8 0.6
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.0000 0.9487 -2.108 0.1695
x -1.4000 0.3464 -4.041 0.0561 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.7746 on 2 degrees of freedom
Multiple R-squared: 0.9818, Adjusted R-squared: 0.9727
F-statistic: 108 on 1 and 2 DF, p-value: 0.009133
现在与您的 fit
对象的结果进行比较。 x 的系数恰好相差 5。模型拟合统计数据相同,但正如您所怀疑的那样,x
变量的 p 值要低得多……呃,更高,即不太重要。
> summary(fit)
Call:
lm(formula = y ~ x)
Residuals:
1 2 3 4
0.4 -0.2 -0.8 0.6
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.0000 0.9487 -2.108 0.16955
x 3.6000 0.3464 10.392 0.00913 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.7746 on 2 degrees of freedom
Multiple R-squared: 0.9818, Adjusted R-squared: 0.9727
F-statistic: 108 on 1 and 2 DF, p-value: 0.009133
您只需为原假设构造 t 统计量 slope=5:
# Compute Summary with statistics
sfit<- summary(fit)
# Compute t-student H0: intercept=5. The estimation of coefficients and their s.d. are in sfit$coefficients
tstats <- (5-sfit$coefficients[2,1])/sfit$coefficients[2,2]
# Calculates two tailed probability
pval<- 2 * pt(abs(tstats), df = df.residual(fit), lower.tail = FALSE)
print(pval)
我的印象是 car
包中的 linearHypothesis
函数提供了执行此操作的标准方法。
例如
library(car)
x <- 1:4
y <- c(2, 5, 8, 13)
model <- lm(y ~ x)
linearHypothesis(model, "x = 1")
#> Linear hypothesis test
#>
#> Hypothesis:
#> x = 1
#>
#> Model 1: restricted model
#> Model 2: y ~ x
#>
#> Res.Df RSS Df Sum of Sq F Pr(>F)
#> 1 3 35.0
#> 2 2 1.2 1 33.8 56.333 0.01729 *
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
这里的假设检验表明,受限模型(即 x
的系数等于 1 的情况)以统计显着的方式解释了比完整模型更少的方差,如 F 统计量所评估的.
这比在公式中使用 offset
更有用,因为您可以一次测试多个限制条件:
model <- lm(y ~ x + I(x^2))
linearHypothesis(model, c("I(x^2) = 1", "x = 1"))
#> Linear hypothesis test
#>
#> Hypothesis:
#> I(x^2) = 1
#> x = 1
#>
#> Model 1: restricted model
#> Model 2: y ~ x + I(x^2)
#>
#> Res.Df RSS Df Sum of Sq F Pr(>F)
#> 1 3 30.0
#> 2 1 0.2 2 29.8 74.5 0.08165 .
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1