www.crosshyou.info

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

商業統計調査データの分析3 - R言語で一人当り売上高と売場面積当り売上高を調べる

 

www.crosshyou.info

 の続きです。

今回は、一人当りの売上高と売場面積当りの売上高を調べてみようと思います。

まずは、基本のデータをhead関数で確認しましょう。

f:id:cross_hyou:20190406101309j:plain

このようなデータでした。Staffが従業者数で、Revenueが売上高、Spaceが売場面積です。

Revenue / Staffで一人当りの売上高、Revenue / Spaceで1平方メートル当りの売上高が計算できます。

まずは一人当りの売上高を計算します。

f:id:cross_hyou:20190406102217j:plain

最小値が4.602なので約460万円です。最大値は60.961なので約6100万円です。一人当りの売上高が6100万円ってすごいですね。平均値は約1600万円です。

1平方キロメートル当りの売上高を計算します。

f:id:cross_hyou:20190406102736j:plain

最小値は0.1894ですから約19万円、最大値は16.1302ですから約1600万円、平均値は約100万円です。

こんどは、それぞれの分布状況を見てみます。hist関数でヒストグラムを作ります。

f:id:cross_hyou:20190406103120j:plain

f:id:cross_hyou:20190406103140j:plain

右に裾野が広がっている分布ですね。

売場面積当りの売上高はどうでしょうか?

f:id:cross_hyou:20190406103401j:plain

f:id:cross_hyou:20190406103420j:plain

これはさらに右に裾野が広がっている分布ですね。。

今度は、一人当り売上高と売場面積当り売上高の散布図をplot関数で描いてみます。

f:id:cross_hyou:20190406103816j:plain

f:id:cross_hyou:20190406103831j:plain

売場面積当り売上高が10以上のプロットがあるので、わかりにくいですが、正の相関関係があるように見えます。cor.test関数で相関係数とその相関が有意か(0でないか)を確認しましょう。

f:id:cross_hyou:20190406104239j:plain

p-valueは2.2e-16より小さいので相関有りですね。相関係数は0.433です。

 

それぞれの変数の大きな業種、小さな業種を見てみましょう。

まずは一人当り売上高の小さな業種です。

f:id:cross_hyou:20190406104825j:plain

tapply関数でSectorごとの平均値を出して、sort関数で小さい順に並び替え、head関数ではじめの6業種を表示しました。履物小売業(靴を除く)が一番小さく、7年間の平均で一人当り売上高が540万円ぐらいです。パン小売業(製造小売)、菓子小売業(製造小売)、自転車小売業、菓子・パン小売業、料理品小売業と続きます。

それでは一人当り売上高の大きな業種はどこでしょうか?

f:id:cross_hyou:20190406105451j:plain

rev関数を使って大きい順に並び替えています。合計が一番ですね。合計には、おおもとのデータから削除した百貨店とか個人事業所が無い業種も含まれていますからね。

各種商品小売業が3700万円、肥料・飼料小売業、燃料小売業、機械器具小売業、電気機械小売業(中古品を除く)と続きます。

売場面積当り売上高の小さい業種は何でしょうか?

f:id:cross_hyou:20190406110140j:plain

自転車小売業が一番小さいです。1平方メートル当りの売上高は24万円ぐらいです。中古品小売業(骨とう品を除く)、履物小売業(靴を除く)、家具小売業、家具・建具・畳小売業、陶磁器・ガラス器小売業と続きます。

売場面積当りの売上高の大きい業種は何でしょうか?

f:id:cross_hyou:20190406110743j:plain

燃料小売業が一番大きく、1平方メートル当り1300万円です。合計、機械器具小売業、燃料小売業(ガソリンスタンドを除く)、その他の機械器具小売業、肥料・飼料小売業と続きます。

整理すると、一人当り売上高の一番小さな業種は、履物小売業(靴を除く)です。

一番大きな業種は、合計です。

売場面積当りの売上高の一番小さな業種は自転車小売業です。

一番大きな業種は燃料小売業です。

この4つの業種を削除して、一人当り売上高と売場面積当り売上高の散布図を作ってみましょう。

f:id:cross_hyou:20190406112129j:plain

まず、上のようにして4つの業種を削除しました。

これで散布図を描いてみます。

f:id:cross_hyou:20190406112423j:plain

f:id:cross_hyou:20190406112435j:plain

はじめの散布図よりも散らばっていますね。相関係数を見てみましょう。

f:id:cross_hyou:20190406112628j:plain

p-valueは2.2e-16ですから有意です。相関係数は0.366なので正の相関です。

cおplot関数で年ごとの散布図を描いてみます。

f:id:cross_hyou:20190406113149j:plain

f:id:cross_hyou:20190406113214j:plain

年ごとの分布の傾向の変化は無い感じですね。

今回は以上です。

 次回は

 

www.crosshyou.info

 

です。

 

今回のR言語のコードです。

# head関数
head(df)

