Rで解析:解析データを再現するSPSSシンタックスを作成!「descr」パッケージの紹介

Rの解析に役に立つ記事
スポンサーリンク

記述統計はデータをまとめ、統計量を計算し傾向や性質を理解する重要な作業です。記述統計にはデータをまとめる多くの手法がありますが、まずはデータの出現数(分布)を把握することが重要かと思います。分布を把握することでデータの入力ミス等に気がつくこともあります。

しかし、市販の統計ソフトなどでデータの分布を把握する操作はやや煩雑で、目的にあった出力を得るためにSPSSなどではシンタックスを作成することもあります。その点、Rは自由度が高いので解析作業が非常に楽です。

これら作業を軽減できるかもしれない「descr」パッケージの紹介します。本パッケージではデータの分布をクロステーブル、グラフで表示するだけでなく、「Rで処理したデータをSPSSで再現しSPSSフォーマットで保存する」シンタックスを出力するコマンドが収録されています。本パッケージの最大の特徴かと思います。

まだまだ、大学では論文投稿などの関係からSPSSを利用されている方が多いと思います。RからSPSSへのデータ移行が楽になります。ぜひ、パッケージのコマンドを活用ください。

なお、Rで作成した20*30000のデータをシンタックスで再現することが出来ました。ただし、シンタックスを利用する際には「データが記述されたテキストファイルの保存場所」に注意してください。正しい場所にテキストファイルを保存しないとエラーになります。正しい保存場所はSPSSのエラーを確認してください。また、データラベルには日本語も使用可能です。日本語が含まれている場合はダブルクリックでシンタックスファイルを開くのではなく、SPSSのメニューよりファイル、シンタックス、エンコードにUTF-8を選択してください。

パッケージのバージョンは1.1.5。実行コマンドはwindows 11のR version 4.1.2で確認しています。

スポンサーリンク

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("descr")

実行コマンドの紹介

詳細はコマンドまたはパッケージヘルプを確認してください。

#パッケージの読み込み
library("descr")

#####準備#####################
#データ例の作成
set.seed(12345)
TestData <- data.frame(Data1 = sample(paste0("Group", 1:2), 40, replace = TRUE),
                       Data2 = sample(paste0("Group", 1:2), 40, replace = TRUE))
##############################

#&#12487;&#12540;&#12479;&#12501;&#12524;&#12540;&#12512;&#12398;&#20869;&#23481;&#12434;&#20877;&#29694;&#12377;&#12427;spss&#12471;&#12531;&#12479;&#12483;&#12463;&#12473;&#12392;R&#12467;&#12510;&#12531;&#12489;,&#12487;&#12540;&#12479;&#20869;&#23481;&#12434;
#&#20316;&#26989;&#12501;&#12457;&#12523;&#12480;&#12395;&#20986;&#21147;:data.frame2txt&#12467;&#12510;&#12531;&#12489;
#SPSS&#12391;spss&#12471;&#12531;&#12479;&#12483;&#12463;&#12473;&#12434;&#23455;&#34892;&#12377;&#12427;&#38555;&#12399;&#12300;datafile = "TestData.txt"&#12301;&#12398;
#&#20445;&#23384;&#22580;&#25152;&#12395;&#27880;&#24847;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;,&#20986;&#21147;&#12373;&#12428;&#12427;spss&#12471;&#12531;&#12479;&#12483;&#12463;&#12473;&#12399;&#12300;/FILE='TestData.txt'&#12301;&#12391;&#12377;
#&#21508;&#12458;&#12503;&#12471;&#12519;&#12531;&#12399;&#20445;&#23384;&#12501;&#12449;&#12452;&#12523;&#21517;&#12398;&#25351;&#23450;&#12395;&#20351;&#29992;&#12375;&#12414;&#12377;
data.frame2txt(TestData, datafile = "TestData.txt", r.codefile = "TestData.R",
               sps.codefile = "TestData.sps", df.name = "TestData")

#&#12487;&#12540;&#12479;&#12434;&#12463;&#12525;&#12473;&#12486;&#12540;&#12502;&#12523;&#12395;&#38598;&#35336;:CrossTable&#12467;&#12510;&#12531;&#12489;
#&#20986;&#21147;&#12373;&#12428;&#12427;&#34920;&#20869;&#12398;&#25968;&#23383;&#12399;Cell Contents&#12434;&#21442;&#29031;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;
PlotCT <- CrossTable(TestData[, 1], TestData[, 2], drop.levels = TRUE, 
                     dnn = c(colnames(TestData[1]), colnames(TestData[2])))
#&#20986;&#29694;&#25968;&#12434;&#12464;&#12521;&#12501;&#12391;&#34920;&#31034;
plot(PlotCT)
#&#20986;&#29694;&#25968;&#12434;&#12486;&#12540;&#12502;&#12523;&#12391;&#34920;&#31034;
PlotCT

#Cell Contents 
#|-------------------------|
#|                       N | 
#| Chi-square contribution | 
#|           N / Row Total | 
#|           N / Col Total | 
#|         N / Table Total | 
#|-------------------------|
#=================================
#Data2
#Data1       Group1   Group2   Total
#---------------------------------
#  Group1         6        6      12
#             0.117    0.159         
#             0.500    0.500   0.300
#             0.261    0.353        
#             0.150    0.150        
#---------------------------------
#  Group2        17       11      28
#             0.050    0.068        
#             0.607    0.393   0.700
#             0.739    0.647        
#             0.425    0.275         
#---------------------------------
#  Total         23       17      40
#             0.575    0.425         
#=================================
  
#&#12487;&#12540;&#12479;&#12398;&#35201;&#32004;&#12434;&#34920;&#31034;:descr&#12467;&#12510;&#12531;&#12489;
descr(TestData)
Data1
Length     Class      Mode 
40 character character 

Data2
Length     Class      Mode 
40 character character 

#&#12487;&#12540;&#12479;&#12398;&#20986;&#29694;&#29575;&#12434;&#34920;&#31034;:freq&#12467;&#12510;&#12531;&#12489;
#&#12464;&#12521;&#12501;&#12418;&#21512;&#12431;&#12379;&#12390;&#20986;&#21147;&#12373;&#12428;&#12414;&#12377;
freq(TestData[, 1], y.axis = "percent")
#TestData[, 1] 
#       Frequency Percent
#Group1        12      30
#Group2        28      70
#Total         40     100

出力例

・CrossTableコマンド

CrossTable

・freqコマンド

freq

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました