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=""))
補足
早速ありがとうございます! 1)データについて データそのものは既存CSVファイル入手して処理していたものです。この既存CSVの場合、エラーが出るようです。 私もゼロからdfを作成すると何故かエラーがは出ませんでした。 既存CSVから余計な列を全て削除(date列だけ残し、youbi列を追加)すると、不思議とエラーが出ませんでした。(下記のケースBです。) 再度、CSVファイルの不要行の削除増やしながら、 再現状況を確認しました。結果以下の通りです。 <ケースA> 1列目 date (既存CSVにあり) 2列目 time_code(既存CSVにあり) 3列目 youbi (追加) という2列目があるとエラーが出ます。 <ケースB> 1列目 date (既存CSVにあり) 2列目 youbi (追加) というであればエラー出ません。 非常に不思議なのです。 画面キャプチャを貼り付けたかったのですが、Okwaveには機能がないようなので、上記のわかりにくくて説明ですみません。 2).locについて 上記の1)の問題が残っていても、教えいただいたコマンドでうまくいきました。 今更ですが、私の間違った動かないコマンドは以下のと通りです。 [誤り、私の例] df.loc['youbi'][0] = datetime.datetime.strptime((df.loc['date'][0]), '%Y/%m/%d').weekday() [正しい、教えていただいたもの] df.loc[0, 'youbi'] = datetime.datetime.strptime((df['date'][0]), '%Y/%m/%d').weekday() すみません、見比べると私がlocの使い方が悪いようです。 とりあえず、2)の方法で対応できそうです。 本当にありがとうございました。