# 一人当りの売上高
df3 <- df
df3$Stf_Rev <- df3$Revenue / df3$Staff
summary(df3$Stf_Rev)

# 1平方キロメートル当りの売上高
df3$Spc_Rev <- df3$Revenue / df3$Space
summary(df3$Spc_Rev)

# 一人当りの売上高のヒストグラム
hist(df3$Stf_Rev)

# 売り場面積当りの売上高
hist(df3$Spc_Rev)

# 一人当り売上高と売場面積当り売上高の散布図
plot(df3$Stf_Rev, df3$Spc_Rev)

# 相関の有無の検定
cor.test(df3$Stf_Rev, df3$Spc_Rev)

# 一人当り売上高の小さな業種
head(sort(tapply(df3$Stf_Rev, df3$Sector, mean)))


# 一人当り売上高の大きな業種
head(rev(sort(tapply(df3$Stf_Rev, df3$Sector, mean))))

# 売場面積当り売上高の小さい業種
head(sort(tapply(df3$Spc_Rev, df3$Sector, mean)))

# 売り場面積当り売上高の大きい業種
head(rev(sort(tapply(df3$Spc_Rev, df3$Sector, mean))))

# 4つの業種を削除
df3n <- df3[df3$Sector != "履物小売業(靴を除く)", ]
df3n <- df3n[df3n$Sector != "合計", ]
df3n <- df3n[df3n$Sector != "自転車小売業", ]
df3n <- df3n[df3n$Sector != "燃料小売業", ]

# 一人当り売上高と売場面積当り売上高の散布図
plot(df3n$Stf_Rev, df3n$Spc_Rev)

# 相関の有無
cor.test(df3n$Stf_Rev, df3n$Spc_Rev)

# coplot関数
coplot(df3n$Spc_Rev ~ df3n$Stf_Rev | df3n$Year, pch = 16, panel = panel.smooth)

 

 

商業統計調査データの分析2 - R言語で1988年と2012年を比較して、伸びている業種、縮小している業種を調べる。

 

www.crosshyou.info

 の続きです。

今回は1988年と2012年のデータを比較して、どの業態が伸びているのか縮小しているのかを調べてみたいと思います。

まずは、全体のデータから1988年だけのデータを抜き出します。

f:id:cross_hyou:20190403161334j:plain

次に、Yearの列を削除します。

f:id:cross_hyou:20190403161401j:plain

そして、Corp_Total以下の変数に1988を付け足して、1988年のデータだとわかるようにします。

f:id:cross_hyou:20190403161448j:plain

できました。

同じように2012年だけのデータフレームを作成します。

f:id:cross_hyou:20190403161902j:plain

こうして作成したdf1988とdf2012をmerge関数を使って合体させます。

f:id:cross_hyou:20190403162511j:plain

merge関数は二つのデータフレームの共通列でマッチングして連結します。

それでは、1988年を基準にして、2012年がどのくらい伸びているか、縮小しているかを見てみましょう。まずは、Corp_Total1988とCorp_Total2012を比較します。

f:id:cross_hyou:20190403163254j:plain

写真機・写真材料小売業は0.05です。1988年の事業所数を100とすると、2012年には5しかない、ということです。絶滅危惧業種ですね。パン小売業(製造小売りでないもの)、医薬品小売業(調剤薬局を除く)などが続きます。伸びの高い順に表示しましょう。

f:id:cross_hyou:20190403163830j:plain

中古品小売業(骨とう品を除く)が1.39で一番の伸びです。リサイクルショップですね。2番目が医薬品・化粧品小売業ですが、数値は0.963と1.0以下です。つまり事業所の数は1988年から比較して減っているということですよね。

続いて、Corp_Corpの伸び率を同じように調べてみましょう。

f:id:cross_hyou:20190403164841j:plain

Corp_Corpは法人の事業所数です。写真機・写真材料小売業が一番減少しています。増加しているのは中古品小売業(骨とう品を除く)で4.87ですからほぼ5倍ですね。医薬品・化粧品小売業、花・植木小売業と続きます。増加している業種は1.0以上ですね。

次は個人の事業所数、Corp_Indiです。

f:id:cross_hyou:20190403165419j:plain

個人の事業所数は、一番伸びている(実際は伸びていないですが)中古品小売業(骨とう品を除く)でも0.785ですので、個人の商業事業所は軒並み減少していることがわかりました。

次はStaff, 従業者数はどうでしょうか?

f:id:cross_hyou:20190403165939j:plain

写真機・写真材料小売業は従業者数ももの凄く減っていますね。1988年100とすると、2012年は8です。92%減少です。荒物小売業、寝具小売業もかなり減少しています。中古品小売業(骨とう品を除く)が一番増加しています。その他の飲食料品小売業ってなんでしょうね。スポーツ用品小売業も従業者数は増えているんですね。

次はRevenue、売上高です。

f:id:cross_hyou:20190403170752j:plain

減少している業種に米穀類小売業が入っています。お米屋さんですかね?増加している業種に燃料小売業(ガソリンスタンドを除く)というのが入っています。ガソリンスタンド以外の燃料小売業ってなんなんでしょうね?

