[R] How to test if a slope is different than 1?

Greg Snow 538280 at gmail.com
Fri Apr 27 04:08:44 CEST 2012


Yes, you can see that in the new model the slope is now 1- the old
slope, so it is measuring difference from 1.  Since it is significant
that means the slope is significantly different from 1.  To test the
null that slope = 0.5 just change the offset to
"offset(0.5*log(data$SIZE,10))"

To save yourself future grief it is best to not use df$var syntax in
formulas but better to do something like: log(y+1)~x, data=mydata

Also, it is best to name your data frame something besides data (it
can be confused with the data function).

On Thu, Apr 26, 2012 at 3:54 PM, Mark Na <mtb954 at gmail.com> wrote:
> Hi Greg and others,
>
> Thanks for your replies. Okay, I'm convinced that the offset is the best
> approach and wonder if you might have a quick look at what I did.
>
> Here's the original model containing the slope (0.56) that I'd like to test
> if it's different from 1.0
>
>>model1 <- glm(log(data$AB.obs+1,10) ~ log(data$SIZE,10) + data$YEAR)
>
> and its coefficients:
>
>                    Estimate Std. Error t value Pr(>|t|)
> (Intercept)        -1.18253    0.09119 -12.967  < 2e-16 ***
> log(data$SIZE, 10)  0.56001    0.02564  21.843  < 2e-16 ***
> data$YEAR2008       0.16823    0.04366   3.853 0.000152 ***
> data$YEAR2009       0.20299    0.04707   4.313 0.000024 ***
>
> And here's the model with an offset term:
>
>>model2 <- glm(log(data$AB.obs+1,10) ~ log(data$SIZE,10) +
>> offset(log(data$SIZE,10)) + data$YEAR)
>
> and its coefficients:
>
>                    Estimate Std. Error t value Pr(>|t|)
> (Intercept)        -1.18253    0.09119 -12.967  < 2e-16 ***
> log(data$SIZE, 10) -0.43999    0.02564 -17.162  < 2e-16 ***
> data$YEAR2008       0.16823    0.04366   3.853 0.000152 ***
> data$YEAR2009       0.20299    0.04707   4.313 0.000024 ***
>
> So, if I understand correctly, the small P-value corresponding to the SIZE
> coefficient in model2 indicates that the slope of 0.56 in model1 is
> significantly different from 1.0, right?
>
> If I may ask one more question: could I use the offset to test if the slope
> of 0.56 is different from yet another value, e.g., 0.5?
>
> Much appreciated.
>
> Many thanks, Mark Na
>
>
>
>
>
> On Wed, Apr 25, 2012 at 3:27 PM, Greg Snow <538280 at gmail.com> wrote:
>>
>> Doesn't the p-value from using offset work for you?  if you really
>> need a p-value.  The confint method is a quick and easy way to see if
>> it is significantly different from 1 (see Rolf's response), but does
>> not provide an exact p-value.  I guess you could do confidence
>> intervals at different confidence levels until you find the level such
>> that one of the limits is close enough to 1, but that seems like way
>> to much work.  You could also compute the p-value by taking the slope
>> minus 1 divided by the standard error and plug that into the pt
>> function with the correct degrees of freedom.  You could even write a
>> function to do that for you, but it still seems more work than adding
>> the offset to the formula.
>>
>> On Tue, Apr 24, 2012 at 8:17 AM, Mark Na <mtb954 at gmail.com> wrote:
>> > Hi Greg. Thanks for your reply. Do you know if there is a way to use the
>> > confint function to get a p-value on this test?
>> >
>> > Thanks, Mark
>> >
>> >
>> >
>> > On Mon, Apr 23, 2012 at 3:10 PM, Greg Snow <538280 at gmail.com> wrote:
>> >>
>> >> One option is to subtract the continuous variable from y before doing
>> >> the regression (this works with any regression package/function).  The
>> >> probably better way in R is to use the 'offset' function:
>> >>
>> >> formula = I(log(data$AB.obs + 1, 10)-log(data$SIZE,10)) ~
>> >> log(data$SIZE, 10) + data$Y
>> >> formula = log(data$AB.obs + 1) ~ offset( log(data$SIZE,10) ) +
>> >> log(data$SIZE,10) + data$Y
>> >>
>> >> Or you can use a function like 'confint' to find the confidence
>> >> interval for the slope and see if 1 is in the interval.
>> >>
>> >> On Mon, Apr 23, 2012 at 12:11 PM, Mark Na <mtb954 at gmail.com> wrote:
>> >> > Dear R-helpers,
>> >> >
>> >> > I would like to test if the slope corresponding to a continuous
>> >> > variable
>> >> > in
>> >> > my model (summary below) is different than one.
>> >> >
>> >> > I would appreciate any ideas for how I could do this in R, after
>> >> > having
>> >> > specified and run this model?
>> >> >
>> >> > Many thanks,
>> >> >
>> >> > Mark Na
>> >> >
>> >> >
>> >> >
>> >> > Call:
>> >> > lm(formula = log(data$AB.obs + 1, 10) ~ log(data$SIZE, 10) +
>> >> >   data$Y)
>> >> >
>> >> > Residuals:
>> >> >    Min       1Q   Median       3Q      Max
>> >> > -0.94368 -0.13870  0.04398  0.17825  0.63365
>> >> >
>> >> > Coefficients:
>> >> >                  Estimate Std. Error t value  Pr(>|t|)
>> >> > (Intercept)        -1.18282    0.09120 -12.970   < 2e-16 ***
>> >> > log(data$SIZE, 10)  0.56009    0.02564  21.846   < 2e-16 ***
>> >> > data$Y2008          0.16825    0.04366   3.854  0.000151 ***
>> >> > data$Y2009          0.20310    0.04707   4.315 0.0000238 ***
>> >> > ---
>> >> > Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
>> >> >
>> >> > Residual standard error: 0.2793 on 228 degrees of freedom
>> >> > Multiple R-squared: 0.6768,     Adjusted R-squared: 0.6726
>> >> > F-statistic: 159.2 on 3 and 228 DF,  p-value: < 2.2e-16
>> >> >
>> >> >        [[alternative HTML version deleted]]
>> >> >
>> >> >
>> >> > ______________________________________________
>> >> > R-help at r-project.org mailing list
>> >> > https://stat.ethz.ch/mailman/listinfo/r-help
>> >> > PLEASE do read the posting guide
>> >> > http://www.R-project.org/posting-guide.html
>> >> > and provide commented, minimal, self-contained, reproducible code.
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Gregory (Greg) L. Snow Ph.D.
>> >> 538280 at gmail.com
>> >
>> >
>>
>>
>>
>> --
>> Gregory (Greg) L. Snow Ph.D.
>> 538280 at gmail.com
>
>



-- 
Gregory (Greg) L. Snow Ph.D.
538280 at gmail.com



More information about the R-help mailing list