packages

library("tidyverse")
library("ggthemes")
library("forcats")
library("ggplot2")
library("BlandAltmanLeh")

cargo df desde la web y creo el objeto

df <- read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vQgBuSiktQ2-rhwyRVO3s0HK3b0p-Wq2v3owxNGcg-To57mHrEfmH6AhuChavjOCMvhjYvIHuNL1liP/pub?gid=474470130&single=true&output=csv")

grafica

df %>% 
 ggplot(aes(x = fct_reorder(Material, `Medida`), y = `Medida`, color=Material)) +
  geom_boxplot()+
  theme_minimal()+
  coord_flip()

cargo plantilla

df2 <- read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vQgBuSiktQ2-rhwyRVO3s0HK3b0p-Wq2v3owxNGcg-To57mHrEfmH6AhuChavjOCMvhjYvIHuNL1liP/pub?gid=1845685926&single=true&output=csv")

Nuevas variables de diferencias entre mediciones

Lt_diferencias <- df2 %>% 
  mutate(Control=LT.control.- LT.control.) %>% 
  mutate(LAE = LT.control. - LT.LAE.) %>% 
  mutate(Chemfil = LT.control. - LT.Chemfil.) %>% 
  mutate(Ketac = LT.control. - LT.Ketac.Molar.) %>% 
  mutate(Resina= LT.control. - LT.Resina.)

boxplot de las diferencias

bland altman para control vs lae

bland.altman.plot(df2$LT.control.,df2$LT.LAE. , 
                  graph.sys = "ggplot2")

bland altman para control vs chemfil

bland.altman.plot(df2$LT.control.,df2$LT.Chemfil. , 
                  graph.sys = "ggplot2")

Chemfil

bland.altman.stats(df2$LT.control.,df2$LT.Chemfil.)$CI.lines
lower.limit.ci.lower lower.limit.ci.upper   mean.diff.ci.lower   mean.diff.ci.upper 
          -0.7741487            0.1665095            0.3053784            0.8484677 
upper.limit.ci.lower upper.limit.ci.upper 
           0.9873367            1.9279949 

ketac

bland.altman.stats(df2$LT.control.,df2$LT.Ketac.Molar.)$CI.lines
lower.limit.ci.lower lower.limit.ci.upper   mean.diff.ci.lower   mean.diff.ci.upper 
         -0.67014167           0.01065676           0.11116273           0.50422189 
upper.limit.ci.lower upper.limit.ci.upper 
          0.60472786           1.28552628 

resina

bland.altman.stats(df2$LT.control.,df2$LT.Resina.)$CI.lines
lower.limit.ci.lower lower.limit.ci.upper   mean.diff.ci.lower   mean.diff.ci.upper 
         -1.41553123          -0.23183628          -0.05708791           0.62631868 
upper.limit.ci.lower upper.limit.ci.upper 
          0.80106705           1.98476199 

LT lae

bland.altman.stats(df2$LT.control.,df2$LT.LAE.)$CI.lines
lower.limit.ci.lower lower.limit.ci.upper   mean.diff.ci.lower   mean.diff.ci.upper 
                   0                    0                    0                    0 
upper.limit.ci.lower upper.limit.ci.upper 
                   0                    0 

Visualizo en otra grafica para LAE vs control

df2 %>% 
ggplot(mapping = aes(x = LT.control., y = LT.LAE.)) +
  geom_point(color = "black", size = 1) +
  labs(title = "Diagrama de dispersión", x = "método A", y = "método B") +
  geom_smooth(method = "lm", se = TRUE, color = "red", lwd = 0.5) +
  geom_abline(intercept = 0, slope = 1, lwd = 0.7, col = "blue") +
  theme(axis.line = element_line(colour = "black"), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        panel.border = element_blank(), 
        panel.background = element_blank()) +
  theme_bw() + theme(plot.title = element_text(hjust = 0.5)) 

Para control vs chemfil

df2 %>% 
ggplot(mapping = aes(x = LT.control., y = LT.Chemfil.)) +
  geom_point(color = "black", size = 1) +
  labs(title = "Diagrama de dispersión", x = "método A", y = "método B") +
  geom_smooth(method = "lm", se = TRUE, color = "red", lwd = 0.5) +
  geom_abline(intercept = 0, slope = 1, lwd = 0.7, col = "blue") +
  theme(axis.line = element_line(colour = "black"), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        panel.border = element_blank(), 
        panel.background = element_blank()) +
  theme_bw() + theme(plot.title = element_text(hjust = 0.5)) 