Inventoryはどうでしょうか?

f:id:cross_hyou:20190403171354j:plain

縮小している業種に、呉服・服地小売業というのは登場しました。伸びている業種にかばん・袋物小売業や機械器具小売業(自動車, 自転車を除く)というのが入っています。

そして売り場面積、Spaceはどうでしょうか?

f:id:cross_hyou:20190403171853j:plain

売場面積の減少している業種はいままでと大きな違いはないですね。売り場面積の増加は中古品小売業(骨とう品を除く)が圧倒的ですね。1988年と比べると、2012年には7倍になっています。

最後に、合計の伸び率を見てみましょう。

f:id:cross_hyou:20190403172608j:plain

日本全体でみると、事業所数は減っています。法人の事業所数は増加していますが、個人の事業所数が4割になっています。従業者数はほぼ変わらず、売上高は15%ぐらい減少、手持ち商品額は3割ぐらい減少しています。売り場面積は3割増加しています。

日本全体でみると、売り場面積は増えているのに事業所数は減っていますから、一つ一つの事業所の売り場面積が大型化しているといいうことですね。巨大なショッピングモールがどんどんできましたからね。

今回は以上です。

次回は

 

www.crosshyou.info

 

 です。

今回のR言語のコードです。

# 1988年のデータフレーム
df1988 <- df[df$Year == 1988, ]
summary(df1988)

# 変数のYearを削除
df1988 <- df1988[ , -2]
str(df1988)

# Corp_Total 以下の変数に1988を追加して名前をつける
colnames(df1988) <- c("Sector", "Corp_Total1988", "Corp_Corp1988", "Corp_Indi1988",
"Staff1988", "Revenue1988", "Inventory1988", "Space1988")
str(df1988)

# 2012年だけのデータフレーム
df2012 <- df[df$Year == 2012, -2]
colnames(df2012) <- c("Sector", "Corp_Total2012", "Corp_Corp2012", "Corp_Indi2012",
"Staff2012", "Revenue2012", "Inventory2012", "Space2012")
str(df2012)

# df1988とdf2012を合体
df2 <- merge(df1988, df2012)
head(df2)

# Corp_Totalの比較
df2$Corp_Total_Gr <- df2$Corp_Total2012 / df2$Corp_Total1988
head(df2[order(df2$Corp_Total_Gr), c("Sector", "Corp_Total_Gr")])

# Corp_Total_Grの大きい業種
head(df2[rev(order(df2$Corp_Total_Gr)), c("Sector", "Corp_Total_Gr")])

# Corp_Corpの比較
df2$Corp_Corp_Gr <- df2$Corp_Corp2012 / df2$Corp_Corp1988
head(df2[order(df2$Corp_Corp_Gr), c("Sector", "Corp_Corp_Gr")])

head(df2[rev(order(df2$Corp_Corp_Gr)), c("Sector", "Corp_Corp_Gr")])

# Corp_Indiの比較
df2$Corp_Indi_Gr <- df2$Corp_Indi2012 / df2$Corp_Indi1988
head(df2[order(df2$Corp_Indi_Gr), c("Sector", "Corp_Indi_Gr")])

head(df2[rev(order(df2$Corp_Indi_Gr)), c("Sector", "Corp_Indi_Gr")])

# Staffの比較
df2$Staff_Gr <- df2$Staff2012 / df2$Staff1988
head(df2[order(df2$Staff_Gr), c("Sector", "Staff_Gr")])

head(df2[rev(order(df2$Staff_Gr)), c("Sector", "Staff_Gr")])

# Revenueの比較
df2$Revenue_Gr <- df2$Revenue2012 / df2$Revenue1988
head(df2[order(df2$Revenue_Gr), c("Sector", "Revenue_Gr")])

head(df2[rev(order(df2$Revenue_Gr)), c("Sector", "Revenue_Gr")])

# Inventoryの比較
df2$Inventory_Gr <- df2$Inventory2012 / df2$Inventory1988
head(df2[order(df2$Inventory_Gr), c("Sector", "Inventory_Gr")])

head(df2[rev(order(df2$Inventory_Gr)), c("Sector", "Inventory_Gr")])

# Spaceの比較
df2$Space_Gr <- df2$Space2012 / df2$Space1988
head(df2[order(df2$Space_Gr), c("Sector", "Space_Gr")])

head(df2[rev(order(df2$Space_Gr)), c("Sector", "Space_Gr")])

# 合計の伸び率
df2[df2$Sector == "合計", c("Corp_Total_Gr", "Corp_Corp_Gr", "Corp_Indi_Gr",
"Staff_Gr", "Revenue_Gr", "Inventory_Gr", "Space_Gr")]

商業統計調査データの分析1 - R言語で規模の小さい業種はどこか調べる。

今回は、商業統計調査のデータを分析したいと思います。

f:id:cross_hyou:20190330134533j:plain

