Skip to main content

Tips & Tricks

Julia

Začít s

using Statistics, Distributions, Random, LinearAlgebra, Clustering, StatsBase, Plots, StatsPlots, HypothesisTests

dist(X; itr = eachrow) = [norm(vec1 - vec2) for vec1 in itr(X), vec2 in itr(X)]

function confint_var(s, n; level=0.95, tail=:both)
	α = 1 - level
	if tail == :both
		return ( (n-1)*s^2 / quantile(Chisq(n-1), 1 - α/2), (n-1)*s^2 / quantile(Chisq(n-1), α/2) )
	elseif tail == :left
		return ( -Inf, (n-1)*s^2 / quantile(Chisq(n-1), α) )
	elseif tail == :right
		return ( (n-1)*s^2 / quantile(Chisq(n-1), 1 - α), Inf )
	end
end
confint_std(s, n; kwargs...) = sqrt.sign.(confint_var(s,n; kwargs...)) .* sqrt.(abs.( confint_var(s,n; kwargs...) ))

Potřebné balíčky:

] add Distributions, Clustering, StatsBase, Plots, StatsPlots, HypothesisTests

Statistika

  • vektor prúměrů mean(X; dims = 1)
  • kovarianční matice cov(X)
  • výběrová korelační matice cor(X)
  • vlastní čísla a vlastní vektory výběrové kovarianční matice
    vals, vecs = eigen(X)
    • procenta variability cumsum(vals) / sum(vals) * 100
    • hodí se na PCA
  • matice vzdáleností dist(X) přičemž potřebujeme první definovat
    dist(X; itr = eachrow) = [norm(vec1 - vec2) for vec1 in itr(X), vec2 in itr(X)]
  • shlukování hcl = hclust(dist(X); linkage = :single) (více zde)
    • dobré potom ještě použít cuttree(hcl; k = <chtěný počet clusterů>)
  • výběrová distribuční funkce (vektorová data X - pouze jednorozměrná)
    plot((minimum(X) - 5):0.01:(maximum(X) + 5), y -> ecdf(X)(y))

Pravděpodobnost

  • kvantil na hladině $\alpha$ quantile(<distribution>, α) např.
    quantile(Normal(0,1), 0.95)
  • hodnota distribuční funkce v bodě cdf(<distribution>, <where>) např.
    cdf(Normal(0,1), 1.6)

Testování hypotéz

  • test střední hodnoty normální rozdělní - z-test OneSampleZTest(<výběrový průměr>, <směrodatná odchylka onoho normálního rozdělení>, <počet pozorování>, <testovaná hodnota>) např.
    OneSampleZTest(mean(X), 0.15, 9, 10) pro příklad 4/2
    • v případě, že testujeme střední hodnotu normálního rozdělení se směrodatnou odchylkou určenou z dat, můžeme použít OneSampleZTest(X, <testovaná střední hodnota>) např. OneSampleZTest(X, 10)
    • p-hodnotu můžeme získat také pomocí pvalue(<test>) např. pvalue(OneSampleZTest(mean(X), 0.15, 9, 10)), přičemž ještě můžeme specifikovat "jednostrannost" tohoto testu
      pvalue(OneSampleZTest(mean(X), 0.15, 9, 10); tail=:left)
    • obdobně pro interval spolehlivosti pomocí confint
  • testy jsou dostupné zde
  • nepodařilo se mi najít test o rozptylu
    • konfidenční interval testu o rozptylu: confint_var(<směrodatná odchylka>, <počet pozorování>; level=<hladina významnosti>, tail=:both)
    function confint_var(s, n; level=0.95, tail=:both)
      α = 1 - level
      if tail == :both
          return ( (n-1)*s^2 / quantile(Chisq(n-1), 1 - α/2), (n-1)*s^2 / quantile(Chisq(n-1), α/2) )
      elseif tail == :left
          return ( -Inf, (n-1)*s^2 / quantile(Chisq(n-1), α) )
      elseif tail == :right
          return ( (n-1)*s^2 / quantile(Chisq(n-1), 1 - α), Inf )
      end
    end
    
    • obdobně lze použít i confint_std na IS pro směrodatnou odchylku
  • párový t-test: OneSampleTTest([1.8, 1.0, 2.2, 0.9, 1.5, 1.6], [1.5, 1.1, 2.0, 1.1, 1.4, 1.4])
  • asymptotické testy alternativního rozdělení můžeme řešit pomocí z-testu se směrodatnou odchylkou $\sqrt{m(1-m)}$, např. OneSampleZTest(0.05, sqrt(0.05*(1-0.05)), 500, 0)
  • asymptotický test o shodě paremtrů 2 alterantivních rozdělení můžeme opět provést pomocí z-testu, kde $m^* =$ m a tedy OneSampleZTest((16-12)/150, sqrt(m*(1-m)*(1/150 + 1/150)), 1)
  • ANOVA test podle skupin: OneWayANOVATest([12, 10, 9, 10, 11, 9], [10, 12, 11, 12, 14, 13], [19, 18, 16, 16, 17, 15])