質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.25%

  • R

    198questions

    R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

クラスター分析で代表値の抽出

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 56

krn

score 1

Rでのクラスター分析について質問です。
質問内容はタイトルの通りです。

作業内容を説明すると、ある文献を参考にデータ処理を行っています。
Rでの主な作業は主成分分析を行い、そこで得られた主成分得点を元にクラスター分析を行うことです。(言葉で十分に説明できているか不明なのでここまでのコードを載せます。)

> df <- read.table("studydata.csv", header=T, sep=",", row.names=1)
> sd <- scale(df)
> sdf <- data.frame(sd)
> pca <- prcomp(sdf, scale=T)
> pcax <- data.frame(pca$x)
> km <- kmeans(pcax, 5)


5つのクラスターに分けました。
ここで、

各クラスターの主成分の平均値に近いものを偏差と標準偏差の関係から抽出する

とあるのですが具体的なアプローチ方法がわかりません。
参考統計式の記載があったので載せます。

クラスターXの第ni主成分の値:xi
クラスターXの第ni主成分の平均値:μi
クラスターXの第ni主成分の偏差:xi-μi
クラスターXの第ni主成分の標準偏差:σi
[X=クラスター番号(①~⑤)、n=主成分の番号(1,2,3,4)、i=要素の番号(①:i=1,…22、②:i=1,…3、③:i=1,…15、④:i=1,…14、⑤:i=1,…5)]
Σ(xi-μi/σi)=各要素の偏差/標準偏差の値の合計値
⇒最小となる要素

ネットや統計に関する参考書等に目を通しましたが、知識が浅く理解に困っております。
上記の計算をRで行えるのか、行える場合はコードを教えていただきたいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

まずここでkmというオブジェクトには計算結果に纏わるいろんな情報がゴッソリまとまったものが入っています。strという関数でその概要を眺めることができます。以下は標準添付のサンプルデータで試してみた例。 

str(km)
List of 9
 $ cluster     : int [1:150] 2 2 2 2 2 2 2 2 2 2 ...
 $ centers     : num [1:3, 1:4] 6.85 5.01 5.9 3.07 3.43 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:3] "1" "2" "3"
  .. ..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
 $ totss       : num 681
 $ withinss    : num [1:3] 23.9 15.2 39.8
 $ tot.withinss: num 78.9
 $ betweenss   : num 603
 $ size        : int [1:3] 38 50 62
 $ iter        : int 2
 $ ifault      : int 0
 - attr(*, "class")= chr "kmeans"

たとえば元データがどのクラスターに割当てられたかはkm$clusterを見れば良さそうだと分かります。
クラスター1に所属するデータだけからなるサブセットを作るなら:

sdf.sub1 <- sdf[km$cluster==1, ]

クラスターXのなんちゃらを計算してみたいならsdf.sub1を相手にすればいいはずです。

試行錯誤して手順の見当が付いたら、全クラスタについて同様の処理を実行する為のforループを回すスクリプトを書いてみる。できればsapplyという関数の使い方を覚えてみる。大体そんな流れになると思います。      

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/23 21:49

    回答ありがとうございます。
    対象とすべきデータの抽出方法が把握できたのは大変ありがたいのですが、どちらかというと統計式(Σ以降の式です)の理解に困っています。言葉足らずでしたら申し訳ありません。
    これはRで行えるものでしょうか?

    キャンセル

  • 2017/12/23 22:04

    統計と名の付くものなら大抵Rで何とかなるでしょう。 しかし統計式の理解と言われても 何処で引掛っているのか分からないので、具体的なアドバイスが困難です。
    http://www.okadajp.org/RWiki/?cmd=read&page=R%E3%81%AE%E7%B5%B1%E8%A8%88%E8%A7%A3%E6%9E%90%E9%96%A2%E6%95%B0Tips
    このへんをよく読んで、 まずは スクリプトを組んでみること。それでどうしても先に進め無くなったら、先に進めなくなった状況の説明を添えて改めて質問するのです。 何一つ分かりません、ゼロから教えて下さいではダメです。

    キャンセル

  • 2018/01/06 17:03

    時間がかかりましたが、無事解決できました。アドバイスありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.25%

関連した質問

  • 解決済

    swift Button タップ スワイプ

    現在、タップとスワイプの二つを一つのボタンで行おうとしています。 ボタンをタップしたらUIViewを出して ボタンをスワイプしたらそのボタンが指に沿って移動する・・・

  • 解決済

    swift スワイプ 座標判定 XY

    前提・実現したいこと 毎度毎度すみません・・・ 現在swiftで作っていて、場所Aにオブジェクトをスワイプし オブジェクトが場所Aに少しでも入っていたら、 オブジェクトを消

  • 解決済

    UITableView swift

    質問です。 現在UIViewControllerの上にpagemenuを使って、UIViewController1,UIViewController2をおいています。 UI

  • 解決済

    UICollectionViewCell swift

    swiftで2カラムのCollectionView(メルカリ)のようなUIを実現したいです。 UICollectionViewCellとxibファイルを使っています。 画像

  • 解決済

    HMSegmentedControlにてタブ部分とScrollViewを連動させる方法

    前提・実現したいこと http://dev.classmethod.jp/smartphone/ios_oss_hmsegmentedcontrol/ 上記サイトを参考にHMS

  • 解決済

    javaで西暦から下2桁をぬきだしたいです

    javaで西暦から下2桁をぬきだしたいです 標準入力から たとえば1997と入力したとして int year = 1997; yearに1977が入って このyearを

  • 解決済

    CGDataProviderReleaseDataCallbackが呼ばれない

    前提・実現したいこと CGDataProviderReleaseDataCallbackが呼ばれるようにしたい。 referanceの読み方がわかればできるのかもしれませんが、理解

  • 解決済

    レスポンシブデザインの画像が可変しないのですが、なぜでしょう…

    前提・実現したいこと レスポンシブデザイン中です。 widthが767px以下になったらメイン画像を可変させたいのですが。--- 発生している問題・エラーメッセージ メイン画像

同じタグがついた質問を見る

  • R

    198questions

    R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。