商業統計は、卸売業、小売業を営む民営の事業所を対象とする統計調査で、概ね5年ごと(経済センサス-活動調査の2年後)に実施されます。商業統計調査では、産業別、従業者規模別、地域(都道府県や市区町村)別に事業所数、従業者数、年間販売額、売場面積等と公表しています。調査の結果は、国や地方公共団体により中心市街の活性化などの商業に関する施策の基礎資料や地方消費税の精算に関する基礎資料として利用されるだけでなく、民間企業による出店計画等にも広く利用されています。とのことです。

f:id:cross_hyou:20190330135120j:plain

この商業統計調査の上の画像のデータを分析しようと思います。

f:id:cross_hyou:20190330135206j:plain

データはこういうものでした。これを加工して、

f:id:cross_hyou:20190330135242j:plain

このようなCSVファイルにしました。データは昭和63年(1988年)から平成26年(2012年)までの7回分の調査結果が含まれていましたので、7回すべてでデータがあり、事業所数(合計、法人、個人)、従業者数、販売額、商品手持額、売場面積のすべてのデータがそろっているものだけに絞り込んでいます。また、平成3年は再集計のデータだけにしました。

このCSVファイルをread.csv関数でR言語に読込んで各種分析をしていきます。

f:id:cross_hyou:20190330140046j:plain

539の観測(Obs.)と9つの変数(Variables)があります。Sectorのみファクタで、あとは数値データです。

まずは、summary関数で全体の平均値や中央値などを確認しましょう。

f:id:cross_hyou:20190330140531j:plain

Sectorはそれぞれの業種です。どの業種も7回出現しています。Yearは調査年です。1988年から始まって2012年までです。Corp_Totalは事業所数の合計で、一番少ないのは785、一番大きいのは、合計数値だと思いますが、206万7206です。Corp_Corpは事業所のうち法人です。一番少ないのは157、一番多いのは92万6256です。Corp_Indiは事業所のうち個人でやってる事業所です。一番少ないのは299、一番多いのは123万4569です。Staffは従業者数です。一番少ないのは1666人、一番多いのは1197万4766人です。Revenueは年間販売額で単位は百万円です。一番少ないのは81億3000万円、一番多いのは713兆8028億0100万円です。Inventoryは手持商品額です。一番少ないのは、5億9600万円で、一番多いのは38兆7655億9700万円です。Spaceは売場面積で単位は平方メートルです。一番小さいのは3万8939平方メートル、一番大きいのは1億4966万4906平方メートルです。

値が大きいのは合計の数字だと思いますので、値の小さい業種は何か見てみましょう。order関数で並び替えできます。

まずは、Corp_Totalの小さいところを見てみましょう。

f:id:cross_hyou:20190330142121j:plain

写真機・写真材料小売業の2012年が一番少なく、795事業所です。他に分類されないじゅう器小売、履物小売業(靴を除く)、卵・鳥肉小売業と続きます。写真機・写真材料ってカメラ屋さんかな?

Corp_Corpの小さいところはどこでしょうか?

f:id:cross_hyou:20190330142514j:plain

履物小売業(靴を除く)が一番少ないです。卵・鳥肉小売業、骨とう品小売業、他に分類されないじゅう器小売業と続きます。靴を除く履物小売業って足袋とか草履でしょうかね?

Corp_Indiの小さいところはどこでしょうか?

f:id:cross_hyou:20190330142935j:plain

写真機・写真材料小売業が一番少ないです。各種商品小売業、その他の各種商品小売業(従業員が50人未満のもの)、他に分類されないじゅう器小売業、履物小売業(靴を除く)と続きます。

Staffの少ない業種はどこでしょうか?

f:id:cross_hyou:20190330143416j:plain

履物小売業(靴を除く)が一番少ないですね。2012年は全国で1666人しかいません。他に分類されないじゅう器小売業、写真・写真材料小売業、骨とう品小売業と続きます。上の図をよく見ると、2002年の履物小売業(靴を除く)の従業者数は3699人だったのは10年後の2012年には1666人と2000人近く減少しています。

Revenueの小さい業種はどこでしょうか?

f:id:cross_hyou:20190330144221j:plain

履物小売業(靴を除く)が独占状態ですね。パン小売業(製造小売りでないもの)がランクインしました。1994年の履物小売業(靴を除く)の年間販売額は304億2100万円だったのが2012年には81憶3000万円と4分の1近くまで落ち込んでいます。

Inventoryの小さい業種はどこでしょうか?

f:id:cross_hyou:20190330144638j:plain

卵・鳥肉小売業が上位6のうち5を占めています。パン小売業(製造小売りでないもの)がひとつだけあります。どちらも食品ですから在庫は多くはないですよね。

最後の変数、Spaceの小さい業種はどこでしょうか?

f:id:cross_hyou:20190330145227j:plain

履物小売業(靴を除く)が一番小さく、卵・鳥肉小売業、パン小売業(製造小売でないもの)が続きます。

