トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

SetupAnalysis2

回帰分析の例

load(file="0MGPdat.rda") 
names(MGPdat) #これは人のデータ  下記の変数
#  id         id
# n_down   その人が開発したソフト/uploadしたファイルがダウンロードされた回数
# n_file    その人が開発したソフト/uploadしたファイル数
# first_dev その人がはじめてソフト/ファイルを公開した日 
#n_post   メッセージ投稿数
#n_res0   メッセージ受信数
# first_post  その人がはじめてメッセージを投稿した日 
# handle2  ハンドル名
# id2    上のidとハンドル名をつけたもの
summary(MGPdat) #含まれる変数の記述統計

library(chron)
#日付けデータに変換
MGPdat$first_dev<-chron(MGPdat$first_dev)
MGPdat$first_post<-chron(MGPdat$first_post)
summary(MGPdat) #含まれる変数の記述統計


hist(n_post)  #だとエラー
hist(MGPdat$n_post)  #データセットに含まれる変数を使いたいときは このように $でつなぐ
hist(MGPdat$first_post)  #このプロットは何を意味するか?

attach(MGPdat) #とすると データセットを指定せず 変数名のみの指定でok
hist(n_post)  #データセットに含まれる変数を使いたいときは このように $でつなぐ
hist(first_post)  #
plot(n_post,n_res0) #散布図
text(n_post,n_res0,id2,pos=4) #ラベルをつける

max(n_post) #最大 1373
MGPdat[n_post==1373,]  #投稿数最大の人のレコードをみる
  • 作業仮説)互酬性は成立するか?
    • このデータで実証するための仮説) 返信数が多いほど、投稿数も多いか?
    • まずはプロットしてみる。
attach(MGPdat)
plot(n_post, n_res0)
#*回帰分析
res<-lm(n_post~ n_res0)
summary(res)
#結果
#Call:
#lm(formula = n_post ~ n_res0)
#Residuals:
#     Min       1Q   Median       3Q      Max 
#-331.864   -3.698    0.532    2.072  325.671 
#Coefficients:
#           Estimate Std. Error t value Pr(>|t|)    
#(Intercept)   0.1578     0.9106    0.17     0.86    
#n_res0        2.7699     0.0228  121.26   <2e-16 ***
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
#Residual standard error: 28.6 on 1065 degrees of freedom
#Multiple R-squared: 0.932,	Adjusted R-squared: 0.932 
#F-statistic: 1.47e+04 on 1 and 1065 DF,  p-value: <2e-16 
  • 練習発言回数とダウンロード回数との関係は?
    • 発言する人ほど、(目立つ,知識があると思われるので)、その人が公開したファイルのダウンロード数も多いのでは?
  • 社会ネットワーク上の位置と個人の特性を確認してみる  二つのデータをマージして処理
#いつもの発言行列
library(sna)
load(file="0Mat.rda") 
dim(Mat)
#[1] 1067 1067 と出力されたはず 1067人×1067人の行列
#グラフに描く&座標をデータセットxyに入れる
xy<-gplot(Mat)
rownames(xy)<-rownames(Mat)#行の名前をMatからコピー
xy #各点の座標
dim(xy) #当然人数分
plot(xy) # すでに座標は求めてあるので、gplotではなくplotでok
#もっとも発言している人はid2=BXA01140-VIC番目なので、その座標に赤い点をプロット
plot(xy)
points(xy[rownames(xy)=="BXA01140-VIC"],col="red",pch=19)
    • 練習 もっとも (被)ダウンロード数が多い人が社会ネットワークのどこにいるかをプロット
#出力するとわかるように座標 xyと 人のデータMGPdatのならび順は同じではない
data.frame(rownames(xy),xy,MGPdat)
#いろいろ不便なので、同じ人のデータが対応するように、マージする。
xy2<-data.frame(rownames(xy),xy) #座標データで人の名前もデータとしてひっつける。
names(xy2)<-c("id2","x","y")#変数名を指定する
xy2[1:20,]

#二つのデータセットをマージして新しくMGPdat2を作成
MGPdat2<-merge(MGPdat,xy2,by.x="id2",by.y="id2",all=T)
MGPdat2[1:20,]
summary(MGPdat2)
dim(MGPdat2)

attach(MGPdat2)
#これを使って最も発言している id2=BXA01140-VIC を赤い点でプロット
plot(x,y)	#まずはplot すでに座標は求めてあるので、gplotではなくplotでok
#該当者の座標を取り出す
xy2<-MGPdat2[id2=="BXA01140-VIC",c("x","y")]
#色はcol="red"のように指定   pch=19 とすると塗りつぶし円
points(xy2,col="red",pch=19)

#20回以上発言している人を黄色に 5回未満の人を青に
xy2<-MGPdat2[n_post>20,c("x","y")]
xy3<-MGPdat2[n_post<5,c("x","y")]
plot(x,y)	
points(xy2,col="yellow",pch=19)
points(xy3,col="blue",pch=19)

#グレイスケールにすることもできる 投稿数が多いほど濃い色に

grey関数では0-1の間で濃さを指定する  
max(n_post)	#1373
plot(x,y,col=grey(1-n_post/1373)) #数字が多いほど白くなるので 1から引いて逆転
#色の付け方の変更
hist(n_post)#このように0に集中しているので対数をとってみる
hist(log(n_post+1))
cl<-1-log(n_post+1)/log(1373+1)#それを使って色の濃さをコントロール
plot(x,y,col=grey(cl))
  • 練習
    • 同じことを ソフトウエアのダウンロード数にして行い、ダウンロード数が多い人は社会ネットワークのどの辺にいるかを考察
    • 発言数と被ダウンロード数にはどのような関係があるか?(プロットして回帰分析)
    • 被ダウンロード数と座標x、yにはどのような関係があるか?(同上)
    • MGPdat2にあるいろいろな変数について、被ダウンロード数に影響を与えそうな変数に注目し、回帰分析をして検定してみる。 (説明変数を追加するときは lm(y~x1+x2+x3) のように指定すればよい。
  • 参考 MGPdat 変数名
#  id         id
# n_down   その人が開発したソフト/uploadしたファイルがダウンロードされた回数
# n_file    その人が開発したソフト/uploadしたファイル数
# first_dev その人がはじめてソフト/ファイルを公開した日 
#n_post   メッセージ投稿数
#n_res0   メッセージ受信数
# first_post  その人がはじめてメッセージを投稿した日 
# handle2  ハンドル名
# id2    上のidとハンドル名をつけたもの