4

默认情况下lm,汇总测试斜率系数等于零。我的问题非常基本。我想知道如何测试斜率系数等于非零值。一种方法可能是使用confint,但这不提供 p 值。我也想知道如何用lm.

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2,10,20, labels=c("Ctl","Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)
summary(lm.D9)

Call:
lm(formula = weight ~ group)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.0710 -0.4938  0.0685  0.2462  1.3690 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   5.0320     0.2202  22.850 9.55e-15 ***
groupTrt     -0.3710     0.3114  -1.191    0.249    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.6964 on 18 degrees of freedom
Multiple R-squared: 0.07308,    Adjusted R-squared: 0.02158 
F-statistic: 1.419 on 1 and 18 DF,  p-value: 0.249 


confint(lm.D9)
              2.5 %    97.5 %
(Intercept)  4.56934 5.4946602
groupTrt    -1.02530 0.2833003

感谢您的时间和精力。

4

6 回答 6

7

正如@power 所说,你可以用手来做。这是一个例子:

> est <- summary.lm(lm.D9)$coef[2, 1]
> se <- summary.lm(lm.D9)$coef[2, 2]
> df <- summary.lm(lm.D9)$df[2]
> 
> m <- 0
> 2 * abs(pt((est-m)/se, df))
[1] 0.2490232
> 
> m <- 0.2
> 2 * abs(pt((est-m)/se, df))
[1] 0.08332659

并且您可以通过省略2*.

更新

这是一个双边和单边概率的例子:

> m <- 0.2
> 
> # two-side probability
> 2 * abs(pt((est-m)/se, df))
[1] 0.08332659
> 
> # one-side, upper (i.e., greater than 0.2)
> pt((est-m)/se, df, lower.tail = FALSE)
[1] 0.9583367
> 
> # one-side, lower (i.e., less than 0.2)
> pt((est-m)/se, df, lower.tail = TRUE)
[1] 0.0416633

请注意,上下概率之和正好是 1。

于 2011-11-11T05:06:57.013 回答
2

使用包中的linearHypothesis功能car。例如,您可以groupTrt使用检查系数是否等于 -1。

linearHypothesis(lm.D9, "groupTrt = -1")

Linear hypothesis test

Hypothesis:
groupTrt = - 1

Model 1: restricted model
Model 2: weight ~ group

  Res.Df     RSS Df Sum of Sq      F  Pr(>F)  
1     19 10.7075                              
2     18  8.7292  1    1.9782 4.0791 0.05856 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
于 2011-11-11T04:58:12.323 回答
1

除了所有其他好的答案之外,您还可以使用偏移量。分类预测器有点棘手,因为您需要了解编码。

lm(weight~group+offset(1*(group=="Trt")))

这里1*是不必要的,但用于强调您正在针对差异为 1 的假设进行测试(如果您想针对差异为 1 的假设进行测试d,则使用d*(group=="Trt")

于 2011-11-11T23:43:27.233 回答
1

smatr包有一个可以使用 OLS 的函数slope.test()

于 2011-11-11T04:58:57.993 回答
0

您可以使用t.test为您的数据执行此操作。该mu参数设置组均值差异的假设。该alternative参数允许您在单面测试和双面测试之间进行选择。

t.test(weight~group,var.equal=TRUE)

        Two Sample t-test

data:  weight by group 
t = 1.1913, df = 18, p-value = 0.249
alternative hypothesis: true difference in means is not equal to 0 
95 percent confidence interval:
 -0.2833003  1.0253003 
sample estimates:
mean in group Ctl mean in group Trt 
            5.032             4.661 



t.test(weight~group,var.equal=TRUE,mu=-1)

        Two Sample t-test

data:  weight by group 
t = 4.4022, df = 18, p-value = 0.0003438
alternative hypothesis: true difference in means is not equal to -1 
95 percent confidence interval:
 -0.2833003  1.0253003 
sample estimates:
mean in group Ctl mean in group Trt 
            5.032             4.661
于 2011-11-11T11:24:55.307 回答
-1

编写自己的测试代码。你知道估计的系数,你知道标准误差。您可以构建自己的测试统计数据。

于 2011-11-11T04:49:21.310 回答