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

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

新規登録して質問してみよう
ただいま回答率
85.46%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

R

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

Q&A

解決済

1回答

1277閲覧

R初心者です。正準相関分析を行いたいです。

sakasak

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

R

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

0グッド

0クリップ

投稿2021/10/12 02:16

前提・実現したいこと

正準相関分析を行いたいです。かなり初歩的なミスだとおもいますが、どうぞよろしくお願いします。
2パターンあります。

発生している問題・エラーメッセージ

パターン1 colMeans(x, ) でエラー: 'x' は数値でなければなりません パターン2 colMeans(x, ) でエラー: 'x' は数値でなければなりません そもそも豊潤化の段階で上記エラーが発生してしまいます。

該当のソースコード

R

1#パターン1 2datan<-read.csv("nyuryoku.csv",header=TRUE,sep=",") 3pop<-datan[,2:9] 4oec<-datan[,-(2:9)] 5cancor(pop,oec,xcenter = TRUE, ycenter = TRUE) 6 7#パターン2 8datan<-read.csv("nyuryoku.csv",header=TRUE,sep=",") 9datan.std<-scale(datan[2:11]) 10 11datan1<-datan.std[,2:9] 12datan2<-datan.std[,10:11] 13 14R11<-cor(datan1) 15R22<-cor(datan2) 16R12<c(cor(datan1[,1],datan2[,1]),cor(datan1[,2],datan2[,2]),cor(datan1[,2],datan2[,1]),cor(datan1[,2],datan2[,2]) 17 18R12<-matrix(R12,ncol=2,byrow=T) 19R21<-t(R12) 20 21E1<-solve(R11)%*%R12%solve(R22)%*%R21 22E1<-solve(R22)%*%R21%solve(R11)%*%R12 23 24 25

補足情報(FW/ツールのバージョンなど)

読み込んでいるCSVデータは2行目から9行目まで、10行目から12行目で分かれています。
パターン1はネットで調べた情報に基づき、作成したものです。
パターン2は参考書での情報に基づき、作成したものです。

またパターン2は参考書内のデータでは2変数、2変数で分かれたものに対応しているコードです。(自分の力では7変数、3変数に分かれている自分のデータに対応できませんでした。)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

とりあえずエラーが出た直後にtraceback()を実行して、コードのどこを実行しようとしてエラーが発生したのかを特定しましょう。

それから、

読み込んでいるCSVデータは2行目から9行目まで、10行目から12行目で分かれています。

とありますが、コードを見るとCSVデータを行ではなく列で分割しようとしています。どちらが正しいのでしょうか。

投稿2021/10/12 04:35

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakasak

2021/10/12 07:59

ご回答ありがとうございます。 > traceback() 2: colMeans(x, ) 1: cancor(pop, oec, xcenter = TRUE, ycenter = TRUE) 上記の箇所が間違えていると出ておりました。 >コードを見るとCSVデータを行ではなく列で分割しようとしています。どちらが正しいのでしょうか。 こちらは私のミスです。自身のCSVデータは行でなく、列での分割です。
KojiDoi

2021/10/12 08:40

であれば次にやるべきことはオブジェクトの中身の確認です。 cancor()の第1,第2パラメータは > x numeric matrix (n * p1), containing the x coordinates. > y numeric matrix (n * p2), containing the y coordinates. しかるに「数値でなければならない(のに違うよ)」というエラーが出ており、読み込んだデータの中に数値でないものが紛れ込んでいるのでしょう。 str(pop); str(oec)でオブジェクトの中身は確認できます。そのうえで、入力ファイルの内容を見直してみることです。
sakasak

2021/10/15 03:52

> str(pop) 'data.frame': 47 obs. of 8 variables: $ みそ : num 5707 6499 7159 5764 8112 ... $ 食塩 : num 1696 2741 1322 1560 2031 ... $ マーガリン: num 631 885 849 699 631 607 575 682 811 637 ... $ ウイスキー: num 2767 2826 1254 1998 1996 ... $ ビール.L. : num 27.9 24 24.6 20.2 25.3 20.4 19.7 17.4 17.4 17.9 ... $ 焼酎.ml. : num 10048 12427 9211 6586 11065 ... $ 清酒 : chr "7391.0 " "8089.0 " "7637.0 " "9594.0 " ... $ 男性喫煙率: num 31.7 34.4 34.8 33.3 33.9 30.3 33.8 30.9 30.7 30.5 ... > str(oec) 'data.frame': 47 obs. of 4 variables: $ 都道府県名: chr "北海道" "青森" "岩手" "宮城" ... $ 大腸 : num 0.0747 0.0538 0.0657 0.0799 0.062 ... $ 食道 : num 0.215 0.157 0.184 0.208 0.144 ... $ 胃 : num 0.0942 0.0718 0.0873 0.0926 0.0575 ... > 上記のように返ってきました。 こちらのstr関数自体初めてで結果のみかたがわからないのですが、str(oec)部分のnumではなくchr部分がいわゆる数値になっていないという指摘でしょうか??
sakasak

2021/10/15 03:56

ちなみにcsvファイルは 都道府県名 みそ 食塩 マーガリン・・・・胃ガン 北海道   5705 1696 631   ・。・・0.0942 のようになっており、48行12列になっております。
KojiDoi

2021/10/15 06:29

「清酒」のデータが数値になっていませんね。そして末尾に不自然なスペースが入っています。全角スペースか何かが入っているのでは? 元のファイルの内容におそらく問題があると思います。 strの見方はマニュアルを読んで勉強してください。
sakasak

2021/10/15 15:23

遅くに失礼いたします。 清酒のデータに1つだけ数値ではなく、通貨設定になっているデータがのこっていました。 そこを直したところうまく作動しました。 丁寧にありがとうございました。また機会がありましたらお願いいたします。 ベストアンサーにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問