今回は以上です。

次回は

 

www.crosshyou.info

 

です。

今回のR言語のコマンドです。


# CSVファイルの読込み
df <- read.csv("shougyou.csv")

# データ構造の確認
str(df)

# summary関数
summary(df)

# Corp_Totalの小さい業種
head(df[order(df$Corp_Total), ])

# Corp_Corpの小さい凝集
head(df[order(df$Corp_Corp), ])

# Corp_Indiの小さい業種
head(df[order(df$Corp_Indi), ])

# Staffの少ない業種
head(df[order(df$Staff), ])

# Revenueの小さい業種
head(df[order(df$Revenue), ])

# Inventoryの小さい業種
head(df[order(df$Inventory), ])

# Spaceの小さい業種
head(df[order(df$Space), ])

東証一部の規模別・業種別PERとPBRデータの分析6 - R言語で33業種別のデータ分析

 

www.crosshyou.info

 の続きです。

今回は33業種別のデータを分析しようと思います。33業種はLevelは5ですので、Levelが5だけのデータフレームを作成します。

f:id:cross_hyou:20190328164033j:plain

Levelの列は3番目なので、これを削除します。

f:id:cross_hyou:20190328164305j:plain

TypeにTotalやLargeのようないらないファクタ水準が残っているので削除します。具体的には文字列に変換してまたファクタに変換します。

f:id:cross_hyou:20190328164649j:plain

まずは33業種ごとの平均値を出してみましょうか。aggreagte関数とmean関数を使います。

f:id:cross_hyou:20190328165410j:plain

数が多いんで、どの業種のPERやPBRが高いか低いかわかりにくいですね。

このaggregate関数の結果を一つのデータフレームに登録してsort関数で並び替えましょう。

f:id:cross_hyou:20190328165807j:plain

order関数で並び替えができます。まずは、Numberで並び替えましょう。

f:id:cross_hyou:20190328170043j:plain

Numberは会社数です。会社数の少ない業種は、Air(空運), Suisan(水産・農林), Mining(鉱業)です。多い業種は、Kouri(小売業), Oroshi(卸売業), Denki(電気機器)です。

PERで並び替えます。

f:id:cross_hyou:20190328170623j:plain

PERの低い業種は、Bank(銀行), Air(空運), Marine(海運)です。高い業種は、Kinzoku(金属製品), Mining(鉱業), SonotaP(その他製造)です。

PBRで並び替えます。

f:id:cross_hyou:20190328171019j:plain

PBRの低い業種は、Mining(鉱業), Bank(銀行), Marine(空運)です。高い業種は、Seimitsu(精密機器), Pharm(医薬品), Food(食品)です。

IncomeとNetAssetですが、これは会社数が多ければ大きな値になるので、Numberで割り算して1社当たりの数値にしましょう。

f:id:cross_hyou:20190328171534j:plain

それでは、Incomeで並び替えます

f:id:cross_hyou:20190328171746j:plain

Incomeの小さい業種は、Mrine(海運), Souko(倉庫), Seni(繊維)です。海運は赤字ですね。大きい業種は、Hoken(保険), Air(空運), Auto(輸送用機器)です。

NetAssetで並び替えます。

f:id:cross_hyou:20190328172838j:plain

NetAssetの小さい業種は、Suisan(水産・農林), Souko(倉庫), Seni(繊維)です。大きい業種は、Hoken(保険), Bank(銀行), Auto(輸送用機器)です。

今回は以上です。
次回は

 

www.crosshyou.info

 

です。

 

今回のR言語のコードです。


# Levelが5だけのデータフレーム
df5 <- df[df$Level == 5, ]
str(df5)

# Levelの列を削除
df5 <- df5[ , -3]
str(df5)

# Typeのファクタ水準を整理
df5$Type <- as.character(df5$Type)
df5$Type <- as.factor(df5$Type)
table(df5$Type)

# 33業種ごとの平均値
aggregate(df5[ , 4:8], list(業種 = df5$Type), mean, na.rm = TRUE)

# 33業種ごとの平均値をデータフレームに
df6 <- aggregate(df5[ , 4:8], list(type = df5$Type), mean, na.rm = TRUE)
str(df6)

# Numberで並び替え
df6[order(df6$Number), ]

# PERで並び替え
df6[order(df6$PER), ]

# PBRで並び替え
df6[order(df6$PBR), ]

# IncomeとNetAssetを1社当たりに変換
df6$Income <- df6$Income / df6$Number
df6$NetAsset <- df6$NetAsset / df6$Number

# Incomeで並び替え
df6[order(df6$Income), ]

# NetAssetで並び替え
df6[order(df6$NetAsset), ]

 

東証一部の規模別・業種別PERとPBRデータの分析5 - R言語で製造業と非製造業を分析

 

www.crosshyou.info

 の続きです。

今回は、製造業と非製造業でPERとPBRを比べてみたいと思います。

まずは、製造業と非製造業のLevelを確認しましょう。

f:id:cross_hyou:20190328071925j:plain

