Podernovo, Consuma, 2017 (la Marca, Rinaldini, et al.)
Nel corso di una utilizzazione a raso di un impianto di douglasia di circa 50 anni, in un area di 2500 m2, tra 87 fusti presenti, ne sono stati selezionati 47 come Alberi Modello.
Dagli AM abbattuti, alle estremità dei toppi individuati dall’operatore in funzione degli assortimenti da produrre, sono state prelevate sezioni (rotelle).
[Project repository: https://github.com/NuoroForestrySchool/TreeStemAnalysis/tree/master/2017Douglasia-Podernovo]
[Documentazione struttura base dati: https://docs.google.com/a/uniss.it/document/d/1XvKwF-WxBra7PZ-ooxAcUGMu0ZsKfqYpiE0zPzzQw08/edit?usp=sharing]
Base dati
## path: 2017Douglasia-Podernovo
## file: 2017PodernovoDouglasiaProfiliSemplificati_GSapp.sqlite
Elenco tabelle contenute nel Data Base
## [1] "AdF0" "Aree" "CalcolaIncRaggio"
## [4] "Cavallettamento" "ClassificaRighe" "FustiAM"
## [7] "FustiAM_eta" "IncHtot" "Rilievi"
## [10] "RilieviAccoppiati" "Rotelle" "SintesiRotelleDaAdF"
## [13] "tmp"
Consistenza della base dati
## Table Nrows
## 1 Aree 1
## 2 Rilievi 2
## 3 Cavallettamento 50
## 4 FustiAM 46
## 5 IncHtot 185
## 6 Rotelle 191
## 7 AdF0 12509
Fusti modello con altezza totale non nota
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## Id_fusto "4" "5" "9" "18" "19" "24" "29" "33"
Fusti modello a cui manca la rotella di base
## [,1] [,2]
## Id_fusto "35" "6"
Fusti modello, dati di base [ATTENZIONE: Fusti con anno di nascita recente da verificare]
SELECT * FROM FustiAM_eta ORDER BY anno_n DESC
| CodiceArea | CodiceRilievo | Id_fusto | d130 | h_tot | h_tot_note | anno_n | eta_abb |
|---|---|---|---|---|---|---|---|
| P | a | 27 | 21 | 25 | 1990 | 27 | |
| P | a | 17 | 19 | 36 | 1984 | 33 | |
| P | a | 41 | 26 | 23 | 1982 | 35 | |
| P | a | 32 | 23 | 28 | 1980 | 37 | |
| P | a | 21 | 28 | 22 | 1976 | 41 | |
| P | a | 22 | 29 | 28 | 1976 | 41 | |
| P | a | 25 | 36 | 35 | 1973 | 44 | |
| P | a | 38 | 46 | 37 | 1973 | 44 | |
| P | a | 44 | 27 | 23 | 1973 | 44 | |
| P | a | 42 | 17 | 13 | 1971 | 46 |
Altezza delle rotelle (dei fusti con h_tot nota e rotella di base disponibile)
## Id_fusto 1 2 3 4 5 6 7
## 1 0 6.25 12.5 18.75 20.2
## 2 0 6.3 12.6 18.9 25.2 28.35
## 3 0 6.3 12.6 18.9 25.2 27.65
## 7 0 6.3 12.6 18.9 25.2 27.6
## 10 0 6.3 12.6 18.9 25.2 31.45
## 11 0 5 10
## 12 0 6.3 12.6 17.6
## 13 0 6.3 12.6 18.9 23.9
## 14 0 6.3 12.6 18.9 25.2
## 16 0 6.3 12.6 18.9
## 17 0 5 10
## 20 0 12.5 25
## 21 0 6.3
## 22 0 12.5
## 25 0 12.5 18.9
## 26 0 12.5 25
## 27 0 2.45 5
## 30 0 12.6 25
## 32 0 2.45 4.9 7.35 9.9 12.35 14.9
## 36 0 12.6 21.35 23.8 26.25
## 37 0 12.5 18.9 25.2
## 38 0 6.3 12.6 18.9 25.2 27.6
## 39 0 12.5 14.95 17.4
## 40 0 6.3 12.6 18.9 25.2
## 41 0 11
## 42 0 6.3
## 43 0 13.5
## 44 0 6.3 8.75 11.2 13.65
## 46 0 6.3 12.6 18.9 25.2
Rotelle con ‘ripetizione=b’ diversa da ‘a’ (occorre verificare i casi in cui la ‘diff’ è negativa e comunque quando la nota è vuota)
SELECT A.Id_fusto,
A.Id_rotella,
A.num_inc num_inc_a,
B.num_inc num_inc_b,
A.num_inc - B.num_inc diff,
B.note
FROM SintesiRotelleDaAdF A
LEFT JOIN
SintesiRotelleDaAdF B USING (
Id_fusto,
Id_rotella
)
WHERE A.ripetizione = 'a' AND
B.ripetizione = 'b' AND
num_inc_a <> num_inc_b;
| Id_fusto | Id_rotella | num_inc_a | num_inc_b | diff | note |
|---|---|---|---|---|---|
| 2 | 1 | 50 | 37 | 13 | mancano misure successive |
| 3 | 1 | 50 | 47 | 3 | mancano misure successive |
| 4 | 1 | 50 | 30 | 20 | mancano misure successive |
| 4 | 3 | 28 | 29 | -1 | NA |
| 4 | 4 | 19 | 14 | 5 | mancano misure successive |
| 7 | 1 | 51 | 31 | 20 | mancano misure successive |
| 7 | 4 | 30 | 6 | 24 | mancano misure successive |
| 8 | 1 | 43 | 44 | -1 | NA |
| 9 | 1 | 51 | 40 | 11 | mancano misure successive |
| 9 | 2 | 42 | 39 | 3 | mancano misure successive |
| 9 | 5 | 23 | 19 | 4 | mancano misure successive |
| 10 | 1 | 49 | 40 | 9 | mancano misure successive |
| 11 | 2 | 38 | 26 | 12 | mancano misure successive |
| 13 | 1 | 50 | 35 | 15 | mancano misure successive |
| 15 | 5 | 19 | 20 | -1 | NA |
| 15 | 6 | 14 | 13 | 1 | NA |
| 16 | 1 | 49 | 37 | 12 | mancano misure successive |
| 16 | 2 | 40 | 27 | 13 | mancano misure successive |
| 18 | 1 | 50 | 46 | 4 | mancano misure successive |
| 23 | 1 | 49 | 35 | 14 | mancano misure successive |
| 23 | 2 | 36 | 37 | -1 | NA |
| 23 | 4 | 19 | 20 | -1 | NA |
| 24 | 1 | 36 | 17 | 19 | mancano misure successive |
| 26 | 2 | 36 | 6 | 30 | mancano misure successive |
| 27 | 1 | 28 | 1 | 27 | mancano misure successive |
| 28 | 2 | 33 | 36 | -3 | NA |
| 28 | 4 | 35 | 30 | 5 | NA |
| 28 | 5 | 35 | 31 | 4 | NA |
| 28 | 6 | 31 | 28 | 3 | NA |
| 29 | 1 | 47 | 48 | -1 | NA |
| 29 | 2 | 40 | 39 | 1 | NA |
| 30 | 1 | 50 | 39 | 11 | mancano misure successive |
| 31 | 1 | 51 | 45 | 6 | mancano misure successive |
| 31 | 2 | 38 | 37 | 1 | NA |
| 31 | 4 | 19 | 20 | -1 | NA |
| 33 | 4 | 32 | 7 | 25 | mancano misure successive |
| 34 | 1 | 50 | 42 | 8 | mancano misure successive |
| 34 | 3 | 31 | 32 | -1 | NA |
| 35 | 2 | 39 | 32 | 7 | mancano misure successive |
| 36 | 2 | 43 | 16 | 27 | mancano misure successive |
| 38 | 1 | 45 | 31 | 14 | mancano misure successive |
| 40 | 1 | 51 | 47 | 4 | mancano misure successive |
| 40 | 4 | 28 | 27 | 1 | NA |
| 44 | 1 | 45 | 22 | 23 | mancano misure successive |
| 45 | 1 | 42 | 43 | -1 | NA |
| 46 | 5 | 17 | 15 | 2 | mancano misure successive |
Dettaglio da sopra, raggi con letture in eccesso: arrivano al 2018!
select distinct Id_fusto, Id_rotella, ripetizione, max(anno) from AdF0 group by Id_fusto, Id_rotella, ripetizione having anno>2017;
| Id_fusto | Id_rotella | ripetizione | max(anno) |
|---|---|---|---|
| 4 | 3 | b | 2018 |
| 8 | 1 | b | 2018 |
| 15 | 5 | b | 2018 |
| 23 | 2 | b | 2018 |
| 23 | 4 | b | 2018 |
| 28 | 2 | b | 2020 |
| 29 | 1 | b | 2018 |
| 31 | 4 | b | 2018 |
| 34 | 3 | b | 2018 |
| 45 | 1 | b | 2018 |
Misure con incongruenze evidenti (ho ipotizzato delle correzioni, sarebbe bene, verificare sulle rotelle: ‘misura0’ dovrebbe essere la tua misura, ‘misura1’ è il valore modificato da me)
print(dbGetQuery(con, "select Id_fusto, Id_rotella, ripetizione, anno, misura0, misura1 from AdF0 where misura1<>misura0"))
## Id_fusto Id_rotella ripetizione anno misura0 misura1
## 1 1 1 b 2001 38.5 38.30
## 2 1 1 b 2002 38.3 38.50
## 3 3 1 a 1988 114.9 14.90
## 4 3 1 b 2009 5.8 55.80
## 5 6 4 a 1994 1.1 11.10
## 6 6 5 b 2015 18.6 18.40
## 7 6 5 b 2016 18.4 18.60
## 8 7 2 b 2012 9.8 39.80
## 9 7 3 b 2002 30.6 30.40
## 10 7 3 b 2003 30.4 30.60
## 11 12 3 b 2013 19.4 19.90
## 12 15 6 a 2010 46 4.60
## 13 18 1 b 2010 444 44.40
## 14 21 1 b 1979 1.4 17.40
## 15 21 2 b 1989 14.5 13.40
## 16 21 2 b 1990 13.4 14.30
## 17 21 2 b 1991 14.3 14.50
## 18 23 2 b 1984 2 22.00
## 19 23 2 b 2009 36.1 37.10
## 20 28 6 a 1998 3.1 3.15
## 21 30 1 b 2000 33.6 32.60
## 22 31 3 a 2016 0.8 0.70
## 23 31 3 a 2015 0.7 0.80
## 24 32 5 a 1996 6.2 6.00
## 25 32 5 a 1995 6 6.20
## 26 37 1 a 1979 20 19.00
## 27 37 3 a 1991 16.6 15.60
## 28 37 4 b 2016 31.3 32.30
## 29 40 2 b 2006 41.4 41.20
## 30 40 2 b 2007 41.8 41.40
## 31 40 2 b 2008 41.2 41.60
## 32 40 4 b 2004 29.1 28.70
## 33 40 4 b 2005 28.7 29.10
## 34 40 4 b 2006 29.1 29.60
## 35 40 4 b 2007 29.6 30.00
## 36 40 4 b 2008 30 30.40
## 37 40 4 b 2009 30.4 30.80
## 38 40 4 b 2010 30.8 31.20
## 39 40 4 b 2011 31.2 31.80
## 40 40 4 b 2012 31.8 32.20
## 41 40 4 b 2013 32.2 32.50
## 42 40 4 b 2014 32.5 33.10
## 43 40 4 b 2015 33.1 33.50
## 44 40 4 b 2016 33.5 33.90
## 45 43 1 b 1989 24 24.60
## 46 43 1 b 1996 2.5 25.50
Analisi incrementi estremi (“le variazioni annuali di incremento sono tra loro sincronizzate?
Proviamo a vedere come sono distribuiti nel campione gli incrementi massimi.”)
Livello e variabilità degli incrementi massimi
irmax <- dbGetQuery(con,"select Id_fusto, Id_rotella, ripetizione, anno, max(ir) max_ir from CalcolaIncRaggio group by Id_fusto, Id_rotella, ripetizione")
library(latticeExtra, quietly=T)
## Warning: package 'latticeExtra' was built under R version 3.3.3
with(irmax[irmax$ripetizione=='a',], histogram(anno, breaks=max(anno)-min(anno)+1, type="c"))
library(beanplot, quietly=T)
## Warning: package 'beanplot' was built under R version 3.3.3
with(irmax[irmax$ripetizione=='a',], beanplot(max_ir ~ anno, main="Media e distribuzione dei valori di Incremento-Massimo", sub="solo ripetizione 'a', Fusti e Rotelle confusi"))
OSSERVAZIONE: i due istogrammi (relativi a ‘ripetizione’ ‘a’, sopra, e ‘b’, sotto) non appaiono molto correlati, evito quindi, per ora di confondere le ripetizioni!
with(irmax[irmax$ripetizione=='b',], histogram(anno, breaks=max(anno)-min(anno)+1, type="c"))
ATTENZIONE: si osserva inoltre una anomala concentrazione di picchi di incremento sull’ultima misura effettuata sulle rotelle
select ripetizione, anno, count() freq from (select Id_fusto, Id_rotella, ripetizione, anno, max(ir) from CalcolaIncRaggio group by Id_fusto, Id_rotella, ripetizione) group by ripetizione, anno having anno>=2010 and ripetizione='b'
| ripetizione | anno | freq |
|---|---|---|
| b | 2010 | 1 |
| b | 2017 | 38 |
| b | 2018 | 3 |
Vista di insieme su tutti gli incrementi - solo ripetizione=‘a’
ir <- dbReadTable(con, "CalcolaIncRaggio")
library(latticeExtra, quietly=T)
with(ir[ir$ripetizione=='a' & ir$Id_fusto<99,], xyplot(ir~anno|as.factor(Id_fusto), group=as.factor(Id_rotella), type="l"))