Para control vs Ketac-molar

df2 %>% 
ggplot(mapping = aes(x = LT.control., y = LT.Ketac.Molar.)) +
  geom_point(color = "black", size = 1) +
  labs(title = "Diagrama de dispersión", x = "método A", y = "método B") +
  geom_smooth(method = "lm", se = TRUE, color = "red", lwd = 0.5) +
  geom_abline(intercept = 0, slope = 1, lwd = 0.7, col = "blue") +
  theme(axis.line = element_line(colour = "black"), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        panel.border = element_blank(), 
        panel.background = element_blank()) +
  theme_bw() + theme(plot.title = element_text(hjust = 0.5)) 

Para control vs resina compuest

df2 %>% 
ggplot(mapping = aes(x = LT.control., y = LT.Resina.)) +
  geom_point(color = "black", size = 1) +
  labs(title = "Diagrama de dispersión", x = "método A", y = "método B") +
  geom_smooth(method = "lm", se = TRUE, color = "red", lwd = 0.5) +
  geom_abline(intercept = 0, slope = 1, lwd = 0.7, col = "blue") +
  theme(axis.line = element_line(colour = "black"), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        panel.border = element_blank(), 
        panel.background = element_blank()) +
  theme_bw() + theme(plot.title = element_text(hjust = 0.5)) 

reformateo y abro el nuevo df

bland antmamm

