Statystyki opisowe dla szeregów rozdzielczych przedziałowych

Procesy stochastyczne. Sposoby racjonalizowania wielkich ilości informacji. Matematyka w naukach społecznych.
chrumek
Użytkownik
Użytkownik
Posty: 47
Rejestracja: 1 lut 2013, o 22:36
Płeć: Mężczyzna
Podziękował: 12 razy

Statystyki opisowe dla szeregów rozdzielczych przedziałowych

Post autor: chrumek »

Czy istnieją jakieś programy lub biblioteki (np do R) które pomogą mi w obliczaniu statystyk opisowych dla szeregów przedziałowych rozdzielczych.

Najbardziej potrzebuję mediany, mody i dobrych przybliżeń podstawowych kwantyli.

Jeżeli to zły dział to przepraszam.
szw1710

Statystyki opisowe dla szeregów rozdzielczych przedziałowych

Post autor: szw1710 »

Kiedyś napisałem sobie taki skrypt. Może pomoże. Na pewno są też dostępne pakiety, ale nie szukałem. Możesz dowolnie modyfikować kod.

Kod: Zaznacz cały

#-------------------------------------------------------------
# Kwantyle
#-------------------------------------------------------------

kwantyl=function(p,dane)
{
  n=sum(dane[,2]) # liczebność próby
  k=1             # początkowy numer klasy kwantyla
  sk=0            # początkowa poprzednia liczebność skumulowana
  
  # Ustalenie numeru klasy kwantyla
  while(sk+dane[k,2]<n*p)
  {
    sk=sk+dane[k,2]
    k=k+1
  }
  # Wyliczenie kwantyla
  return(dane[k,1]+(n*p-sk)*(dane[2,1]-dane[1,1])/dane[k,2])
}

Q1=function(dane)
  return(kwantyl(0.25,dane))

Me=function(dane)
  return(kwantyl(0.5,dane))

Q3=function(dane)
  return(kwantyl(0.75,dane))

# Szereg punktowy i konstrukcja szeregu rozdzielczego
wzrost=c(169,153,148,154,170,157,175,159,160,165,156,160,151,174,169,186,
         170,159,161,173,163,164,159,158,169,155,159,148,163,161,171,171,
         167,180,183,162,163,177,166,159,172,162,172,161,145,162,168,155,
         145,154,153,167,166,153,179,162,163,162,166,168,165,163,161,177,
         170,149,160,164,148,154,161,172,163,149,159,155,171,156,170,154)
print(max(wzrost)-min(wzrost))
print(table(cut(wzrost,seq(from=140,to=185,by=5))))

# Dane do sezregu rozdzielczego 1
srodki1=2.5+seq(from=140,to=180,by=5)
n1=c(2,5,11,13,20,14,9,4,1)
wzrost1=rep(srodki1,n1)
mean(wzrost1)
median(wzrost1)
d1=which.max(n1) # numer klasy dominanty
do1=srodki1[d1]-2.5+5*(n1[d1]-n1[d1-1])/(2*n1[d1]-n1[d1-1]-n1[d1+1])
do1


# Dane do szeregu rozdzielczego 2
srodki2=5+seq(from=140,to=180,by=10)
n2=c(7,24,34,13,1)
wzrost2=rep(srodki2,n2)
mean(wzrost2)
median(wzrost2)
d2=which.max(n2) # numer klasy dominanty
do2=srodki2[d2]-5+10*(n2[d2]-n2[d2-1])/(2*n2[d2]-n2[d2-1]-n2[d2+1])
do2

# Szereg rozdzielczy 1 do obliczenia kwantyli
wzrost_kw1=array(c(srodki1-2.5,n1),c(9,2))

# Szereg rozdzielczy 2 do obliczenia kwantyli
wzrost_kw2=array(c(srodki2-5,n2),c(5,2))

# Szereg rozdzielczy do obliczenia pozostałych miar
wzrost_r=rep(srodki,n)
mean(wzrost)

# Kwantyle w szeregu 1
for(i in c(0.25,0.5,0.75)) print(kwantyl(i,wzrost_kw1))
for(i in 1:9/10) print(kwantyl(i,wzrost_kw1))
# Kwantyle w szeregu 2
for(i in c(0.25,0.5,0.75)) print(kwantyl(i,wzrost_kw2))
for(i in 1:9/10) print(kwantyl(i,wzrost_kw2))
# Kwantyle w szeregu punktowym
print(quantile(wzrost,c(0.25,0.5,0.75)))
print(quantile(wzrost,1:9/10))

# Miary
m=c(mean(wzrost1),mean(wzrost2),mean(wzrost))
s=c(sd(wzrost1),sd(wzrost2),sd(wzrost))
m
# Odchylenia standardowe
data.frame(row.names="Odchylenia standardowe",Szereg_1=sd(wzrost1),Szereg_2=sd(wzrost2),Szczegółowy=sd(wzrost))

# Przedziały typowych wartości cechy
data.frame(row.names=c("Szereg 1","Szereg 2","Szereg szczegółowy"),Początek=m-s,Koniec=m+s)

# Zmienność i asymetria
do=c(do1,do2,NA)
M3=c(mean((wzrost1-mean(wzrost1))^3),mean((wzrost2-mean(wzrost2))^3),mean((wzrost-mean(wzrost))^3))
data.frame(row.names=c("Szereg 1","Szereg 2","Szereg szczegółowy"),Współczynnik_zmienności=s/m,Współczynnik_skośności=(m-do)/s,Współczynnik_asymetrii=M3/s^3)

# Szereg kwartylowy
quantile(wzrost,c(0.25,0.5,0.75),type=1)
table(cut(wzrost,c(0,156,162,169,200)))
quantile(wzrost,1:10/10,type=1)
table(cut(wzrost,c(0,151,155,159,161,162,164,167,170,173,186)))
ODPOWIEDZ