Manuf(製造業)と非製造業(NonManuf)はLevelは4ですね。早速、Level4だけのデータフレームを作成しましょう。

f:id:cross_hyou:20190328072333j:plain

Levelは不要なので削除します。

f:id:cross_hyou:20190328072721j:plain

こんどは、Typeにいらないファクタ水準(AirやAutoなど)が残っていいるので、整理します。

f:id:cross_hyou:20190328073113j:plain

いったん、as.character関数で文字列に変換し、factorでファクタに再変換しました。

aggregate関数で製造業と非製造業に分けて平均値を出してみましょう。

f:id:cross_hyou:20190328073927j:plain

PERのグラフを描いてみます。plot関数です。

f:id:cross_hyou:20190328074556j:plain

f:id:cross_hyou:20190328074608j:plain

赤い水平線が非製造業のPERの平均、黒い水平線が製造業の平均です。

黒点が製造業、赤点が非製造業です。なんだかこの前の規模別のときと同じように製造業で30以上のときがいくつかあります。確認しましょう。

f:id:cross_hyou:20190328075023j:plain

規模別のときと同じように、2013年と2014年ですね。

年ごとのPERをグラフで表示してみます。

f:id:cross_hyou:20190328080025j:plain

年を経るとPERが低くなる傾向です。

箱ひげ図でも表示してみましょう。

f:id:cross_hyou:20190328080411j:plain

f:id:cross_hyou:20190328080431j:plain

今回は、非説明変数をPER、説明変数をYear(数値データ)とType(ファクタ)の二つとみなして、ANCOVA(Analysis of Covariance)分析をしてみたいと思います。

参考書は前回と同じく

 

Statistics: An Introduction Using R (English Edition)

Statistics: An Introduction Using R (English Edition)

 

 です。

まず、製造業と非製造業別でPERの箱ひげ図を描きます。

f:id:cross_hyou:20190328081134j:plain

f:id:cross_hyou:20190328081147j:plain

製造業のほうがバラツキが大きく、平均値が大きいです。

summary関数とaov関数でManfとNonManfでPERに有意な違いがあるか確認しましょう。

f:id:cross_hyou:20190328081659j:plain

p値は0.00221です。有意です。

まずは、TypeとYearが関係したモデルを考えます。

f:id:cross_hyou:20190328082132j:plain

Year, Type, Year * Typeの三つともPERに有意な影響があります。

係数を確認しましょう。

f:id:cross_hyou:20190328082857j:plain

こうなります。

つまり、製造業のときのモデル式は、

PER = 5024.2018 - 2.4817 * Year (製造業のときの回帰式)

非製造業のときのモデル式は、

PER = 5024.2018 - 2559.9594 - 2.4817 * Year + 1.2688 * Year

整理すると、

PER = 2464.242 - 1.2129 * Year  (非製造業のときの回帰式)

です。

plot関数とabline関数で描いてみましょう。

f:id:cross_hyou:20190328084255j:plain

f:id:cross_hyou:20190328084308j:plain

製造業のほうがPERの低下が激しいですね。

今回は以上です。

 

今回のR言語のコードです。


# head関数ではじめの10行を表示
head(df, 10)

# Level4(ManufとNonManuf)だけのデータフレーム
df4 <- df[df$Level == 4, ]
str(df4)
summary(df4)

# Levelの削除
df4 <- df4[ , -3]
str(df4)
summary(df4)

# Typeの水準を整理
df4$Type <- as.character(df4$Type)
df4$Type <- factor(df4$Type)
str(df4$Type)

# 製造業と非製造業別の平均値
aggregate(df4[ , c(4:8)], # df4を対象に
list(df4$Type), # ManufとNonManufごとに
mean)            # 平均値を算出

# PERのグラフ
plot(df4$PER, pch = 21, bg = as.numeric(df4$Type))
abline(h = mean(df4$PER[df4$Type == "Manuf"]), col = 1, lwd = 3)
abline(h = mean(df4$PER[df4$Type == "NonManuf"]), col = 2, lwd = 3)

# PERが30以上を表示
df4[df4$PER > 30, ]

# X軸Year, Y軸PER
plot(df4$Year, df4$PER, pch = 21, bg = as.numeric(df4$Type))

# 箱ひげ図
plot(as.factor(df4$Year), df4$PER)

# ManfとNonManfのPERの箱ひげ図
plot(df4$Type, df4$PER, col = "lightgreen")

# ManfとNonManfで有意な違いがあるかどうか
summary(aov(df4$PER ~ df4$Type))

# YearとTypeの関連したモデル
model1 <- lm(df4$PER ~ df4$Year * df4$Type)
summary.aov(model1)

# モデルの係数の確認
summary(model1)

# plotとabline
plot(df4$Year, df4$PER, pch = 21, bg = as.numeric(df4$Type),
main = "Black:Manuf, Red*NonManuf")
abline(5024.2018, -2.4817, col = "black", lwd = 2)
abline(2464.242, -1.2129, col = "red", lwd = 2)

 

