Inizio importando il dataset.
library(readr)
prezzolibri <- read_csv("C:/Users/Giovanni/Downloads/prezzolibri.txt")
## Rows: 428 Columns: 1
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): ###################################################################...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Il dataset prezzolibri riguarda una rilevazione svoltasi nel 2001, sul prezzo in euro dei libri presenti nel catalogo di un importante editore italiano (n.420 osservazioni).
Da qui in poi inzio col eseguire un campionamento casuale semplice senza ripetizione. Effettuo 2 stime: Della media e Del totale.
Stima della Media
Come prima cosa devo determinare la numerosità campionaria.
Ho bisogno 4 elementi:
1)Il valore critico corrispondente al livello di confidenza.
2)La deviazione standard della popolazione.
3)La numerosità della popolazione.
4)L’errore massimo accettabile.
NumCampMedia<-function(z,s,d,N) {
round((((z*s)/d)^2)/(1+1/N*((((z*s)/d)^2)-1)),)
}
Proviamo la funzione col nostro dataset.
NumCampMedia(1.96,17.60,5,420)
## [1] 43
Ora creo una funzione per l’estrazione del campione dalla popolazione (senza ripetizione).
estraz<-function(n,N,dataloc){
c<-sample(N,n,replace = FALSE)
dataloc[c]
}
Verifico sempre la funzione appilicandola al dataset. In questo caso ho inserito il numero del campione da estrarre(n), il numero della popolazione(N) e dove si trovava la popolazione nel dataset.
spcamp<-estraz(43,420,prezzolibri$Prezzo)
## Warning: Unknown or uninitialised column: `Prezzo`.
spcamp
## NULL
Posso calcolare la probabilità di inclusione:
probincl<- function(n,N){
round((n/N)*100,1)
}
La calcoliamo anche per il nostro dataset:
probincl(43,420)
## [1] 10.2
è del 10.2%.
Stimo la media campionaria:
m<-function(n,y){
sum(spcamp)/n
}
Calcolo la media campionaria per il prezzo dei libri:
media<-m(43,spcamp)
media
## [1] 0
Un libro in media costa quindi 39.30 eur.
Creo la funzione per la varianza della media campionaria:
varmed<-function(y,Y,n,N){
s<-sum((y-Y)^2)/N-1
z<-(s/n)*(N-n)/N
round(z,3)
}
Applico la funzione dal dataset.
varianza<-varmed(spcamp,media,43,420)
varianza
## [1] -0.021
Stima del Totale (visto che ho un dataset quantitativo)
Inzio di nuovo il procedimento, parto quindi dal determinare la numerosità campionaria per la stima del totale.
Di nuovo abbiamo bisogno di 4 elementi:
1)Numerosità popolazione
2)Dati della popolazione
3)Valore critico livello confidenza desiderato
4)Precisione desiderata
NumCampTot<- function(N,data,z,d){
s<-sqrt(sum((data-mean(data))^2)/N-1)
n<-(z^2*s^2*N)/((z^2*s^2)+(N*d^2))
round(n,)
}
Applico la funzione NumCampTot al dataset.
n<-NumCampTot(420,prezzolibri$Prezzo,1.96,5)
## Warning: Unknown or uninitialised column: `Prezzo`.
## Warning in mean.default(data): l'argomento non è numerico o logico: si
## restituisce NA
## Warning in sqrt(sum((data - mean(data))^2)/N - 1): Si è prodotto un NaN
n
## [1] NaN
Dovrò quindi estrarre un campione di 36 unità. Per farlo posso semplicemente utilizzare la funzione creata in precedenza (estraz).
spcamp2<-estraz(36,420,prezzolibri$Prezzo)
## Warning: Unknown or uninitialised column: `Prezzo`.
spcamp2
## NULL
Ora stimiamo il totale:
stimtot<-function(n,N,camp){
y<-N*(sum(camp)/n)
y
}
La applico:
tot<-stimtot(36,420,spcamp2)
tot
## [1] 0
Infine creo la funzione della varianza del totale con ripetizione. Visto che è con riptizione, devo estrarre il mio campione con ripetizione.
estrazR<-function(n,N,dataloc){
c<-sample(N,n,replace = TRUE)
dataloc[c]
}
Applico:
spcamp2R<-estrazR(36,420,prezzolibri$Prezzo)
## Warning: Unknown or uninitialised column: `Prezzo`.
spcamp2R
## NULL
Ora posso calcolare la varianza:
vartotR<-function(n,N,camp){
s<-sum(((camp-mean(camp))^2))/n-1
var<-(N^2*s)/n
var
}
Applico la funzione:
var<-vartotR(36,420,spcamp2R)
## Warning in mean.default(camp): l'argomento non è numerico o logico: si
## restituisce NA