R - 主成分行列
Section 1.8
次のデータを使って、分散共分散行列から主成分分析をしてみる
| No. | 身長 | 体重 |
|---|---|---|
| 1 | 151 | 48 |
| 2 | 164 | 53 |
| 3 | 146 | 45 |
| 4 | 158 | 61 |
Rで記述してみると...
身長 <- c(151, 164, 146, 158) 体重 <- c(48, 53, 45, 61) data <- data.frame(身長, 体重) result <- matrix(0, 5, 2) rownames(result) <- c("身長", "体重", "固有値", "寄与率", "累積寄与率") colnames(result) <- c("第1主成分", "第2主成分") data.pc <- prcomp(data) #主成分分析 result[1:2,] <- data.pc$rotation #主成分 result[3,] <- data.pc$sdev^2 #固有値 result[4:5,] <- summary(data.pc)$importance[2:3,] #寄与率
実行して、結果(result)を表示してみると...
第1主成分 第2主成分 身長 0.7654095 -0.6435435 体重 0.6435435 0.7654095 固有値 94.4099601 16.7567066 寄与率 0.8492700 0.1507300 累積寄与率 0.8492700 1.0000000
補足
相関行列から主成分分析をするには、関数 prcomp() の引数に scale=T を指定すればよいっぽい。
data.pc <- prcomp(data, scale=T) #主成分分析
結果はこうなる。
第1主成分 第2主成分 身長 0.7071068 -0.7071068 体重 0.7071068 0.7071068 固有値 1.6931597 0.3068403 寄与率 0.8465800 0.1534200 累積寄与率 0.8465800 1.0000000
しかし、分散共分散行列からの主成分分析と相関行列からの主成分分析をどう使い分ければよいのかしらん?軽く調べたけどまだしっくりこず...
参考

- 作者: 石村貞夫,石村光資郎
- 出版社/メーカー: 東京図書
- 発売日: 2007/02
- メディア: 単行本
- 購入: 4人 クリック: 19回
- この商品を含むブログ (8件) を見る
R - 相関行列
Section 1.8
次のデータを使って、相関行列を求めてみる
| No. | 身長 | 体重 |
|---|---|---|
| 1 | 151 | 48 |
| 2 | 164 | 53 |
| 3 | 146 | 45 |
| 4 | 158 | 61 |
Rで記述してみると...
身長 <- c(151, 164, 146, 158) 体重 <- c(48, 53, 45, 61) data <- data.frame(身長, 体重) result <- cor(data) #相関行列
実行して、結果(result)を表示してみると...
身長 体重 身長 1.0000000 0.6931597 体重 0.6931597 1.0000000
参考

- 作者: 石村貞夫,石村光資郎
- 出版社/メーカー: 東京図書
- 発売日: 2007/02
- メディア: 単行本
- 購入: 4人 クリック: 19回
- この商品を含むブログ (8件) を見る
R - 分散共分散行列
Section 1.8
次のデータを使って、分散共分散行列を求めてみる
| No. | 身長 | 体重 |
|---|---|---|
| 1 | 151 | 48 |
| 2 | 164 | 53 |
| 3 | 146 | 45 |
| 4 | 158 | 61 |
Rで記述してみると...
身長 <- c(151, 164, 146, 158) 体重 <- c(48, 53, 45, 61) data <- data.frame(身長, 体重) result <- var(data) #分散共分散行列
実行して、結果(result)を表示してみると...
身長 体重 身長 62.25 38.25000 体重 38.25 48.91667
参考

- 作者: 石村貞夫,石村光資郎
- 出版社/メーカー: 東京図書
- 発売日: 2007/02
- メディア: 単行本
- 購入: 4人 クリック: 19回
- この商品を含むブログ (8件) を見る
R - データの標準化
Section 1.8
次のデータを使って、データの標準化をしてみる
| No. | 身長 | 体重 |
|---|---|---|
| 1 | 151 | 48 |
| 2 | 164 | 53 |
| 3 | 146 | 45 |
| 4 | 158 | 61 |
Rで記述してみると...
身長 <- c(151, 164, 146, 158) 体重 <- c(48, 53, 45, 61) data <- data.frame(身長, 体重) result <- scale(data)[,] #データの標準化 rownames(result) <- rownames(data)
実行して、結果(result)を表示してみると...
身長 体重 1 -0.4752932 -0.5361704 2 1.1723899 0.1787235 3 -1.1090174 -0.9651067 4 0.4119208 1.3225537
参考

