2012年8月12日日曜日

Rで簡単な重回帰分析

http://ayaka-beauty.blogspot.jp/2012/08/jill.html

@コスメを見てて欲しい商品がありました.
そこで,以下のような分析を行なってみました.

*************************************

@コスメで欲しい商品のクチコミをRMeCabで分かち書き(形態素に分割)し,
「”特定の単語と数・総単語数”を説明変数,”★の数(評価)”を披説明変数」とするデータセットとして回帰モデルの選択を行う.
(つまり,どの変数の組み合せが一番当てはまりの良いデータとなるかを調べた)
そして,回帰式を求める!

★データは最新クチコミ10人分から抽出した.
★特定の単語…全てのユーザが使用している単語はなかったので,自身が好感を抱いている単語9個をデータとした.
★データセットは以下


評価 単語1 単語2 単語3 単語4 単語5 単語6 単語7 単語8 単語9 総単語数
1〜7 女の子 フルーティ 甘い 幸せ 見た目 かわいい(可愛い) 好き(大好き) ロールオン(ロールオンタイプ) NUM



【結果】
①まず,全ての変数の相関関係を見てみた

> round(cor(jill),2)
          hyouka tango1 tango2 tango3 tango4 tango5 tango6 tango7 tango8 tango9 all_tango
hyouka      1.00   0.45   0.34  -0.09  -0.35  -0.09   0.34   0.33   0.45  -0.23      0.22
tango1      0.45   1.00   0.19  -0.19   0.00  -0.19   0.19   0.35   0.65   0.00      0.51
tango2      0.34   0.19   1.00  -0.25   0.00  -0.25   0.00  -0.23   0.29   0.45      0.29
tango3     -0.09  -0.19  -0.25   1.00   0.00  -0.12  -0.25   0.23  -0.43   0.00     -0.20
tango4     -0.35   0.00   0.00   0.00   1.00  -0.34  -0.22   0.00  -0.26   0.30      0.73
tango5     -0.09  -0.19  -0.25  -0.12  -0.34   1.00   0.50   0.23   0.00   0.34     -0.19
tango6      0.34   0.19   0.00  -0.25  -0.22   0.50   1.00   0.80   0.29  -0.22      0.00
tango7      0.33   0.35  -0.23   0.23   0.00   0.23   0.80   1.00   0.20  -0.31      0.16
tango8      0.45   0.65   0.29  -0.43  -0.26   0.00   0.29   0.20   1.00   0.00      0.30
tango9     -0.23   0.00   0.45   0.00   0.30   0.34  -0.22  -0.31   0.00   1.00      0.44
all_tango   0.22   0.51   0.29  -0.20   0.73  -0.19   0.00   0.16   0.30   0.44      1.00

単語6(見た目)と単語7(かわいい),単語4(甘い)と総単語数に強い相関が見られる.

②非線形の関係をマクロ的に考察するため対散布図を作成

> pairs(jill,panel=panel.smooth,jill)
※対散布図を作成する際,関数 pairs に引数 panel=panel.smooth を用いると散布図の点の傾向を示す曲線が描かれる


単語6(見た目)と単語7(かわいい),単語4(甘い)と総単語数との相関関係は線形的である


③まず 評価(hyouka)を被説明変数と残りに全ての変数を説明変数とした回帰分析の情報
を求めてみる

> jill.lm1 <- lm(hyouka ~.,data = jill)
> summary(jill.lm1)

Call:
lm(formula = hyouka ~ ., data = jill)

Residuals:
ALL 9 residuals are 0: no residual degrees of freedom!

Coefficients: (2 not defined because of singularities)
            Estimate Std. Error t value Pr(>|t|)
(Intercept)        9         NA      NA       NA
tango1            -6         NA      NA       NA
tango2             7         NA      NA       NA
tango3           -22         NA      NA       NA
tango4            -3         NA      NA       NA
tango5             6         NA      NA       NA
tango6           -29         NA      NA       NA
tango7            21         NA      NA       NA
tango8            -2         NA      NA       NA
tango9            NA         NA      NA       NA
all_tango         NA         NA      NA       NA

Residual standard error: NaN on 0 degrees of freedom
Multiple R-squared:     1, Adjusted R-squared:   NaN 
F-statistic:   NaN on 8 and 0 DF,  p-value: NA 


※NA(Not Available):利用できないという意味
つまり全て必要(逆にいうと,全てダメ)ということ.

④一応stepを使って変数の選択をしてみる

※R のパッケージ stats には変数を選択する関数 step が用意されている.関数 step では,モデルの選択は AIC を基準としている.

> jill.lm2 <-step(jill.lm1)
Start:  AIC=-Inf
hyouka ~ tango1 + tango2 + tango3 + tango4 + tango5 + tango6 + 
    tango7 + tango8 + tango9 + all_tango


Step:  AIC=-Inf
hyouka ~ tango1 + tango2 + tango3 + tango4 + tango5 + tango6 + 
    tango7 + tango8 + tango9
 警告メッセージ: 
 完全なフィットに対するモデル選択は意味がありません  


…意味のない選択

⑤けれど一応,回帰分析の要約を出力する

> summary(jill.lm2)

Call:
lm(formula = hyouka ~ tango1 + tango2 + tango3 + tango4 + tango5 + 
    tango6 + tango7 + tango8 + tango9, data = jill)

Residuals:
ALL 9 residuals are 0: no residual degrees of freedom!

Coefficients: (1 not defined because of singularities)
            Estimate Std. Error t value Pr(>|t|)
(Intercept)        9         NA      NA       NA
tango1            -6         NA      NA       NA
tango2             7         NA      NA       NA
tango3           -22         NA      NA       NA
tango4            -3         NA      NA       NA
tango5             6         NA      NA       NA
tango6           -29         NA      NA       NA
tango7            21         NA      NA       NA
tango8            -2         NA      NA       NA
tango9            NA         NA      NA       NA

Residual standard error: NaN on 0 degrees of freedom
Multiple R-squared:     1, Adjusted R-squared:   NaN 
F-statistic:   NaN on 8 and 0 DF,  p-value: NA 


つまり,今回の回帰式は
hyouka = 9 +  tango1*(-6) + tango2 *(7)+ tango3*(-22) + tango4*(-3) + tango5 *(6)+ tango6 *(-29)+ tango7 *(21)+ tango8 *(-2)+ tango9*(NA)

…ようは今回のデータはダメってこと.
原因は
■被っている単語が少なすぎる
■サンプル数が少なすぎる
ということだと思います.


(参考http://mjin.doshisha.ac.jp/R/14.pdf)


【Rメモ】
> library(RMeCab) #始めるときにうつコマンド

txres <- RMeCabFreq("herenalove.txt") #herenalove.txtをtxresに代入
>txres #txresを表示

>read.csv("jill_data.csv") #"jill_data.csv"データを読み込む
> jill <- read.csv("jill_data.csv") #"jill_data.csv"をjillに入れる


0 件のコメント:

コメントを投稿