前回作ったモジュール(read_FirstSnowFuji)で初冠雪日を読み、年初からの日にち(1月1日を1とする)に変換したうえで、線形回帰を当てはめてみる。
以前やったように、rpy2を用いて、Rにデータを渡してやる。
import numpy as np import matplotlib.pyplot as plt import scikits.timeseries as ts #module from read_FirstSnowFuji import * #for R import rpy2.robjects as robjects ayear,amonth,aday= read_FirstSnowFuji() days=np.array([],dtype="i4") for n in range(ayear.size): td=ts.Date("D",year=ayear[n],month=amonth[n],day=aday[n]) days=np.append(days,td.day_of_year) #for R ryear=robjects.FloatVector(ayear) rdays=robjects.FloatVector(days) robjects.globalEnv["ryear"] = ryear robjects.globalEnv["rdays"] = rdays r=robjects.r scripts=""" png('FujiSnow_trend.png') plot(ryear,rdays,xlab="Year",ylab="Day of year") # scatter plot fm<-lm(rdays ~ ryear) # linear model abline(fm) # plot regression line dev.off() """ r(scripts) summary=r('sm<-summary(fm)') print summary出力(print summary)は
Call:
lm(formula = rdays ~ ryear)
Residuals:
Min 1Q Median 3Q Max
-54.2679 -5.8555 0.9491 8.1001 27.3063
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 138.25153 71.89542 1.923 0.0570 .
ryear 0.06873 0.03683 1.866 0.0645 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 13.45 on 115 degrees of freedom
Multiple R-squared: 0.0294, Adjusted R-squared: 0.02096
F-statistic: 3.484 on 1 and 115 DF, p-value: 0.06453
lm(formula = rdays ~ ryear)
Residuals:
Min 1Q Median 3Q Max
-54.2679 -5.8555 0.9491 8.1001 27.3063
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 138.25153 71.89542 1.923 0.0570 .
ryear 0.06873 0.03683 1.866 0.0645 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 13.45 on 115 degrees of freedom
Multiple R-squared: 0.0294, Adjusted R-squared: 0.02096
F-statistic: 3.484 on 1 and 115 DF, p-value: 0.06453
係数が0.06873/yearだから、100年に一週間ほどのトレンド(初冠雪日が遅くなる)となる。ただし、p値が約0.0645であるから危険率5%でトレンドがない可能性を否定できない。データのばらつきが大きいことから、さもありなんといったところである。
0 件のコメント:
コメントを投稿