裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

しんきろう(2)

2021年02月04日 | ブログラミング

もうだめだはこのひとははやくやめるべきやめさせるべきにほんおわったとおもわれるぞぶちぎれるなどもってのほか

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

COCOA って,命名がそもそもアホ

2021年02月04日 | 雑感

キラキラネームだね。みんな,喜んでダウンロード・インストールしてくれると思ったのかな?

そもそも,誰に通知が行ったかまでは個人情報保護の観点から把握しないのは当たり前だろうけど,何件くらい通知がされたかも把握していなかったのだろうか?

把握できていれば,通知が 0 なんて異常事態はすぐわかっただろうし。
どの地域でどれくらいの通知があったというのは感染状況把握の上で重大なデータだと思うのだけど,それすら把握していなかったのか?

というか,それくらいの情報は把握するように,厚労省なりなんなりが指示しなかったのだろうか???

アホの集団だったのだろうか。

指示されなくても,個人情報を保護しながらも,アプリが適切に動いているということも把握しようとしていなかったのか。

IT 企業ともてはやされているが,その頭のレベルがわかってしまった出来事だね。なさけない。

政府や厚労省には詫びなくてもいいけど,全国民にお詫びしなさい。全員,丸坊主にするのが手始めだね。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Julia で回帰分析(単回帰,重回帰)

2021年02月04日 | ブログラミング

参照元

https://multivariatestatsjl.readthedocs.io/en/stable/lreg.html


julia> using MultivariateStats
julia> using Statistics
julia> using Plots
julia> using Random
julia> Random.seed!(123);

例示のためのデータの準備

julia> X = rand(1000, 3);               # feature matrix
julia> a0 = rand(3);                    # ground truths
julia> y = X * a0 + 0.1 * randn(1000);  # generate response

llsq の使用法

julia>
a = llsq(X, y; bias=false);
julia> println(a)
[0.245462794630527, 0.39679768213855493, 0.8727270841084174]

それぞれが何を指すかは,あとの R スクリプトの結果を参照のこと

予測

julia>
yp = X * a;

図を描いてみる

julia> scatter(y, yp, label="")

誤差の評価

julia>
rmse = sqrt(mean(abs2.(y .- yp)));
julia> print("rmse = $rmse")
rmse = 0.1048730072098373

R であれば,

julia> using RCall
julia> R"""
       options(digits=15)
       lm($y ~$X+0)
       """
RObject{VecSxp}

Call:
lm(formula = `#JL`$y ~ `#JL`$X + 0)

Coefficients:
      `#JL`$X1        `#JL`$X2        `#JL`$X3  
0.245462794631  0.396797682139  0.872727084108  

切片ありの場合(デフォルト) biase=true

julia> a = llsq(X, y)
julia> println(a)
[0.24257522344490817, 0.3941270828348356, 0.8700648276936214, 0.0044911156001156615]

R でやると

julia> R"lm($y ~$X)"
RObject{VecSxp}

Call:
lm(formula = `#JL`$y ~ `#JL`$X)

Coefficients:
     (Intercept)          `#JL`$X1          `#JL`$X2          `#JL`$X3  
0.00449111560012  0.24257522344490  0.39412708283483  0.87006482769362  

単回帰の場合にはちょっと面倒

julia> x1 = reshape(X[:, 1], size(X, 1), :);
julia> a = llsq(x1, y);
julia> println(a)
[0.19497651423072845, 0.6432936814951281]

R ならば

julia> R"lm($y ~ $x1)"
RObject{VecSxp}

Call:
lm(formula = `#JL`$y ~ `#JL`$x1)

Coefficients:
   (Intercept)        `#JL`$x1  
0.643293681495  0.194976514231  

 

★★ 代替法として,GLM を使えば,R と同じような感じで分析できるよ。

(こっちがお勧め)

julia> using GLM
julia> using DataFrames
julia> df = DataFrame(X);
julia> insertcols!(df, 4, :y => y);
julia> lm(@formula(y ~ x1 + x2 + x3), df)
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}

y ~ 1 + x1 + x2 + x3

Coefficients:
───────────────────────────────────────────────────────────────────────────
                  Coef.  Std. Error      t  Pr(>|t|)   Lower 95%  Upper 95%
───────────────────────────────────────────────────────────────────────────
(Intercept)  0.00449112   0.0107952   0.42    0.6775  -0.0166928   0.025675
x1           0.242575     0.0118303  20.50    
x2           0.394127     0.01155    34.12    
x3           0.870065     0.0116234  74.85    
───────────────────────────────────────────────────────────────────────────

julia> lm(@formula(y ~ x1 + x2 + x3 + 0), df)
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}

y ~ 0 + x1 + x2 + x3

Coefficients:
───────────────────────────────────────────────────────────────
       Coef.  Std. Error      t  Pr(>|t|)  Lower 95%  Upper 95%
───────────────────────────────────────────────────────────────
x1  0.245463  0.0095763   25.63    
x2  0.396798  0.00959782  41.34    
x3  0.872727  0.00969927  89.98    
───────────────────────────────────────────────────────────────

julia> lm(@formula(y ~ x1), df)
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}

y ~ 1 + x1

Coefficients:
────────────────────────────────────────────────────────────────────────
                Coef.  Std. Error      t  Pr(>|t|)  Lower 95%  Upper 95%
────────────────────────────────────────────────────────────────────────
(Intercept)  0.643294   0.0188953  34.05    
x1           0.194977   0.0327767   5.95    
────────────────────────────────────────────────────────────────────────

まあ,そんなところ。

決定係数を出したりはまた後で。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Julia でのデータフレームの読み書き(とどめ!)

2021年02月04日 | ブログラミング

https://dataframes.juliadata.org/stable/man/getting_started/ 
の一番最後で以下が推奨されているので,それ以外の方法については書かない方がよい。

