PythonRSASTech Blog 

SAS R and Python―第1回SAS R Pythonによる、線形回帰モデル

統計ソフトには、代表的なものとして、SAS、R、Python、SPSS等のツールが存在しますが、それぞれを横ぐしでみた書籍は日本にはないと思われます。 これらの統計ツールの中で現在、代表的なプログラム言語であるSAS、R、Pythonをもちいて、同じデータ、同じ分析手法を行い、それぞれプログラムを実際書くことで、SAS、R、Pythonのコーディングのしやすさ出力内容の違い、などについて比較検証します。コードはオプションを使わずデフォルトのものを使います。

使用データ

第一回目は、以下のデータを利用して、各プログラム言語で線形モデルを記述します。

変数名内容
RIM犯罪発生率(人口単位)
ZN25,000平方フィート以上の住宅区画の割合
INDUS非小売業の土地面積の割合(人口単位)
CHASチャールズ川沿いかどうか(チャールズ川沿いの場合は1、そうでない場合は0)
NOX窒素酸化物の濃度(pphm単位)
RM1戸あたりの平均部屋数
AGE1940年よりも前に建てられた家屋の割合
DISボストンの主な5つの雇用圏までの重み付きの距離
RAD幹線道路へのアクセス指数
TAX10,000ドルあたりの所得税率
PTRATIO教師あたりの生徒の数(人口単位)
B1000(Bk-0.63)2として計算:Bkがアフリカ系アメリカ人居住者の割合(人口単位)
LSTAT低所得者の割合
MEDV住宅価格の中央値(単位1,000ドル)

モデル

SAS

FILENAME ho url "https://archive.ics.uci.edu/ml/
 machine-learning-databases/housing/housing.data";
DATA WORK.df;
  FORMAT CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX 
          PTRATIO B LSTAT MEDV BEST32.;
  INFILE ho DLM=' ' MISSOVER LRECL=32767 FIRSTOBS=1;
  INPUT CRIM--MEDV;
RUN;
proc reg data = df ;
    model MEDV  =  RM ;
run ;

R

df<-read.table("https://archive.ics.uci.edu/ml/
               machine-learning-databases/housing/housing.data"
               , header = F)
names(df) <- c('CRIM', 'ZN', 'INDUS', 'CHAS', 
               'NOX', 'RM', 'AGE', 'DIS', 'RAD', 
               'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV')
mod1 <- lm(MEDV ~ RM , data = df)
summary(mod1)
summary.aov(mod1)

Python

import pandas as pd
from statsmodels.formula.api import ols
df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/'
                 'housing/housing.data', header=None, sep='\s+')
df.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS',
                        'NOX', 'RM', 'AGE', 'DIS', 'RAD',
                        'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
model = ols('MEDV ~ RM', df).fit()
print(model.summary())
print(model)

比較検討

データの読み込みプログラム

R、Pythonに関しては、オンラインにあるデータを読み込む際、簡単に読み込みが可能なパッケージが存在しますが、それに対して、SASはオンラインにあるデータを読み込む際、infileステートメントを使用する場合、変数名をコーディングする必要があるため、Rにくらべると多少多くのコーディング数が必要になります。

SAS9ステップ数
R6ステップ数
Python7ステップ数

ステップ数 ① R ② Python ③ SAS

出力結果プログラム

出力結果プログラムについては、R、Python、SASともに簡単なステートメントで多くの情報量が出力されますが、出力内容については、特にPythonの出力内容が充実しています。

SAS3ステップ数
R3ステップ数
Python3ステップ数

ステップ数 ① R  ② SAS ③ Python

結論

オンラインのデータ読み込みの場合、R、Pythonは簡単なパッケージにて読み込むことが可能であることに対し、SASは変数をあらかじめ、宣言する必要があるためプログラムのコーディングが必要になります。またSASはオンラインのデータを読み込むというより、予めデータベースに保存した大規模データのハンドリングが得意とされるため、オンラインの小規模なデータだと優位性が少ないように考えます。 出力に関しては、SAS、R、Pythonともにすくないステップで必要な情報をだしてくれる関数があり、特にPyhonの出力内容はかなり充実した内容となっていました。

参考文献

  • SAS and R: Data Management, Statistical Analysis, and Graphics, Second Edition Ken Kleinman (著), Nicholas J. Horton (著)
  • Python機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear) 単行本(ソフトカバー) – 2016/6/30 Sebastian Raschka (著), 株式会社クイープ (翻訳), 福島真太朗 (翻訳)
  • 新版 実用SAS生物統計ハンドブック 臨床評価研究会(ACE) 基礎解析分科会 (著), 浜田 知久馬 (監修)

このページをシェアする:



DATUM STUDIOは、クライアントの事業成長と経営課題解決を最適な形でサポートする、データ・ビジネスパートナーです。
データ分析の分野でお客様に最適なソリューションをご提供します。まずはご相談ください。