Cosa descrive una Time Series?
Una serie storica (in inglese Time Series) è costituita da un insieme di variabili relative ad un certo fenomeno e ordinate nel tempo. La serie storica esprime la dinamica del fenomeno nel tempo.
Le serie storiche sono studiate:
- per interpretare il fenomeno analizzato;
- per prevedere l’andamento nel futuro del fenomeno sotto analisi.
L’utilizzo di un modello in entrambi i casi è di fondamentale importanza per non dare delle conclusioni affrettate sul fenomeno. Prendiamo ora come esempio la seguente serie storica:
computer %>%
tail(10)
## # A tibble: 10 x 3 ## tech year n ## <chr> <dbl> <dbl> ## 1 computer 2008 7130 ## 2 computer 2009 5913 ## 3 computer 2010 5718 ## 4 computer 2011 5870 ## 5 computer 2012 6323 ## 6 computer 2013 6730 ## 7 computer 2014 6844 ## 8 computer 2015 6474 ## 9 computer 2016 6204 ## 10 computer 2017 6915
Il dataset computer
mostrato rappresenta l’andamento nel tempo del numero di brevetti sottomessi negli uffici brevettuali di tutto il mondo, che contengono nel loro testo la parola computer. Lo studio di questo fenomeno è di particolare interesse per l’ Innovation Management (gestione dell’innovazione). Quello che stiamo analizzando in questo specifico caso è l’evoluzione nel tempo di una tecnologia (nel nostro caso della tecnologia computer), fenomeno che viene definito in gestione dell’innovazione come Traiettoria Tecnologica. Nel seguente documento presenteremo un particolare modello che viene utilizzato per investigare la traiettoria tecnologica, che è la Curva ad S.
Con l’ondata tecnologica che si è avuta con l’Industria 4.0, l’analisi delle traiettorie tecnologiche o delle serie storiche e in generale la processazione dei dati, ha avuto nuova vita. Infatti, i nuovi tool di analisi dei dati, come R, sono maggiormente accessibili ad una sempre più ampia popolazione. Tuttavia quello che succede, a volte, è pensare che questi strumenti possano sostituirsi all’intelletto umano.
Ad esempio, un approccio tipico che emerge nella costruzione di un modello nel software Rstudio è di far interpolare in modo automatico un insime di dati al software, utilizzando una funzione predefinita. Facciamo un esempio: partendo dal nostro dataset computer
abbiamo mostrato nella figura, il numero di brevetti che contengono la parola computer per ogni anno: ogni punto nel grafico rappresenta un singolo anno. In particolare sull’asse x della figura abbiamo il tempo, in anni, mentre sull’y abbiamo il numero di brevetti.
computer %>%
ggplot(aes(x = year, y = n)) +
geom_point() +
xlab("Year") +
ylab("Number of patents") +
theme_minimal() + geom_smooth() +
theme(text = element_text(size = 25))
Abbiamo usato una funzione di interpolazione contenuta nel pacchetto ggplot2
: geom_smooth()
. Questa funzione costruisce la linea che meglio interpola i dati, nel grafico rappresentata dalla linea blu. Ma l’esercizio non può ritenersi chiuso qui. Lo studioso dovrebbe andar oltre il mero esercizio grafico e chiedersi:
- Quale funzione meglio cattura l’andamento della linea che il software ha disegnato?
- Come posso spiegare questa relazione tra la variabile x e y?
- Quanto è forte la relazione tra la variabile x e y?
Queste sono soltanto una porzione di domande che possiamo porci. I package utilizzati nella seguente analisi sono: tidyverse
e tidymodels
, quindi ricordatevi di Installare questi pacchetti e successivamente di caricarli nel vostro ambiente di lavoro, come abbiammo fatto di seguito.
library(tidyverse)
library(tidymodels)
library(textyr)
Teoria sulle Curve ad S
Che cos’è il “Technology Forecasting”
Le curve ad S rientrano nell’ambito del Technology Forecasting, che include una serie di metodologie finalizzate a effettuare delle predizioni quantitative sull’andamento futuro di un campo tecnologico al fine di supportare le decisioni aziendali analizzando le future opportunità e minacce.
Le Curve a S
Le curve ad S descrivono le fasi del ciclo vita della tecnologia, dalla comparsa della tecnologia al suo declino. Il modello di curva ad S è solitamente utilizzato in teoria dell’innovazione per spiegare due fenomeni legati ad una tecnologia:
- l’andamento della performance tecnologica;
- il processo di diffusione di una tecnologia sul mercato.
Questi due fenomeni sebbene correlati tra loro, sono però due fenomeni distinti. Il primo è volto a descrivere come le prestazioni di una tecnologia variano lungo il ciclo vita della tecnologia sotto analisi. Il secondo pone l’accento su come il mercato adotta la tecnologia lungo le varie fasi del ciclo vita.
Il ciclo vita di una tecnologia è analizzato sotto due punti di vista:
- il globale degli investimenti sostenuti dall’area di ricerca e sviluppo sulla tecnologia in esame;
- gli anni vita della tecnologia supponendo un investimento costante nella tecnologia.
Di norma si riscontra un andamento iniziale lento della performance o nell’adozione della tecnologia, nella fase chiamata Emergente. Questa fase è seguita da una accelerazione della performance o nell’adzione (fase di Crescita) con una conseguente fase che presenta un rallentamento nel processo di miglioramento/adozione (fase di Maturità). il ciclio vita di una tecnologia si chiude con la fase di Saturazione in cui la performance della tecnologia non può essere superata o all’interno del mercato non ci sono nuovi adottanti della tecnologia sotto analisi. Le curve ad S si costruiscono in un piano in cui:
- sull’asse x è presente una dimensione che quantifica l’impegno nella ricerca e nello sviluppo rispetto alla tecnologia in analisi oppure la dimensione temporale;
- sull’asse y è riportata una metrica volta a misurare uno dei due fenomeni descritti(ovvero
parametro di prestazione distintivo della tecnologia oppure la quantità di adottanti della tecnologia stessa).
Per avere una comprensione dell’analisi presentata in questo documento è importante definire questi due elementi di una curva ad S:
- il punto di inflessione della curva ad S, che è il momento in cui la curva cambia pendenza e la tecnologia si trova nella fase di Maturità;
- il limite superiore della curva ad S, che è il limite naturale di sviluppo della tecnologia. Ovvero il punto in cui il valore di prestazione non è ulteriormente migliorabile oppure non sono possibili ulteriori adozioni sul mercato.
In generale la curva ad S di una tecnologia non è nota a priori, ma può essere stimata con dei modelli noti e ben studiati. Allo stato dell’arte i modelli più utilizzati sono la curva Logistica e la curva di Gompertz. Questi sono due modelli parametrici che utilizzano 3 paramtri per costruire una curva ad S:
- a = Coordinata del punto di inflessione sull’asse x,
- b = Indicatore che fa riferimento alla crescita nel punto di inflessione, ovvero la pendenza della retta tangente la curva a S nel punto di inflessione
- d = Asintoto orizzontale della curva
Le differenze tra il modello logistico e quello di Gompertz sono:
- il modello logistico è simmetrico rispetto al punto di inflessione della curva, mentre il modello di Gompertz no;
- nel modello logistico la crescita è lineare, mentre il modello di Gompertz è esponenziale;
- il punto di inflessione della tecnologia si trova al 50% del limite superiore per la curva logistica e al 37% per il modello di Gompertz.
Prima di vedere come costruire le curve ad S in R è importante porsi le seguenti domande:
- Qual è il fenomeno che vogliamo analizzare, l’adozione di una tecnologia oppure l’andamento delle prestazioni relative alla tecnologia?
- Vogliamo analizzare la cumulata dell’investimento in R&D oppure il tempo sull’asse delle ascisse?
- Quale metrica vogliamo utilizzare per misurare in modo quantitativo il fenomeno sotto analisi? O detta in altre parole, quale metrica inserire sull’asse delle ordinate?
In questo documento analizzeremo la diffusione di una tecnologia in funzione degli anni della tecnologia stessa. La metrica usata per quantificare la diffusione di una tencologia è la cumulata del numero di brevetti pubblicati che citano la tecnologia in esame. L’ipotesi che stiamo facendo è la seguente: “all’aumentare del numero di brevetti che menzionano nel testo del brevetto una determinata tecnologia aumenta il numero di adottanti della tecnologia sul mercato”.
L’uso delle Curve ad S in R
Gli step per costruire un modello di regressione sono schematizzati come segue e descritti in dettaglio nei paragrafi seguenti:
- Preparare il dataset
- Esplorare il dataset
- Addestrare il modello
- Testare il modello
- Selezionare il modello
Innazitutto è necessario preparare il dataset ed esplorarlo. Successivamente bisogna costruire il modello ad S e testare la sua bontà per comprendere quanto il modello costruito fitta bene i dati reali. In quest’analisi saranno utilizzati entrambi i modelli di curve ad S che sono stati introdotti sopra: il modello Logistico e di Gompertz. Per questo motivo la fase finale è la selzione del modello che descrive meglio i dati reali nello specifico caso analizzato.
Preparare il dataset
L’obiettivo della fase di preparazione del dataset è realizzare una versione tidy del dataset per facilitare le analisi successive. In questa fase i dati sono acquisiti dal database Free Patents Online (FPO), una risorsa open source per scaricare i brevetti che sono stati depositati negli uffici brevettuali delle varie parti del mondo.
Pertanto, in primo luogo è necessario scrivere la query per scaricare i dati da analizzare, indicando i campi testuali del brevetto in cui eseguire la ricerca dei termini indicati. In questo documento analizziamo l’andamento della tecnologia “computer” dal 1950 al 2017.
# Costruire la query
my_query <- 'ABST/(computer) OR TTL/("computer")'
Per la costruzione della query è possibile usare anche gli operatori logici:
- AND
- OR
- AND NOT
Come nell’esempio che mostriamo di seguito.
my_query <-'ABST/("data mining" AND text AND NOT "text mining")
OR TTL/("data mining" AND text AND NOT "text mining")'
Per scaricare il numero dei brevetti per anno abbiammo creato una nostra funzione in grado di eseguire lo scraping delle informazioni contenute su FPO. La funzione ha come input la query che abbiamo scritto in precedenza e consente anche di indicare l’intervallo di tempo desiderato, che nel nostro caso abbiamo detto essere dal 1950 al 2017. Il risultato che ci restituisce la nostra funzione è il seguente:
## # A tibble: 68 x 3 ## tech year n ## <chr> <dbl> <dbl> ## 1 computer 1950 0 ## 2 computer 1951 0 ## 3 computer 1952 0 ## 4 computer 1953 0 ## 5 computer 1954 1 ## 6 computer 1955 0 ## 7 computer 1956 0 ## 8 computer 1957 0 ## 9 computer 1958 0 ## 10 computer 1959 0 ## # ... with 58 more rows
Per descrivere l’evoluzione nel tempo della tecnologia utilizzando le curve ad S è necessario usare la cumulata del numero di brevetti che citano la tecnologia sotto analisi. Inoltre, è importante ricordare che il numero cumulato di brevetti non va calcolato per anno (per il 1950, 1951, ecc…), ma per età della tecnologia. In tal caso supponiamo che il primo anno di vita della tecnologia sia il primo anno in cui viene pubblicato un brevetto che cita la stessa. Nel nostro esempio è il 1954. Nel seguente chunk di codice è mostrato come calcolare per la tecnologia computer
presa in esame:
- la cumulata del numero di brevetti;
- gli anni vita della tecnologia.
# Preparare il dataset
computer <- computer %>%
arrange() %>% # i dati devono essere ordinati
mutate(n_cum = cumsum(n)) %>% # Cumulata del numero di brevetti
filter(!(n_cum == 0)) %>%
mutate(t = year - min(.$year) + 1) # Anni della tecnologia
computer %>%
head(5)
## # A tibble: 5 x 5 ## tech year n n_cum t ## <chr> <dbl> <dbl> <dbl> <dbl> ## 1 computer 1954 1 1 1 ## 2 computer 1955 0 1 2 ## 3 computer 1956 0 1 3 ## 4 computer 1957 0 1 4 ## 5 computer 1958 0 1 5
Come è possibile osservare dal dataset computer
, abbiamo aggiunto due colonne al dataset: la colonna n_cum
in cui è presente la cumulata del numero di brevetti per ogni anno e la colonna t
che fa riferimento agli anni vita della tecnologia.
Esploare il dataset
Gli obiettivi dell’esplorazione del dataset sono:
- capire quale tipo di modello usare,
- decidere se è necessario eseguire un pre-processing dei dati,
- indentificare gli outliers.
Nel nostro caso possiamo saltare questa fase in quanto la domanda di ricerca a cui vogliamo rispondere è “i dati relativi al numero di brevetti contenenti la tecnologia computer possono essere descritti con la curva a S?”. In ogni caso vi ricordiamo che un possibile modo per esplorare il dataset è la visualizzazione dei dati.
Addestrare il modello
La costruzion del modello è divisa in due fasi fondamentali:
- Addestrare il modello sui dati, fase anche chiamata Training del modello;
- Valutare la performance del modello, in inglese Test del modello.
Entrambe le fasi hanno come fine ultimo, oltre la costruzione del modello stesso, quello di misurare le performance del modello in termini di capacità di fittare i dati reali. Per poter svolgere le due fasi, si suddivide il dataset di partenza (computer
) in training set e test set.
Il training set è utilizzato per costruire il modello nella fase di addestramento, mentre il test set è utilizzato nella fase seuccesiva, in cui si effettuerà una previsione dei valori contenuti nel test set, con il modello in precedenza costruito, in modo da confrontarli con i valori effettivi e definire l’errore che il modello commette.
Una regola empirica utilizzabile per effettuare la divisione del dataset è “usare 2/3 dei dati per il training set e 1/3 per il test set”. Ecco come effettuare la suddivisione del dataset computer
con il pacchetto tidymodels
:
# impostare un seed rendere l'analisi replicabile
set.seed(4595)
# Dividere il dataset
data_split <- initial_split(computer, strata = "t", p = 0.66)
# Creare il training set
computer_train <- training(data_split)
# Creare il test set
computer_test <- testing(data_split)
La funzione initial_split()
divide il dataset computer
in modo random secondo una variabile di stratificazione, strata
(che nel nostro caso è la colonna t
), usando un parametro per la divisione, p
(nel nostro caso pari a 2/3 ~ 0.66). Il training set è il dataset computer_train
, mentre il test set è computer_test
.
Nota aggiuntiva: L’istruzione set.seed()
consente ottenere la stessa divisione anche alle successive esecuzioni del codice, rendendo quindi l’analisi ripetibile.
Per eseguire il training del modello sul dataset computer_train
si utilizza la funzione drm()
, contenuta nel pacchetto drc
. Non abbiamo caricato il paccheto con la funzione library()
in quanto questo pacchetto ha una funzione in conflitto con la libreria tidyverse
, di cui facciamo ampiamente uso in questa analisi. Di seguito abbiamo riportato come dovrebbe essere utilizzata la funzione drm()
in modo astratto.
model <- drc::drm(y ~ x, data = your_dataset, fct = self_start)
Per eseguire il training bisogna definire:
- la variabile dipendente,
y
, - la varibile indipendente,
x
, - il dataset che contiene le variabili x e y, cioè
your_dataset
, - i valori iniziali per il training (
fct
). Per stimare i paramentri della curva ad S la funzionedrm()
ha bisogno di alcuni valori iniziali. Anziché inserire manualmente tali valori si possono utilizzare delle funzioni appositamente sviluppate nel pacchettodrc
, che vengono chiamate self starter(self_start
), che variano a seconda del modello di riferimento.
Nel nostro caso la variabile dipendente è il numero di brevetti cumulato n_cum
, la variabile indipendente è il tempo t
e il dataset è computer_train
:
## # A tibble: 43 x 5 ## tech year n n_cum t ## <chr> <dbl> <dbl> <dbl> <dbl> ## 1 computer 1954 1 1 1 ## 2 computer 1955 0 1 2 ## 3 computer 1958 0 1 5 ## 4 computer 1960 0 1 7 ## 5 computer 1961 1 2 8 ## 6 computer 1964 1 4 11 ## 7 computer 1965 3 7 12 ## 8 computer 1966 1 8 13 ## 9 computer 1968 24 40 15 ## 10 computer 1969 67 107 16 ## # ... with 33 more rows
Per quanto riguarda i valori iniziali da inserire al posto di self_start
:
- per il training di un modello Logistico si utilizza la funzione
L.3()
; - per il training di un modello Gompertz si utilizza la funzione
G.3()
.
Le funzioni L.3()
e G.3()
sono nel pacchetto drc
.
Vediamo come addestrare il modello e quali sono i parametri stimati nel nostro caso:
# Per addestrare un modello logistico
logistic_model <- drc::drm(n_cum ~ t, data = computer_train, fct = drc::L.3())
# Per addestrare un modello di Gompertz
gompertz_model <- drc::drm(n_cum ~ t, data = computer_train, fct = drc::G.3())
summary(logistic_model)[[3]]
## Estimate Std. Error t-value p-value ## b:(Intercept) -1.846875e-01 4.061218e-03 -45.47589 2.315686e-36 ## d:(Intercept) 1.658202e+05 2.801598e+03 59.18773 7.125744e-41 ## e:(Intercept) 5.407421e+01 2.343227e-01 230.76812 2.018213e-64
summary(gompertz_model)[[3]]
## Estimate Std. Error t-value p-value ## b:(Intercept) -8.081910e-02 1.927316e-03 -41.93349 5.561657e-35 ## d:(Intercept) 2.327841e+05 5.445793e+03 42.74569 2.624551e-35 ## e:(Intercept) 5.450703e+01 3.213437e-01 169.62220 4.438934e-59
Il modello logistico è stato inserito nella variabile logistic_model
, mentre il modello di curva ad S costruito con il modello di Gompertz è stato inserito nella variabile gompertz_model
. La funzione summary()
ci restituisce le informazioni estese di tutto il modello, noi abbiamo preferito mostrare soltanto la tabella dei coefficienti stimati con i relativi valori di p-value. Infatti possiamo osservare che nelle due tabelle di output, abbiamo i tre coefficienti – denominati dal modello come intercept – d valore dell’asintoto superiore della curva ad S, b valore legato alla crescita nel punto di inflessione della curva e infine il parametro e (in precedenza chiamato a) che rappresenta la proezione del punto di inflessione sull’asse x. Per ognuno di questi valori possiamo osservare tre variabili ritenute rilevanti per lo studio del modello:
Estimate
rappresenta il valore stimato dal modello di ogni coefficiente;Std. Error
rappresenta l’errore standard stimato dal modello per ogni coefficiente;p-value
rappresenta il valore del p-value relativo ad ogni coefficientne. Ricordiamo che il p-value indica la probabilità che il coefficiente in esame sia nullo. Una nota convenzione è accettare valori di p-value inferiori a 0.05.
La stima del valore d secondo il modello logistico ci dice che la cumulata massima del numero di brevetti per la tecnologia computer sarà 165,820, mentre per il modello di Gompertz sarà 232,784. Mentre è interessante vedere come per il modello logistico l’anno in cui si verifica l’anno di inflessione della curva tecnologica del computer è il 54-esimo anno di vita della tecnologia, mentre secondo il modello di Gompertz l’anno di inflessione è 55-esimo anno. Ricordiamo, che quando la traiettoria tecnologica ha superato il punto di inflessione il ciclo vita delle tecnologia è nella fase di Maturità. Nel caso della tecnologia computer l’anno di inflessione sarà nel 2008 per il modello logistico (in quanto l’anno di nascita della tecnologia è stato ipotizzato essere il 1954) e 2009 per Gompertz, quindi in entrabi i casi la tecnologia computer si trova nella fase di maturità, secondo questi modelli.
Per terminare questo paragrafo mostriamo come il modello costruito fitta i dati presenti nel training set. Nella seguente figura in span rosso abbiamo inserito il modello di Gompertz e in span blu il modello logistico.
# Mostrare il modello logistico
logistic_train <- logistic_model$predres %>%
as_tibble() %>%
rename(n_cum_predicted
= `Predicted values`) %>%
bind_cols(computer_train %>% select(t))
# Mostrare il modello di Gompertz
gompertz_train <- gompertz_model$predres %>%
as_tibble() %>%
rename(n_cum_predicted
= `Predicted values`) %>%
bind_cols(computer_train %>% select(t))
computer_train %>%
ggplot(aes(x = t, y = n_cum)) +
geom_point() +
geom_line(data = logistic_train, aes(x = t, y = n_cum_predicted), color = "blue") +
geom_line(data = gompertz_train, aes(x = t, y = n_cum_predicted), color = "red") +
xlab("Years of Computer technology") +
ylab("Cumulative number of patents") +
theme_minimal() +
theme(text = element_text(size = 25))
Testare il modello
Come abbiamo accennato prima, il test del modello è una fase importante per comprendere la bontà dei modelli costruiti nel fittare i dati reali che stiamo analizzando. Il primo step per testare i modelli è calcolare la predizione dei valori per ogni anno con i modelli addestrati:
# Preparare il test set per effettuare la previsione
computer_test_t <- computer_test %>%
select(t) %>%
as.matrix()
# Predirre i valori con il modello logistico
logistic_preds <- predict(object = logistic_model,
newdata = computer_test_t) %>%
as_tibble() %>%
rename(logistic_prediction = value)
# Predirre i valori con il modello di Gompertz
gompertz_preds <- predict(object = gompertz_model,
newdata = computer_test_t) %>%
as_tibble() %>%
rename(gompertz_prediction = value)
# Aggiungere le previsioni al test set
computer_test_preds <- computer_test %>%
bind_cols(
logistic_preds,
gompertz_preds
)
computer_test_preds
## # A tibble: 21 x 7 ## tech year n n_cum t logistic_prediction gompertz_prediction ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 computer 1956 0 1 3 13.3 2.91e-23 ## 2 computer 1957 0 1 4 16.0 4.27e-21 ## 3 computer 1959 0 1 6 23.1 2.96e-17 ## 4 computer 1962 0 2 9 40.2 1.53e-12 ## 5 computer 1963 1 3 10 48.3 3.31e-11 ## 6 computer 1967 8 16 14 101. 7.89e- 7 ## 7 computer 1975 50 515 22 442. 2.28e- 1 ## 8 computer 1976 46 561 23 532. 6.68e- 1 ## 9 computer 1980 102 852 27 1110. 2.27e+ 1 ## 10 computer 1985 233 1740 32 2766. 4.89e+ 2 ## # ... with 11 more rows
Il secondo step è il calcolo della differenza tra il valore previsto e il valore osservato (n_cum
):
# Calcolare l'errore per entrambi i modelli
computer_test_preds <- computer_test_preds %>%
mutate(logistic_error = logistic_prediction - n_cum) %>%
mutate(gomperz_error = gompertz_prediction - n_cum)
Il terzo step è valutare l’errore, analizzando o il plot dell’errore come nell’immagine prodotta dal seguente chunk di codice, oppure utilizzare una metrica di errore.
computer_test_preds %>%
select(t, ends_with("error")) %>%
gather(key = model, value = "error", ends_with("error")) %>%
mutate(model = str_remove(model, "_error")) %>%
mutate(model = str_to_title(model)) %>%
ggplot(aes(x = t, y = error, color = model)) +
geom_point() +
geom_line() +
geom_hline(yintercept = 0, linetype = 2) +
theme_minimal() +
xlab("Years of Computer technology") +
ylab("Prediction Errors")
Da questo grafico sembra che il modello di Gompertz abbia un errore più basso rispetto al modello logistico. Per misurare l’errore con una metrica possiamo utilizzare il RMSE – Root Mean Square Error. Di seguito è riportata la formula, ma per maggiori dettagli puoi consultare la pagina RMSE:
Per calcolare l’RMSE su R nel nostro caso utilizziamo le seguenti funzioni:
# Calcolare l'RMSE
computer_error <- computer_test_preds %>%
select(ends_with("error")) %>%
gather(key = model, value = "error", ends_with("error")) %>%
mutate(model = str_remove(model, "_error")) %>%
mutate(model = str_to_title(model)) %>%
group_by(model) %>%
summarise(rmse = sqrt(sum(error^2)/n()))
Selezionare il modello migliore
La selezione del modello può essere effettuata in base a:
- una metrica di errore (come ad esempio RMSE)
- una metrica qualitativa (come ad esempio AdjustedR2).
Nel nostro caso abbiamo utilizzato una metrica di errore, ovvero l’RMSE. E come possiamo vedere dalla seguente tabella, il modello che ci consente di effettuare una stima più vicina ai dati reali è il modello di Gompertz, in quanto l’RMSE legato a questo modello è minore rispetto a quello risultante utilizzando il modello di logistico.
computer_error
## # A tibble: 2 x 2 ## model rmse ## <chr> <dbl> ## 1 Gomperz 822. ## 2 Logistic 1532.
A questo punto possiamo effettuare la predizione del nostro fenomeno (diffusione tecnologia) per il futuro. Ad esempio, supponiamo di voler vedere come si evolverà la tecnologia nei prossimi 50 anni:
# Preparare il dataset con i vari anni da predire
year_data <- seq(0, 117) %>%
as_tibble() %>%
rename(t = value)
# Predirre i valori
preds_data <- predict(object = gompertz_model,
newdata = year_data %>% as.matrix()) %>%
as_tibble() %>%
rename(Estimated = value)
# Unire il dataset con le previsioni e le osservazioni reali
preds_data <- year_data %>%
bind_cols(preds_data) %>%
left_join(computer %>% select(t, n_cum)) %>%
rename(Observed = n_cum)
# Tidy data
preds_data_tidy <- preds_data %>%
gather(key = type, value = value, Estimated, Observed)
preds_data_tidy
## # A tibble: 236 x 3 ## t type value ## <dbl> <chr> <dbl> ## 1 0 Estimated 6.44e-31 ## 2 1 Estimated 3.71e-28 ## 3 2 Estimated 1.31e-25 ## 4 3 Estimated 2.91e-23 ## 5 4 Estimated 4.27e-21 ## 6 5 Estimated 4.25e-19 ## 7 6 Estimated 2.96e-17 ## 8 7 Estimated 1.49e-15 ## 9 8 Estimated 5.49e-14 ## 10 9 Estimated 1.53e-12 ## # ... with 226 more rows
Infine mostraimo il plot:
preds_data_tidy %>%
ggplot(aes(x = t, y = value, color = type)) +
geom_point() +
geom_line() +
theme_minimal() +
xlab("Years of Computer technology") +
ylab("Cumulative number of patents") +
labs(color = NULL)+
scale_color_manual(values = c("lightblue3", "black"))
Nell’immagine possiamo osservare due curve: la curva nera è quella reale osservata mentre la curva blu è la previsione.
Da questo grafico possiamo vedere una possibile evoluzione della tecnologia nel tempo e anche a che punto dell’evoluzione si trova attualmente la tecnologia computer.