model.selection.R

総当りで的中率が高いモデルを探してくるとか、いかにもやっちゃいけないことをやっている。とりあえずこれでよさそうなモデルとかに当たりを付けるということをやってる。

twitter <- read.csv("/home/yasuhisa/twitter.txt",header=FALSE)
source("/home/yasuhisa/twitter.R")
head(twitter)
twitter <-twitter[!apply(apply(twitter[-1],1,is.na),2,any),]

attach(twitter)
per<-following/followers

apply(twitter[-1],2,length)
apply(twitter[-1],2,summary)

is_otaku <- ifelse(is_otaku + is_otaku_in_blog + is_blog_in_bio> 0,1,0)
is_blog <- ifelse(is_blog_in_bio + is_blog_in_web > 0,1,0)
is_students <- ifelse(is_students + is_students_in_blog > 0,1,0)
is_program <- ifelse(is_program + is_program_in_blog > 0,1,0)
is_otaku_by_bayes <- ifelse(is_otaku_in_bio_by_bayes +is_otaku_in_entry_by_bayes > 0,1,0)

reg <- c()
for(i in 2:length(grid[,1])){
  reg[i-1] <- list(twit[grid[i,]==1])
}

max = 0
max_reg = ""
for(i in 1:length(reg)){
  reg_string <- ""
  for(j in 1:length(reg[[i]])){
    if(j ==1){
      reg_string <- paste(reg_string,reg[[i]][j],sep="")
      #モデルの説明変数が1個の時を忘れてしまっている
      #ここにif(j==length(reg[[i]]))を入れて計算させないと全部の式はでない
    }else if(j==length(reg[[i]])){
      reg_string <- paste(reg_string," + ",reg[[i]][j],sep="")
      reg_string <- paste("Tooth.glm<-glm(is_follow~",reg_string,", family=binomial)",sep="")
      eval(parse(text=reg_string))
#      print(eval(parse(text=paste("summary(",reg_string,")",sep=""))))
      予測値<-fitted(Tooth.glm)
      予測値1<-round(予測値)
#      print(table(is_follow,予測値1))
      table <- table(is_follow,予測値1)
      if(!is.na(((table[1]+table[4])/sum(table(is_follow,予測値1))))){
        if(((table[1]+table[4])/sum(table(is_follow,予測値1))) > 0.73){
          print(reg_string)
          fitted(Tooth.glm)[1:10]
          print((table[1]+table[4])/sum(table(is_follow,予測値1)))
          if(((table[1]+table[4])/sum(table(is_follow,予測値1))) > max){
            max <- ((table[1]+table[4])/sum(table(is_follow,予測値1)))
            max_reg <- reg_string
          }
        }
      }
    }else{
      reg_string <- paste(reg_string," + ",reg[[i]][j],sep="")
    }
  }
}

print(max)
print(max_reg)
print(eval(parse(text=paste("summary(",reg_string,")",sep=""))))
system("ruby /home/yasuhisa/alert4twitter.rb")

Tooth.glm<-glm(is_follow~ favorites + update + per + entry_size + is_otaku + is_students + is_program + is_friend, family=binomial)

#summary(Tooth.glm)

予測値<-fitted(Tooth.glm)
予測値1<-round(予測値)
table <- table(is_follow,予測値1)
(table[1]+table[4])/sum(table(is_follow,予測値1))