東証一部の規模別・業種別PERとPBRデータの分析4 - R言語のlm関数で回帰分析

 

www.crosshyou.info

 の続きです。

今回は、TotalexFn, 金融を除いた全体のデータを見てみましょう。

まずは、データフレームの始めの10行を表示して、TotalexFnのLevelを確認しましょう。head関数を使います。

f:id:cross_hyou:20190327210425j:plain

TotalexFnのLevelは3ですね。絞り込みます。

f:id:cross_hyou:20190327210820j:plain

Level(3列目)とType(4列目)は必要ないので、削除します。

f:id:cross_hyou:20190327211130j:plain

データはすべて数値型ですね。

今回は、lm関数を使って、回帰分析の練習をしてみます。

 

Statistics: An Introduction Using R (English Edition)

Statistics: An Introduction Using R (English Edition)

 

 この本を参考にしてみます。

PERと一番相関の強い変数で線形単回帰分析をしてみます。cor関数で相関を調べましょう。

f:id:cross_hyou:20190327211602j:plain

Incomeが一番(負の)相関が強いですね。IncomeでPERを回帰しましょう。

まずは、グラフを作成します。

f:id:cross_hyou:20190327211858j:plain

f:id:cross_hyou:20190327211916j:plain

右肩下がりのグラフですね。

lm関数で線形単回帰モデルを作成します。

f:id:cross_hyou:20190327212643j:plain

PER = 3.40e+01 - 5.43e-05 * Income という回帰式です。

3.40e+01は34です。5.43e-05は0.0000543です。

なので、PER = 34 - 0.0000543 * Income です。

さきほどのグラフにこのモデルの直線を重ねてみます。abline関数です。

f:id:cross_hyou:20190327213338j:plain

f:id:cross_hyou:20190327213353j:plain

このグラフにさらに、観測値(青い点)と予測値(緑の直線)の差分のラインを引いてみましょう。まず、predict関数を使って予測値のベクトルを用意します。

f:id:cross_hyou:20190327213953j:plain

次にfor関数を使います。

f:id:cross_hyou:20190327214907j:plain

f:id:cross_hyou:20190327214923j:plain

summary関数でmodel1の基本データを表示します。

f:id:cross_hyou:20190327215813j:plain

こんどはIncomeを対数変換した値で線形回帰してみましょう。

まずは、Incomeを対数変換したベクトルを用意します。

f:id:cross_hyou:20190327220118j:plain

このlogIncomeを使ってlm関数でモデルを作成します。

f:id:cross_hyou:20190327220359j:plain

R-squaredが0.8644とmodel1の0.8111よりも良くなっています。
散布図と回帰直線を重ねてみます。

f:id:cross_hyou:20190327220829j:plain

f:id:cross_hyou:20190327220841j:plain

もうひとつ、PERも対数変換したモデルも試してみましょう。

f:id:cross_hyou:20190327221114j:plain

こうしてPERを対数変換したベクトルを用意しました。

f:id:cross_hyou:20190327221313j:plain

R-squaredが0.8488なので、model2よりは悪いですね。散布図と回帰直線を重ねます。

f:id:cross_hyou:20190327221610j:plain

f:id:cross_hyou:20190327221624j:plain

最後にPERとIncomeの散布図にmodel1, model2, model3の回帰線を重ねてみましょう。

散布図はplot関数、model1の回帰直線はabline関数、model2とmodel3の回帰線はcureve関数で描きます。

f:id:cross_hyou:20190327224719j:plain

 

f:id:cross_hyou:20190327224735j:plain



今回は以上です。

次回は

 

www.crosshyou.info

 

です。

 

今回のR言語のコードです。


# データフレームの始めの10行を表示
head(df, 10)

# TotalexFnだけのデータフレームを作成
df3 <- df[df$Type == "TotalexFn", ]
str(df3)
summary(df3)

# LevelとTypeを削除
df3 <- df3[ , -c(3, 4)]
str(df3)
summary(df3)

# PERとの相関関係
cor(df3, df3$PER)

# PERとIncomeのグラフ
plot(df3$Income, df3$PER, pch = 21, bg = "blue")

# lm関数で線形単回帰モデル
model1 <- lm(PER ~ Income, data = df3)
model1

# PERとIncomeのグラフと回帰直線
plot(df3$Income , df3$PER, pch = 21, bg = "blue")
abline(model1, col = "green")

# 予測値のベクトルを用意
fitted <- predict(model1)

# PERとIncomeのグラフと回帰直線と残差
plot(df3$Income, df3$PER, pch = 21, bg = "blue")
abline(model1, col = "green")
for (i in 1:length(fitted))
lines(c(df3$Income[i], df3$Income[i]), c(df3$PER[i], fitted[i]), col = "red")

# summary関数
summary(model1)

# Incomeを対数変換したベクトル
logIncome <- log(df3$Income)

# Incomeを対数変換したモデル
model2 <- lm(df3$PER ~ logIncome)
summary(model2)