去年の夏の時点での記事や v. 1.5.2 ですら 今や deprecated なので,不適切な情報は広めないで欲しい。

using CSV
DataFrame(CSV.File(input))
CSV.write(output, df)

ただし,オプションを設定するためには,以下を使うべし。

CSV.read(input, DataFrame; kwargs)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Julia でヒートマップ

2021年02月04日 | ブログラミング

某所で,Julia ではヒートマップを簡単に描くことができないとこぼしている人がいた。その人は行と列の並べ替えすらしないで,もっと簡単に描けないのかと言っている。
ヒートマップって,データのビジュアライゼーションという点ではそんなに優れているものとも思わないが,せめて適切に行と列を並べないと何の意味もないグラフができてしまうだけだ。

julia> using PyPlot, Plots, DataFrames, CSV
julia> pyplot()
julia> using Random
julia> Random.seed!(123)
julia> df = DataFrame(Location = ["NY", "SF", "NY", "NY", "SF", "SF", "TX", "TX", "TX", "DC", "DC", "DC"],
                      Class = ["M","M","H","L","L","H", "H","L","M","M","H","L"],
                      Score = rand(12))
12×3 DataFrame
 Row │ Location  Class   Score     
     │ String    String  Float64   
─────┼─────────────────────────────
   1 │ NY        M       0.768448
   2 │ SF        M       0.940515
   3 │ NY        H       0.673959
   4 │ NY        L       0.395453
   5 │ SF        L       0.313244
   6 │ SF        H       0.662555
   7 │ TX        H       0.586022
   8 │ TX        L       0.0521332
   9 │ TX        M       0.26864
  10 │ DC        M       0.108871
  11 │ DC        H       0.163666
  12 │ DC        L       0.473017

julia> CSV.write("data.csv", df)

縦軸にLocation, 横軸にClassを持つピボットテーブルに変形する

julia> pivot = DataFrames.unstack(data, :Location, :Class, :Score)
4×4 DataFrame
 Row │ Location  M         H         L         
     │ String    Float64?  Float64?  Float64?  
─────┼─────────────────────────────────────────
   1 │ NY        0.768448  0.673959  0.395453
   2 │ SF        0.940515  0.662555  0.313244
   3 │ TX        0.26864   0.586022  0.0521332
   4 │ DC        0.108871  0.163666  0.473017

ここまでだと,行も列も乱雑に並んでいるだけなので,適切に並べ替える。データフレームの操作は色々方法があるが,Query を使う例を挙げておく。

julia> using Query
julia> pivot2 = pivot |>
         @select(1, 4, 2, 3) |>
         @orderby(_.Location) |> DataFrame
4×4 DataFrame
 Row │ Location  L          M         H        
     │ String    Float64?   Float64?  Float64? 
─────┼─────────────────────────────────────────
   1 │ DC        0.473017   0.108871  0.163666
   2 │ NY        0.395453   0.768448  0.673959
   3 │ SF        0.313244   0.940515  0.662555
   4 │ TX        0.0521332  0.26864   0.586022

julia> x = names(pivot2)[2:end]
3-element Array{String,1}:
 "L"
 "M"
 "H"

julia> y = pivot2.Location
4-element Array{String,1}:
 "DC"
 "NY"
 "SF"
 "TX"

julia> heatmap(x, y, Matrix(pivot2[:, 2:4]))

freqtable を使うやり方では行と列は辞書順になるが,任意の行と列の並べ替えはたいへんなので,そのまま描画。

julia>
using DataFrames, FreqTables, NamedArrays
julia> using Plots
julia> pivot3 = freqtable(data, :Class, :Location, weights=-df.Score)
3×4 Named Array{Float64,2}
Class ╲ Location │        DC         NY         SF         TX
─────────────────┼───────────────────────────────────────────
H                │  0.163666   0.673959   0.662555   0.586022
L                │  0.473017   0.395453   0.313244  0.0521332
M                │  0.108871   0.768448   0.940515    0.26864

julia> heatmap(pivot3)

行と列の並べ替えを簡単にできるように,意味のある並べ替えが自動的にできるように,色使いも選べるように,ブロック中に数値を描けるようにとか,要望は多々ある。

ないものは,作る,しか,ないの,かな?

いやいや,R がもうあるんだから,それでいいだろう。R の heatmap を使うべし。

julia> rownames, colnames = names(pivot3)
julia> using RCall
julia> R"""
       mat = $pivot3
       colnames(mat) = $colnames
       rownames(mat) = $rownames
       heatmap(mat)
       """

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

COCOA 不具合

2021年02月04日 | ブログラミング

新型コロナウイルスの接触確認アプリ「COCOA」に不具合が見つかり、アンドロイド版で去年の秋以降、感染者と接触した可能性のあるアプリの利用者に通知が届いていないことがわかりました。

なんか,うさんくさかったねえ。

インストールしなくて,本当によかった。くそアプリというか,詐欺アプリじゃないか。金を取られなかっただけまだマシか(^_^;)

いかに,このアプリが信頼されていなかったかということにつきる。

信頼していないというか,気にも掛けていないから,インストールしようとも思わない。

別に気に掛けてもいないから,インストールしたとしても,アプリの動作結果がどうであるかしらない。

アプリの動作が変であったとしても,気づかないし,きづいても通知すらしない。

そもそも,アプリがちゃんと働いているかなんて,わかりようがない。

う??,そんなあぷり,あったの?

あったの知ってるけど,インストールしようなんて思わなかった。

インストールなんかしなくてよかったわあ。

これからも,おんなじようなアプリがあっても,インストールなんか絶対しないからな!!!ばかやろう。

もう,だめだわこりゃ。終わったな,日本政府。

 

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村