• 締切済み

統計ソフト『R』についての質問

再び質問です!!(>_<) Rで次のように入力するとエラー『以下にエラー Ops.factor(x[i, 1], y[1, j]) : 因子の水準セットが異なっています 』と出てしまいます。。 x <-read.csv("tvshukkou11.csv",header=F, sep=",") y <-read.csv("telebi.csv",header=F, sep=",") result <-array(,dim=24575) for(i in 1:24575){ for(j in 1:12621){ if (x[i,1]==y[1,j]){ sum(y[,j],na.rm=T) result[i] <-sum(y[,j],na.rm=T)-y[1,j] } } } 因子水準とか全然わからないのでさっぱりです。 よろしくおねがいします!!!

みんなの回答

noname#107252
noname#107252
回答No.1

再現できるように質問した方がいいと思いますが...。 質問について以下のような数値例であなたのプログラムを記述しましたが、エラーでませんよ。 > x [,1] [,2] [,3] [,4] [,5] [1,] 1 4 7 10 13 [2,] 2 5 8 11 14 [3,] 3 6 9 12 15 > y [,1] [,2] [1,] 1 2 [2,] 3 4 [3,] 5 6 [4,] 7 8 以下をそのまま実行してみて、もう一度、あなたが行いたいことを整理しましょう。あなたが何をしたいのか私には判りませんので、あしからず。 > x <- matrix( c( 1:15),3,5) > y <- matrix( c( 1:8),4,2,byrow=T) > result <- array( dim=c( nrow(x) ) ) > for ( i in 1:nrow(x) ) { for ( j in 1:ncol(y) ) { if ( x[i,1] == y[1,j] ) #xの1列目とyの1行目が等しいときに以下の処理を行う { sum( y[,j] ) #意味のない命令で、必要ない result[i] <- sum( y[,j] ) - y[1,j] #yのj列の合計から1行目の値を引いた値をresultに代入する cat( "x[i,1]=",x[i,1]," sum(y[,j])=", sum(y[,j])," y[1,j]=",y[1,j],"\n" ) } } } x[i,1]= 1 sum(y[,j])= 16 y[1,j]= 1 x[i,1]= 2 sum(y[,j])= 20 y[1,j]= 2 > result [1] 15 18 NA

関連するQ&A

  • 統計ソフト『R』についての質問

    はじめまして。 私は1ヶ月前から研究のため統計ソフト『R』を使ってデータ加工に取り組んでいます。 今あるアンケートデータを加工しようと次のようにプログラミングしました。 x <-read.csv("tv.csv",header=T, sep=",") y <-read.csv("television1.csv",header=T, sep=",") result <-array(,dim=4) for(i in 1:4){ for(j in 1:4){ if (x[i,1]==y[1,j]){ sum(y[,j],na.rm=T) } } } result[i] <-sum(y[,j],na.rm=T) すると以下のようなエラーが・・・ 以下にエラー if (x[i, 1] == y[1, j]) sum(y[, j], na.rm = T) : TRUE/FALSE が必要なところが欠損値です このエラーを解決しようとかなり考えていろいろ試したんですが自分の力では解決できそうにないので質問させていただきます。 よろしくお願いします!!!(>_<)

  • R言語

    R studioでロジスティック回帰と線形判別分析の実行したいんですが以下のプログラムどう編集すればいいですか? m_max<-9#最初に来る数字の最大値 k_max<-0#次に来る数字の最大値 dname<-"C:/Users/" #C:/Users fname<-"Tomcat" install.packages('randomForest') library('randomForest') df <- read.csv(paste(dname,fname,".csv", sep = ""), header=T, row.names=NULL) # ↓これが最初に来る数字の初期値 for(m in 0:m_max){ set.seed(m) ds <- df[order(runif(nrow(df))),] # ↓これが次に来る数字の初期値 for(k in 0:k_max){ #データ分解 #d <- ds[-round(1+(nrow(df)/k_max)*(k-1)):-round(nrow(df)/k_max*k),] #write.csv(d, file=paste(dname,fname,"_cv_Fit_",k-1,"_",m-1,".csv", sep = ""),row.names = FALSE) #d <- ds[round(1+(nrow(df)/k_max)*(k-1)):round(nrow(df)/k_max*k),] #write.csv(d, file=paste(dname,fname,"_cv_Tst_",k-1,"_",m-1,".csv", sep = ""),row.names = FALSE) #Tomcat_cv_Fit_0_0 #分解データを表示 fit_name<-paste("C:/Users/","Tomcat_cv_Fit_",m,"_",k,".csv",sep="") fit.df<-read.csv(fit_name) test_name<-paste("C:/Users/","Tomcat_cv_Tst_",m,"_",k,".csv",sep="") test.df<-read.csv(test_name) #データ結合 D0 <- read.csv(paste("C:/Users/","Tomcat_cv_Fit_0_0.csv",sep="")) D1 <- read.csv(paste("C:/Users/","Tomcat_cv_Fit_1_0.csv",sep="")) D2 <- read.csv(paste("C:/Users/","Tomcat_cv_Fit_2_0.csv",sep="")) D3 <- read.csv(paste("C:/Users/","Tomcat_cv_Fit_3_0.csv",sep="")) #重回帰 result1=lm(bug~.,data=fit.df) #↓結果についてステップ関数 step.lm<-step(result1) #結果 summary(result1) #テストデータの予測 pred.lm<- predict(step.lm,test.df) #精度 #数値が低いほど信用度は高い #extractAIC(result1) #テストデータの予測 #p1 #index P1 <- predict(step.lm,test.df) #上のグラフ 縦横の名称があってるかは不明 (x,y)でxが横 これでいえばP1、yが縦 indexがテストデータ数 plot(P1)#点グラフ par(new=T)#重ね合わせ plot(P1,type="l")#折れ線 #------------------------------------------------------------------------------------ #ランダム森 result2=randomForest(formula=bug~.,data=fit.df) #result2=randomForest(formula=bug~.,data=fit.df,method="regression") #表示 summary(result2) #テストデータの予測 pred.rf<- predict(result2,test.df) #テストデータの予測 P2 <- predict(result2,test.df) #上のグラフ plot(P2) par(new=T) plot(P2,type="l") #----------------------------------------------------------------------------------- #ファイルにデータ出力 #FIT変数にfit.df+test.dfしたものを代入 FIT <- rbind(data.frame(fit.df),data.frame(test.df)) #↓アウトプット テキスト write.table(FIT,file="C:/Users/FIT.txt") #↓アウトプット csv write.table(FIT,file="C:/Users/FITcsv.csv") loc <- FIT$loc write.table(loc,file="C:/Users/LOC.txt") write.table(loc,file="C:/Users/LOCcsv.csv") bug <- FIT$bug write.table(bug,file="C:/Users/BUG.txt") write.table(bug,file="C:/Users/BUGcsv.csv") #---------------------------------------------------------------------------------------- sum_loc <- function(n) { if (n <= 1) return(1) else return( n * Recall(n-1) ) } sum_loc(10) #---------------------------------------------------------------------------------- if(m==0||k==0){ result_summary.df<-cbind(cbind(test.df,pred.lm),pred.rf) }else{ result_summary.df<-rbind(result_summary.df,cbind(cbind(test.df,pred.lm),pred.rf)) } } } write.csv(result_summary.df,paste(dname,"result_summary.csv",sep=""))

  • 統計ソフトRの重回帰分析で困ってます。

    自身の前後で地価の説明変数の影響がどう変化したかなという興味の元統計を勉強し始めました、最近。それでRにてlm()で重回帰分析してsummary()をしようとしています。 その途中でけっつまづいたので助けてください! aが被説明変数でb1,b2が説明変数として yy<-read.csv("tes.csv") a<-yy[,1] b1<-yy[,2] b2<-yy[,3] b3<-yy[,4] y<-data.frame(a,b1,b2,b3) y.lm<-lm(a~.,data=y) 『summary(y.lm)最終的にはこれをやりたいのだがlm()のとこで』 以下にエラー lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 因子保管モードを変更するのは不正です 追加情報: 警告メッセージ: In model.response(mf, "numeric") : 因子応答を持つ type="numeric" の使用は無視されるでしょう とかえされるんですがなにがいけないんですかね ? a <- c(148, 160, 159, 153, 151, 140, 158, 137, 149, 160) b1 <- c(41, 49, 45, 43, 42, 29, 49, 31, 47, 47) b2 <- c(41, 159, 153, 151, 140, 31, 47, 47, 47, 47) b3 <- c(41, 159, 153, 151, 140, 31, 47, 47, 47, 47) y.lm<-lm(a~.,data=y) summary(y.lm) これはいけるんですがね。ちなみにcsvのなかは後者のような文字列があるのですが... 助けてください! それ以外にもRで壁にあたった時自分で対処できるようになれそうなサイトorぐぐり方も指南していただけると今後が幸いです。

  • Fortranのエラー

    お世話になります。 Fortran初心者です。 いまFortranでcsvファイルからデータを読みこむといったプログラムを作成しようと思っております。 まず、行いたいことは、複数のcsvファイル(0001.csv→0004.csvなど)のデータをプログラムに読込ませたいのですがうまくいきません。 0001.csvや0002.csvとしたいのに、INNAME.csvとなってしまいます。 なので、次に0001.csvだけを指定してたのですが下のデータを全く読み込んでくれません。 ちなみに0001.csvは、このようなデータです。 0,0,-107.75939 ,-85.57285 ,0.00000 ,0.00000 ,0.00000 ,0.00000 1,0,-105.54305 ,-85.56864 ,0.00000 ,0.00000 ,0.00000 ,0.00000 2,0,-103.32661 ,-85.56443 ,0.00000 ,0.00000 ,0.00000 ,0.00000 3,0,-101.11009 ,-85.56022 ,0.00000 ,0.00000 ,0.00000 ,0.00000 - 7325,0,106.16862 ,80.19408 ,0.00000 ,0.00000 ,0.00000 ,0.00000 エラーの部分としては、 READ(j,*) x,y,xmm,ymm,U,V,W,Length であり、エラーが出て、ファイルを読んでくれません。  エラーは Invalid character in fieldと出て、readする書式が違うのかと 自分なりに原因を探し変更してみたのですがわかりませんでした。 みなさまお忙しいところ本当にすみません。 初心者なのでどこかつまづいているかもしれないのですが、それがわかりません。 ご教授頂けたら幸いです。 よろしくお願い致します。 プログラム全体だと長いので 以下がプログラムのはじめから途中までの中身です。 PROGRAM MAIN Implicit None INTEGER i,j,k,sample,x,y CHARACTER*4 INNAME       REAL xmm,ymm,U,V,W,Length DIMENSION x(7326),y(7326),xmm(7326),ymm(7326) & ,U(7326),V(7326),W(7326),Length(7326) i=1 j=1 x=0 y=0 WRITE(INNAME,'(I4.4)') j WRITE(*,*) INNAME !!変数INNAMEに返す値は0001です。 OPEN(j, file='0001.csv') !!'//INNAME//.csv'だとINNAME.csvに。0001.csv,0002.csvにしたい。 c !-- read data sample=7326 DO k=i,sample READ(j,*) x,y,xmm,ymm,U,V,W,Length !!READがうまくいかない。Invalid character in fieldのエラー ENDDO

  • 統計学

    どうしても分からないので教えて欲しいと思います。 問題は、 「離散型確率変数X,Yの分布はP(X=xi)=pi(i=1,2)   P(Y=yi)=qi(i=1,2)である。(1)P(X=xi,Y=yj)=rij(i,j=1,2)とするとき、 ri1+ri2=pi(i=1,2) r1j+r2j=qj (j=1,2) が成立することを示せ。」です。 再提出となった自分のレポートは、  まず、x1とx2の確率(p1, p2とする)の合計が1になる表と、同様にy1とy2の確率(q1,q2とする)の合計が1となる表をかきました。  次に、iとjの組み合わせについて、(xi, yi)とrijとの対応する表をかき、 r11+r12=p1 ((1)とする) r21+r22=p2 ((2)とする) r11+r21=q1 ((3)とする) r12+r22=q2 ((4)とする)を導き、 (1)、(2)より、ri1+ri2=pi (i=1,2) (3)、(4)より、r1j+r2j=qj (j=1,2) したがって、ri1+ri2=pi (i=1,2) r1j+r2j=qj (j=1,2) が示せた。 と書いて出した所、 「文中の表は(ⅰ)P(X=xi,Y=y1)+P(X=xi,Y=y2)=pi(i=1,2) (ⅱ)P(X=x1,Y=yj)+P(X=x2,Y=yj)=qj (j=1,2) が成立することを前提にして作った表です。(ⅰ)、(ⅱ)の等式の成立を証明して下さい。」   と書かれて再提出でした。(ⅰ)、(ⅱ)の等式の成立の証明なんですが、いくら考えても出来ません。どなたかアドバイスお願いします。

  • 統計解析ソフトRの入力 head(d1)について

    R超初心者です。大学の授業で出された課題で苦戦しています、どなたか救いの手をお願い致します。。。 平均値の検定t検定のコンソール出力をするために、プリントの指定通りにsetwdを入力、1行目に変数名があるCSV形式のファイルを読んで最初の数行を表示する指示のd1 <-read.table("平均値の検定_データ.csv",header=TRUE, sep=",")と入力し、いざhead(d1)と入力しても、エラー「オブジェクトd1がありません」と出ます。わからなすぎて泣きそうです。 まず、d1 の1は、数字ですか?ローマ字Lの小文字ですか? 以後のプログラムも見事に対応しません。 データは、最初の指定箇所setwdにエクセルに打ち込んだ数値をセットしているだけですが、csv形式のデータも必要なのでしょうか? 本当に初心者すぎて申し訳ない質問なのですが、お答えいただけますと救世主に遭った思いでございます。 どうぞよろしくお願い致します!!!

  • どうしても解けないので統計学教えてください

    干し草の収穫(kg/10a)と使用した灌漑の給水量(10cc)の関係を調べたところ、以下のようになった。 i ,単収(Yi),気温(Xi),Y^i,u^i,u^2i,Y-Y ̄,(Y-Y ̄)2,X-X ̄,(X-X ̄)2 1 , 1317 200 2 , 1420 300 3 , 1562 400 4 , 1803 500 5 , 2005 600 6 , 2178 700 7 , 2105 800 合計,12390 3500 (1)干し草の収量をY、給水量をXとおいて、回帰式を推定せよ (2)給水量が、450ccのときに、予想される単収を求めよ (3)この回帰式の決定係数を求めよ (4)回帰係数βとαの有意性を5%有意水準で検定せよ (注)Y^2などの^は予測値で、2は二乗です。Y ̄の ̄は平均(バー)です。 見にくくてすみません よろしくお願いします。

  • C++でオセロのCPUの処理を考えたのですが、40手目あたりからうまく

    C++でオセロのCPUの処理を考えたのですが、40手目あたりからうまくいきません。ReverseOthello関数の石を探して裏返す処理がおかしいと思われます。一番裏返せる石が多い位置を裏返すという処理をしています。プログラミング経験が豊富な方よろしくお願いします。 #include "stdafx.h" bool Othello(int (*pBoard)[8] ){ int i; int j; int ans; int k = 0; int num[3] = {0,0,0}; int sum[28][3]; i = 0; while(i < 28){ j = 0; while(j < 3){ sum[i][j] = 0; j++; } i++; } i = 0; while(i < 8){ j= 0; while(j < 8){ if(pBoard[i][j] == 0){ ans = SeachStone(i,j,pBoard); if(ans != 0){ sum[k][0] = i; sum[k][1] = j; sum[k][2] = ans; k++; } } j++; } i++; } i = 0; while(i < 28){ if(num[2] < sum[i][2]){ num[0] = sum[i][0]; num[1] = sum[i][1]; num[2] = sum[i][2]; } i++; } if(num[2] == 0){ return false; } ReverseStone(num[0],num[1],pBoard); return true; } void ReverseStone(int y1,int x1,int (*pBoard)[8]){ int cnt = 0; int y2; int x2; int i; int j; int k; if(y1 == 0){ i = 0; } else { i = y1-1; } while(i < y1 + 2){ if(x1 == 0){ j = 0; } else { j = x1-1; } while(j < x1 + 2){ y2 = i; x2 = j; cnt = 0; while(pBoard[y2][x2] == -1){ y2 = y2 + (i - y1); x2 = x2 + (j - x1); cnt++; } if(pBoard[y2][x2] == 1&& cnt != 0){ k = 0; while(k < cnt + 1){ y2 = y2 + (y1 - i); x2 = x2 + (x1 - j); pBoard[y2][x2] = 1; printf("%d\n",pBoard[y2][x2]); k++; } } j++; } i++; } } int SeachStone(int y1,int x1,int (*pBoard)[8]){ int cnt = 0; int sumCnt = 0; int y2; int x2; int i; int j; if(y1 == 0){ i = 0; } else { i = y1-1; } while(i < y1 + 2){ if(x1 == 0){ j = 0; } else { j = x1-1; } while(j < x1 + 2){ y2 = i; x2 = j; cnt = 0; while(pBoard[y2][x2] == -1){ y2 = y2 + (i - y1); x2 = x2 + (j - x1); cnt++; } if(pBoard[y2][x2] == 1&& cnt != 0){ sumCnt = sumCnt + cnt; } j++; } i++; } return sumCnt; }

  • 統計ソフトRでts(...)を使用すると数字が変わる。

    統計ソフトRでts(...)を使用すると数字が変わる。 こんにちは。 統計ソフトRの初心者です。 http://www23.atwiki.jp/rfaq/pages/13.html で示すようにある官庁からのCSVファイルをDLして数字を読み込ませてts(...)を使うと数字自体が変わってしまいます。 具体的にはhttp://www.mof.go.jp/bpoffice/bpdata/sbp/s-1/s-1-4.csv にあるファイルをDLして"mof"で保存。 Rでファイルを読み込み以下を実行しています。 (リンク切れの場合にはhttp://www23.atwiki.jp/rfaq/pages/13.htmlをご参照ください。) ----<ここから> mof <- read.table("mof.csv",sep=",",skip=27)#ファイルの読み込み x1 <- mof[,5] x2 <- mof[,13] x3 <- mof[,16] x4 <- mof[,17] t1 <- ts(x1, start=c(1996,1),frequency=12) #「A」 t2 <- ts(x2, start=c(1996,1),frequency=12) t3 <- ts(x3, start=c(1996,1),frequency=12) t4 <- ts(x4, start=c(1996,1),frequency=12) ----<ここまで> 自分の理解では「A」を実施すればx1のデータを1996年1月からの月次データに読み替えるだけだと思っています。 ところがt1を実行するとx1とはまったく異なる数字が出てきます。 余計な部分を削って数字だけのファイルにしても上と同じことが起きます。 他のデータ(たとえば気象庁のHPにある気温などの月次データ)で同じことをしても特にそういったことがないのですがどうしてこのようなことがおきるのでしょうか? 特に急いでいるわけではないのですがご存知の方がいらっしゃいましたらご教授いただければ幸いです。

  • FORTRANのプログラムについて

    program dat real x(100), y(100) s2=0 read(*,*) m,h open(7,file='test2.txt') do i=1,m read(7,*,end=200) x(i),y(i) s1=h/2*(y(1)+y(m)) s2=s2+h*(y(i)) s3=h*y(1) end do 200 close(7) sum=s1+s2-s3 write(*,*) 'sum=',sum end 台形公式を求めるプログラムを書いています。 テキスト形式でまずデータを取り込みます。 刻み幅はhです。ただしデータ数は未知数です。 上のようにプログラムを書いたのですが、うまく働きません。どうすればよろしいでしょうか? ご教授お願いします