Data

library(tidyverse)
library(dplyr) 
library(ggpubr)
library(rcompanion)
library(car)
library(googlesheets4)
library(plotly)

DATA “species.txt”

gs4_deauth()
ss= "https://docs.google.com/spreadsheets/d/18J313ymQP0xj3Lf3P4WHnuqXzyUEGJGW2whdJgmUp0c/edit?usp=sharing"
hoja= "species"
rango = "B2:D92"
sp <- read_sheet(ss,
                    sheet= hoja,
                    range= rango,
                    col_names= TRUE
                    )
✔ Reading from Deviance_Ancova_Reg_Glm.
✔ Range ''species'!B2:D92'.
names(sp)
[1] "pH"      "Biomass" "Species"
sp$pH <- as.factor(sp$pH)
str(sp)
tibble [90 × 3] (S3: tbl_df/tbl/data.frame)
 $ pH     : Factor w/ 3 levels "a.low","b.mid",..: 3 3 3 3 3 3 3 3 3 3 ...
 $ Biomass: num [1:90] 0.469 1.731 2.09 3.926 4.367 ...
 $ Species: num [1:90] 30 39 44 35 25 29 23 18 19 12 ...
sp

Regression

p <- ggplot(data= sp, 
            aes(x=Biomass, y= Species)) + geom_point() +
  geom_smooth(method="lm")
ggplotly(p)
`geom_smooth()` using formula = 'y ~ x'
lm <- lm(data=sp, Species ~ Biomass)
lmS <- summary(lm)
lmS

Call:
lm(formula = Species ~ Biomass, data = sp)

Residuals:
     Min       1Q   Median       3Q      Max 
-16.0037  -6.2194  -0.0894   5.7617  22.8037 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  23.6755     1.6604  14.259  < 2e-16 ***
Biomass      -1.1864     0.3782  -3.137  0.00232 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 9.232 on 88 degrees of freedom
Multiple R-squared:  0.1006,    Adjusted R-squared:  0.09034 
F-statistic: 9.839 on 1 and 88 DF,  p-value: 0.002324
tstat <- lmS$coefficients[2,3]
tstat
[1] -3.136681

Randomization

nreps <- 5000
tstats <- numeric(nreps)
set.seed(123) # reprducibility

for (i in 1:nreps) {
  tstats[i] <- summary(lm(Species~sample(Biomass),data=sp))$coef[2,3]
}

Compute p-value (proportion of simmulated test stats at least as extreme as observed)

hist(tstats)
abline(v= tstat, col="red")

mean(abs(tstats) >= abs(tstat))
[1] 0.0022
LS0tDQp0aXRsZTogIlBlcm11dGF0aW9uIHRlc3QiDQphdXRob3I6ICJGZWRlcmljbyBKLiBWaWxsYXRvcm8iDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCg0KIyMjIERhdGENCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgcmVzdWx0cz1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShkcGx5cikgDQpsaWJyYXJ5KGdncHVicikNCmxpYnJhcnkocmNvbXBhbmlvbikNCmxpYnJhcnkoY2FyKQ0KbGlicmFyeShnb29nbGVzaGVldHM0KQ0KbGlicmFyeShwbG90bHkpDQpgYGAgIA0KDQojIyMjIERBVEEgInNwZWNpZXMudHh0Ig0KIA0KYGBge3J9DQpnczRfZGVhdXRoKCkNCnNzPSAiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMThKMzEzeW1RUDB4ajNMZjNQNFdIbnVxWHp5VUVHSkdXMndoZEpnbVVwMGMvZWRpdD91c3A9c2hhcmluZyINCmhvamE9ICJzcGVjaWVzIg0KcmFuZ28gPSAiQjI6RDkyIg0Kc3AgPC0gcmVhZF9zaGVldChzcywNCiAgICAgICAgICAgICAgICAgICAgc2hlZXQ9IGhvamEsDQogICAgICAgICAgICAgICAgICAgIHJhbmdlPSByYW5nbywNCiAgICAgICAgICAgICAgICAgICAgY29sX25hbWVzPSBUUlVFDQogICAgICAgICAgICAgICAgICAgICkNCm5hbWVzKHNwKQ0Kc3AkcEggPC0gYXMuZmFjdG9yKHNwJHBIKQ0Kc3RyKHNwKQ0Kc3ANCmBgYCANCiMjIyBSZWdyZXNzaW9uDQoNCmBgYHtyfQ0KcCA8LSBnZ3Bsb3QoZGF0YT0gc3AsIA0KICAgICAgICAgICAgYWVzKHg9QmlvbWFzcywgeT0gU3BlY2llcykpICsgZ2VvbV9wb2ludCgpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIpDQpnZ3Bsb3RseShwKQ0KbG0gPC0gbG0oZGF0YT1zcCwgU3BlY2llcyB+IEJpb21hc3MpDQpsbVMgPC0gc3VtbWFyeShsbSkNCmxtUw0KdHN0YXQgPC0gbG1TJGNvZWZmaWNpZW50c1syLDNdDQp0c3RhdA0KYGBgICANCiMjIyBSYW5kb21pemF0aW9uDQpgYGB7cn0NCm5yZXBzIDwtIDUwMDANCnRzdGF0cyA8LSBudW1lcmljKG5yZXBzKQ0Kc2V0LnNlZWQoMTIzKSAjIHJlcHJkdWNpYmlsaXR5DQoNCmZvciAoaSBpbiAxOm5yZXBzKSB7DQogIHRzdGF0c1tpXSA8LSBzdW1tYXJ5KGxtKFNwZWNpZXN+c2FtcGxlKEJpb21hc3MpLGRhdGE9c3ApKSRjb2VmWzIsM10NCn0NCmBgYCAgDQoNCiMjIyMgQ29tcHV0ZSBwLXZhbHVlIChwcm9wb3J0aW9uIG9mIHNpbW11bGF0ZWQgdGVzdCBzdGF0cyBhdCBsZWFzdCBhcyBleHRyZW1lIGFzIG9ic2VydmVkKQ0KYGBge3J9DQpoaXN0KHRzdGF0cykNCmFibGluZSh2PSB0c3RhdCwgY29sPSJyZWQiKQ0KbWVhbihhYnModHN0YXRzKSA+PSBhYnModHN0YXQpKQ0KYGBgICANCg==