# 散布図と回帰直線
plot(logIncome, df3$PER, pch = 21, bg = "blue")
abline(model2, col = "red")

# PERを対数変換したベクトル
logPER <- log(df3$PER)

# PER, Incomeともに対数変換したモデル
model3 <- lm(logPER ~ logIncome)
summary(model3)

# 散布図と回帰直線
plot(logIncome, logPER, pch = 21, bg = "blue")
abline(model3, col = "orange")

# 散布図とmodel1, model2, model3
xhani <- range(df3$Income) # X軸の範囲
yhani <- range(df3$PER) # Y軸の範囲
plot(df3$Income, df3$PER, pch = 21, bg = "blue", xlab = "", ylab = "", main = "",
xlim = xhani, ylim = yhani) # 散布図
abline(model1, col = "red", lwd = 3) # model1の回帰直線
par(new = TRUE)
curve(165.1504 -11.6929 * log(x), from = xhani[1], to = xhani[2],
col = "green", lwd = 3, xlab = "", ylab = "", main = "",
xlim = xhani, ylim = yhani) # model2の回帰曲線
par(new = TRUE)
curve(exp(9.45722 -0.5219 * log(x)), from = xhani[1], to = xhani[2],
col = "yellow", lwd = 3, xlab = "Income", ylab = "PER",
main = "Red:Model1, Green:Model2, Yellow:Model3", xlim = xhani, ylim = yhani)
  # model3の回帰曲線

 

東証一部の規模別・業種別PERとPBRデータの分析3 - R言語で規模別のPERに有意な違いがあるかを見る

 

www.crosshyou.info

 の続きです。

前回は全体のPERとPBRを見てみました。今回は規模別のPERやPBRを見てみましょう。まずは、作業しやすいように、規模別のデータだけに絞り込みます。

まず、head関数でデータフレームのはじめの数行を表示しましょう。

f:id:cross_hyou:20190327161109j:plain

規模別は、Large, Mid, Smallの3種類で、Levelは2ですね。なので、Levelが2だけのデータフレームを作成しましょう。

f:id:cross_hyou:20190327161517j:plain


できました。aggregate関数でType別の平均値を算出します。

f:id:cross_hyou:20190327161820j:plain

PER、PBRともにMidが一番高いですね。PERはSmallが2番目でLargeが一番低く、PBRはLargeが2番目でSmallが一番低いです。

今回は、

 

Statistics: An Introduction Using R (English Edition)

Statistics: An Introduction Using R (English Edition)

 

 を参考にして、ANOVA(Analysis of Variance)をやってみます。

規模によって、PERの水準は違うのかどうか?です。

まずは、PERをplot関数でグラフにしてみたいと思います。

その前にTypeには余計なファクタ水準が残っているので整理します。

f:id:cross_hyou:20190327164816j:plain

こうしてファクタ水準をSmall, Mid, Largeの3つだけにしました。

これでplot関数でPERをグラフにします。上記のCrawleyの本を参考にして、Type別に色分けをしてみます。

f:id:cross_hyou:20190327170005j:plain

 

できました。水平線はそれぞれの規模別の平均値です。

MidがPERの高いときがいくつかありますね。いつでしょうか?

f:id:cross_hyou:20190327170252j:plain

2013年と2014年ですね。

それでは規模によってPERの平均値は有意な差があるのかどうか、aov関数とsummary関数で確かめましょう。

f:id:cross_hyou:20190327170811j:plain

p値は1.5e-14なので0.05よりも小さいです。Small, Mid, LargeではPERの平均値は有意な差があることがわかりました。

plot関数で視覚化します。

f:id:cross_hyou:20190327171525j:plain

f:id:cross_hyou:20190327171538j:plain

 

今回は以上です。

次回は

 

www.crosshyou.info

 

です。

 

以下は今回のR言語のコードです。

# はじめの数行を表示
head(df)

# 規模別だけのデータフレーム
df2 <- df[df$Level == 2, ]
summary(df2)

# Type別の平均値
aggregate(df2[ , c(5:9)], list(Kibo = df2$Type), mean)

# Typeの水準を整理
df2$Type <- as.character(df2$Type)
df2$Type <- factor(df2$Type, levels = c("Small", "Mid", "Large"), ordered = TRUE)
levels(df2$Type)

# PERのグラフ
plot(df2$PER, pch = 21, bg = as.numeric(df2$Type),
main = "Small-Black, Mid-Red, Large-Green")
abline(h = mean(df2$PER[df2$Type == "Small"]))
abline(h = mean(df2$PER[df2$Type == "Mid"]), col = "red")
abline(h = mean(df2$PER[df2$Type == "Large"]), col = "green")

# PERが30以上
df2[df2$PER > 30, ]

# aov関数とsummary関数
summary(aov(df2$PER ~ df2$Type))

# aov関数とplot関数
par(mfrow = c(2, 2))
plot(aov(df2$PER ~ df2$Type))