- 作者: 石村貞夫,石村光資郎
- 出版社/メーカー: 東京図書
- 発売日: 2007/02
- メディア: 単行本
- 購入: 4人 クリック: 19回
- この商品を含むブログ (8件) を見る
R - 分散
「入門はじめての多変量解析」の内容をもとに多変量解析をRでお勉強していこかと
Section 1.8
次のデータを使って、平均、分散、標準偏差を求めてみる
| No. | 身長 | 体重 |
|---|---|---|
| 1 | 151 | 48 |
| 2 | 164 | 53 |
| 3 | 146 | 45 |
| 4 | 158 | 61 |
Rで記述してみると...
身長 <- c(151, 164, 146, 158) 体重 <- c(48, 53, 45, 61) data <- data.frame(身長, 体重) result <- matrix(0, 2, 3) rownames(result) <- c("身長", "体重") colnames(result) <- c("平均", "分散", "標準偏差") result[,1] <- mean(data) # 平均 result[,2] <- diag(var(data)) # 分散 result[,3] <- sd(data) # 標準偏差
実行して、結果(result)を表示してみると...
平均 分散 標準偏差 身長 154.75 62.25000 7.889867 体重 51.75 48.91667 6.994045
補足
分散には不偏分散と標本分散があるみたく、Rの関数 var() は不偏分散を求める関数とのこと。で、標本分散を求めるには、次のような関数をユーザで定義すればよいっぽい。
varp <- function(x) { var(x) * (length(x)-1) / length(x) }
参考

- 作者: 石村貞夫,石村光資郎
- 出版社/メーカー: 東京図書
- 発売日: 2007/02
- メディア: 単行本
- 購入: 4人 クリック: 19回
- この商品を含むブログ (8件) を見る
勉強会まとめ
朝カフェ次世代研究会
| 場所 | 株式会社いいじゃんネットオフィス |
|---|---|
| 時間 | 水曜日、6:30-8:00 |
| 値段 | 無料 |
foursqure のログの保存し方1
Google App Engine for Java 上で Twilog の foursquare 版(自分用)を OAuth 2.0 のお勉強も兼ねて作成してみることに...途中で投げ出すかも
アプリケーションの登録
- ログ保存アプリケーションのアプリケーション登録申請を行う
- 「CALLBACK URL」には、OAuth 2.0 認証時に foursquare からのコールバックを受信するサーブレットのURLを指定する
- 「CLIENT ID」と「CLIENT SECRET」を保存する
認証画面へのリダイレクト
Authentication - foursquare APIv2 の「2. Obtain an access token」を参考に認証画面へリダイレクトするサーブレットを作成
import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @SuppressWarnings("serial") public class Signin4sqServlet extends HttpServlet { private final static String CALLBACK_URL = "{CALLBACK URL}"; private final static String CLIENT_ID = "{CLIENT ID}"; public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { String url = "https://ja.foursquare.com/oauth2/authorize"; url += "?client_id=" + CLIENT_ID; url += "&response_type=code"; url += "&redirect_uri=" + CALLBACK_URL; res.sendRedirect(url); } }
HTTP GET リクエストの送信
Google App Engine for Java 上では java.net.Socket の実装がないため HttpClient が使えないっぽ、そこでHTTP GET リクエストを送信するユーティリティを作成
import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class HttpGet { private URL url_; private HttpURLConnection con_; private InputStream in_; public HttpGet(String url) throws MalformedURLException { url_ = new URL(url); } public void open() throws IOException { if(con_ != null) { return; } con_ = (HttpURLConnection) url_.openConnection(); con_.setRequestProperty("Content-type", "text/xml"); con_.setRequestMethod("GET"); con_.setConnectTimeout(60000); } public void close() throws IOException { if(in_ != null) { in_.close(); in_ = null; } if(con_ != null) { con_.disconnect(); con_ = null; } } public InputStream execute() throws IOException { this.open(); in_ = con_.getInputStream(); return in_; } }
アクセストークンの取得
Authentication - foursquare APIv2 の「2. Obtain an access token」を参考に foursquare からのコールバックを受信してアクセストークンを取得するサーブレット(アプリケーションの登録の際に「CALLBACK URL」で指定したサーブレット)を作成、JSON の解析には JSONIC を利用
import java.io.IOException; import java.util.Map; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.arnx.jsonic.JSON; @SuppressWarnings("serial") public class Callback4sqServlet extends HttpServlet { private final static String CALLBACK_URL = "{CALLBACK URL}"; private final static String CLIENT_ID = "{CLIENT ID}"; private final static String CLIENT_SECRET = "{CLIENT SECRET}"; public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { String code = req.getParameter("code"); String accessToken = _getAccessToken(code); } private String _getAccessToken(String code) throws IOException { String url = "https://ja.foursquare.com/oauth2/access_token"; url += "?client_id=" + CLIENT_ID; url += "&client_secret=" + CLIENT_SECRET; url += "&grant_type=authorization_code"; url += "&redirect_uri=" + CALLBACK_URL; url += "&code=" + code; HttpGet httpGet = new HttpGet(url); Map map = (Map)JSON.decode(httpGet.execute()); httpGet.close(); return map.get("access_token").toString(); } }