LS0tCnRpdGxlOiAiVGVzaXMgbWVkaWNpb25lcyBMQUUgeSBtYXRlcmlhbGVzXzIwMTkiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KI3BhY2thZ2VzCmBgYHtyfQpsaWJyYXJ5KCJ0aWR5dmVyc2UiKQpsaWJyYXJ5KCJnZ3RoZW1lcyIpCmxpYnJhcnkoImZvcmNhdHMiKQpsaWJyYXJ5KCJnZ3Bsb3QyIikKbGlicmFyeSgiQmxhbmRBbHRtYW5MZWgiKQpgYGAKI2NhcmdvIGRmIGRlc2RlIGxhIHdlYiB5IGNyZW8gZWwgb2JqZXRvCmBgYHtyfQpkZiA8LSByZWFkLmNzdigiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvZS8yUEFDWC0xdlFnQnVTaWt0UTItcmh3eVJWTzNzMEhLM2IwcC1XcTJ2M293eE5HY2ctVG81N21IckVmbUg2QWh1Q2hhdmpPQ012aGpZdklIdU5MMWxpUC9wdWI/Z2lkPTQ3NDQ3MDEzMCZzaW5nbGU9dHJ1ZSZvdXRwdXQ9Y3N2IikKYGBgCiNncmFmaWNhIApgYGB7cn0KZGYgJT4lIAogZ2dwbG90KGFlcyh4ID0gZmN0X3Jlb3JkZXIoTWF0ZXJpYWwsIGBNZWRpZGFgKSwgeSA9IGBNZWRpZGFgLCBjb2xvcj1NYXRlcmlhbCkpICsKICBnZW9tX2JveHBsb3QoKSsKICB0aGVtZV9taW5pbWFsKCkrCiAgY29vcmRfZmxpcCgpCmBgYAojY2FyZ28gcGxhbnRpbGxhCmBgYHtyfQpkZjIgPC0gcmVhZC5jc3YoImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kL2UvMlBBQ1gtMXZRZ0J1U2lrdFEyLXJod3lSVk8zczBISzNiMHAtV3EydjNvd3hOR2NnLVRvNTdtSHJFZm1INkFodUNoYXZqT0NNdmhqWXZJSHVOTDFsaVAvcHViP2dpZD0xODQ1Njg1OTI2JnNpbmdsZT10cnVlJm91dHB1dD1jc3YiKQpgYGAKI051ZXZhcyB2YXJpYWJsZXMgZGUgZGlmZXJlbmNpYXMgZW50cmUgbWVkaWNpb25lcwpgYGB7cn0KTHRfZGlmZXJlbmNpYXMgPC0gZGYyICU+JSAKICBtdXRhdGUoQ29udHJvbD1MVC5jb250cm9sLi0gTFQuY29udHJvbC4pICU+JSAKICBtdXRhdGUoTEFFID0gTFQuY29udHJvbC4gLSBMVC5MQUUuKSAlPiUgCiAgbXV0YXRlKENoZW1maWwgPSBMVC5jb250cm9sLiAtIExULkNoZW1maWwuKSAlPiUgCiAgbXV0YXRlKEtldGFjID0gTFQuY29udHJvbC4gLSBMVC5LZXRhYy5Nb2xhci4pICU+JSAKICBtdXRhdGUoUmVzaW5hPSBMVC5jb250cm9sLiAtIExULlJlc2luYS4pCmBgYAojYm94cGxvdCBkZSBsYXMgZGlmZXJlbmNpYXMKYGBge3J9Ckx0X2RpZmVyZW5jaWFzICU+JSAKICBnYXRoZXIoa2V5ID0gInZhcmlhYmxlIiwgdmFsdWUgPSAidmFsb3IiLCBMQUU6UmVzaW5hKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gZmN0X3Jlb3JkZXIodmFyaWFibGUsIGB2YWxvcmApLCB5ID0gYHZhbG9yYCkpICsKIGdlb21fYm94cGxvdCgpKwogIHRoZW1lX21pbmltYWwoKQpgYGAKCiNibGFuZCBhbHRtYW4gcGFyYSBjb250cm9sIHZzIGxhZQpgYGB7cn0KYmxhbmQuYWx0bWFuLnBsb3QoZGYyJExULmNvbnRyb2wuLGRmMiRMVC5MQUUuICwgCiAgICAgICAgICAgICAgICAgIGdyYXBoLnN5cyA9ICJnZ3Bsb3QyIikKYGBgCiNibGFuZCBhbHRtYW4gcGFyYSBjb250cm9sIHZzIGNoZW1maWwKYGBge3J9CmJsYW5kLmFsdG1hbi5wbG90KGRmMiRMVC5jb250cm9sLixkZjIkTFQuQ2hlbWZpbC4gLCAKICAgICAgICAgICAgICAgICAgZ3JhcGguc3lzID0gImdncGxvdDIiKQpgYGAKI0NoZW1maWwgCmBgYHtyfQpibGFuZC5hbHRtYW4uc3RhdHMoZGYyJExULmNvbnRyb2wuLGRmMiRMVC5DaGVtZmlsLikkQ0kubGluZXMKYGBgCiNrZXRhYwpgYGB7cn0KYmxhbmQuYWx0bWFuLnN0YXRzKGRmMiRMVC5jb250cm9sLixkZjIkTFQuS2V0YWMuTW9sYXIuKSRDSS5saW5lcwpgYGAKI3Jlc2luYQpgYGB7cn0KYmxhbmQuYWx0bWFuLnN0YXRzKGRmMiRMVC5jb250cm9sLixkZjIkTFQuUmVzaW5hLikkQ0kubGluZXMKYGBgCiNMVCBsYWUKYGBge3J9CmJsYW5kLmFsdG1hbi5zdGF0cyhkZjIkTFQuY29udHJvbC4sZGYyJExULkxBRS4pJENJLmxpbmVzCmBgYAoKCiNWaXN1YWxpem8gZW4gb3RyYSBncmFmaWNhIHBhcmEgTEFFIHZzIGNvbnRyb2wgCmBgYHtyfQpkZjIgJT4lIApnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gTFQuY29udHJvbC4sIHkgPSBMVC5MQUUuKSkgKwogIGdlb21fcG9pbnQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMSkgKwogIGxhYnModGl0bGUgPSAiRGlhZ3JhbWEgZGUgZGlzcGVyc2nDs24iLCB4ID0gIm3DqXRvZG8gQSIsIHkgPSAibcOpdG9kbyBCIikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgY29sb3IgPSAicmVkIiwgbHdkID0gMC41KSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gMCwgc2xvcGUgPSAxLCBsd2QgPSAwLjcsIGNvbCA9ICJibHVlIikgKwogIHRoZW1lKGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siKSwgCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpKSArCiAgdGhlbWVfYncoKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSAKYGBgCiNQYXJhIGNvbnRyb2wgdnMgY2hlbWZpbApgYGB7cn0KZGYyICU+JSAKZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IExULmNvbnRyb2wuLCB5ID0gTFQuQ2hlbWZpbC4pKSArCiAgZ2VvbV9wb2ludChjb2xvciA9ICJibGFjayIsIHNpemUgPSAxKSArCiAgbGFicyh0aXRsZSA9ICJEaWFncmFtYSBkZSBkaXNwZXJzacOzbiIsIHggPSAibcOpdG9kbyBBIiwgeSA9ICJtw6l0b2RvIEIiKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBUUlVFLCBjb2xvciA9ICJyZWQiLCBsd2QgPSAwLjUpICsKICBnZW9tX2FibGluZShpbnRlcmNlcHQgPSAwLCBzbG9wZSA9IDEsIGx3ZCA9IDAuNywgY29sID0gImJsdWUiKSArCiAgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIpLCAKICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X2JsYW5rKCksIAogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCkpICsKICB0aGVtZV9idygpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpIApgYGAKI1BhcmEgY29udHJvbCB2cyBLZXRhYy1tb2xhcgpgYGB7cn0KZGYyICU+JSAKZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IExULmNvbnRyb2wuLCB5ID0gTFQuS2V0YWMuTW9sYXIuKSkgKwogIGdlb21fcG9pbnQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMSkgKwogIGxhYnModGl0bGUgPSAiRGlhZ3JhbWEgZGUgZGlzcGVyc2nDs24iLCB4ID0gIm3DqXRvZG8gQSIsIHkgPSAibcOpdG9kbyBCIikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgY29sb3IgPSAicmVkIiwgbHdkID0gMC41KSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gMCwgc2xvcGUgPSAxLCBsd2QgPSAwLjcsIGNvbCA9ICJibHVlIikgKwogIHRoZW1lKGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siKSwgCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpKSArCiAgdGhlbWVfYncoKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSAKYGBgCiNQYXJhIGNvbnRyb2wgdnMgcmVzaW5hIGNvbXB1ZXN0CmBgYHtyfQpkZjIgJT4lIApnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gTFQuY29udHJvbC4sIHkgPSBMVC5SZXNpbmEuKSkgKwogIGdlb21fcG9pbnQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMSkgKwogIGxhYnModGl0bGUgPSAiRGlhZ3JhbWEgZGUgZGlzcGVyc2nDs24iLCB4ID0gIm3DqXRvZG8gQSIsIHkgPSAibcOpdG9kbyBCIikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgY29sb3IgPSAicmVkIiwgbHdkID0gMC41KSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gMCwgc2xvcGUgPSAxLCBsd2QgPSAwLjcsIGNvbCA9ICJibHVlIikgKwogIHRoZW1lKGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siKSwgCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpKSArCiAgdGhlbWVfYncoKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSAKYGBgCiNyZWZvcm1hdGVvIHkgYWJybyBlbCBudWV2byBkZgpgYGB7cn0KZGYzIDwtIHJlYWQuY3N2KCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC9lLzJQQUNYLTF2UWdCdVNpa3RRMi1yaHd5UlZPM3MwSEszYjBwLVdxMnYzb3d4TkdjZy1UbzU3bUhyRWZtSDZBaHVDaGF2ak9DTXZoall2SUh1TkwxbGlQL3B1Yj9naWQ9Nzg0NzgzODc4JnNpbmdsZT10cnVlJm91dHB1dD1jc3YiKQpgYGAKI2JsYW5kIGFudG1hbW0KYGBge3J9CmRmMyAlPiUgCmdncGxvdChhZXMoeCA9IExUX3Byb21lZGlvLCB5ID0gTFRfZGlmLCBzaGFwZT1NYXRlcmlhbCwgY29sb3I9TWF0ZXJpYWwpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IG1lYW4oZGYzJExUX2RpZiksIGNvbG91ciA9ICJibHVlIiwgc2l6ZSA9IDAuNSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IG1lYW4oZGYzJExUX2RpZikgLSAoMS45NiAqIHNkKGRmMyRMVF9kaWYpKSwgY29sb3VyID0gInJlZCIsIHNpemUgPSAwLjUpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBtZWFuKGRmMyRMVF9kaWYpICsgKDEuOTYgKiBzZChkZjMkTFRfZGlmKSksIGNvbG91ciA9ICJyZWQiLCBzaXplID0gMC41KSArCiAgeWxhYigiRGlmZXJlbmNpYSBlbnRyZSBtZWRpZGljb25lcyIpICsKICB4bGFiKCJQcm9tZWRpbyBkZSBtZWRpY2lvbmVzIikrCiAgdGhlbWVfbWluaW1hbCgpCmBgYAoKCg==