如何用r语言进行神经网络统计分析

Python022

如何用r语言进行神经网络统计分析,第1张

library(nnet)

source <- c(10930,10318,10595,10972,7706,6756,9092,10551,9722,10913,11151,8186,6422,

6337,11649,11652,10310,12043,7937,6476,9662,9570,9981,9331,9449,6773,6304,9355,10477,

10148,10395,11261,8713,7299,10424,10795,11069,11602,11427,9095,7707,10767,12136,12812,

12006,12528,10329,7818,11719,11683,12603,11495,13670,11337,10232,13261,13230,15535,

16837,19598,14823,11622,19391,18177,19994,14723,15694,13248,9543,12872,13101,15053,

12619,13749,10228,9725,14729,12518,14564,15085,14722,11999,9390,13481,14795,15845,

15271,14686,11054,10395,14775,14618,16029,15231,14246,12095,10473,15323,15381,14947)

srcLen<-length(source)

for(i in 1:10){ #预测最后十个数;

real <- source[srcLen-i+1] #实际值

xNum=(srcLen-i+1)%/%7 #组数

yNum=7 #每组7个数

data<-array(1:(xNum*yNum),c(xNum,yNum))

pre=srcLen-i+1

for(x in 1:xNum){ #数组赋值

for(y in 1:yNum){

data[x,y]=source[pre]

pre=pre-1

}

if(pre<7){

break

}

}

ascData<-array(1:(xNum*yNum),c(xNum,yNum)) #数组逆序

for(x in 1:xNum){

for(y in 1:yNum){

ascData[x,y]=data[xNum-x+1,y]

}

}

colnames(ascData) <- c("a","b","c","d","e","f","g") #每列列名

trainData<-data.frame(scale(ascData[,c(1:7)]))

nn<-nnet(a~b+c+d+e+f+g,trainData[1:(xNum-1),],size=10,decay=0.01,maxit=1000,linout=F,trace=F)

predict<-predict(nn,trainData[xNum,])

predict=predict*sd(ascData[,1])+mean(ascData[,1])

percent <- (predict-real)*100/real

res <- paste("预测值:",predict,"实际值:",real,"误差:",percent)

print(res)

}

R语言基本数据分析

本文基于R语言进行基本数据统计分析,包括基本作图,线性拟合,逻辑回归,bootstrap采样和Anova方差分析的实现及应用。

不多说,直接上代码,代码中有注释。

1. 基本作图(盒图,qq图)

#basic plot

boxplot(x)

qqplot(x,y)

2. 线性拟合

#linear regression

n = 10

x1 = rnorm(n)#variable 1

x2 = rnorm(n)#variable 2

y = rnorm(n)*3

mod = lm(y~x1+x2)

model.matrix(mod) #erect the matrix of mod

plot(mod) #plot residual and fitted of the solution, Q-Q plot and cook distance

summary(mod) #get the statistic information of the model

hatvalues(mod) #very important, for abnormal sample detection

3. 逻辑回归

#logistic regression

x <- c(0, 1, 2, 3, 4, 5)

y <- c(0, 9, 21, 47, 60, 63) # the number of successes

n <- 70 #the number of trails

z <- n - y #the number of failures

b <- cbind(y, z) # column bind

fitx <- glm(b~x,family = binomial) # a particular type of generalized linear model

print(fitx)

plot(x,y,xlim=c(0,5),ylim=c(0,65)) #plot the points (x,y)

beta0 <- fitx$coef[1]

beta1 <- fitx$coef[2]

fn <- function(x) n*exp(beta0+beta1*x)/(1+exp(beta0+beta1*x))

par(new=T)

curve(fn,0,5,ylim=c(0,60)) # plot the logistic regression curve

3. Bootstrap采样

# bootstrap

# Application: 随机采样,获取最大eigenvalue占所有eigenvalue和之比,并画图显示distribution

dat = matrix(rnorm(100*5),100,5)

no.samples = 200 #sample 200 times

# theta = matrix(rep(0,no.samples*5),no.samples,5)

theta =rep(0,no.samples*5)

for (i in 1:no.samples)

{

j = sample(1:100,100,replace = TRUE)#get 100 samples each time

datrnd = dat[j,]#select one row each time

lambda = princomp(datrnd)$sdev^2#get eigenvalues

# theta[i,] = lambda

theta[i] = lambda[1]/sum(lambda)#plot the ratio of the biggest eigenvalue

}

# hist(theta[1,]) #plot the histogram of the first(biggest) eigenvalue

hist(theta)#plot the percentage distribution of the biggest eigenvalue

sd(theta)#standard deviation of theta

#上面注释掉的语句,可以全部去掉注释并将其下一条语句注释掉,完成画最大eigenvalue分布的功能

4. ANOVA方差分析

#Application:判断一个自变量是否有影响 (假设我们喂3种维他命给3头猪,想看喂维他命有没有用)

#

y = rnorm(9)#weight gain by pig(Yij, i is the treatment, j is the pig_id), 一般由用户自行输入

#y = matrix(c(1,10,1,2,10,2,1,9,1),9,1)

Treatment <- factor(c(1,2,3,1,2,3,1,2,3)) #each {1,2,3} is a group

mod = lm(y~Treatment) #linear regression

print(anova(mod))

#解释:Df(degree of freedom)

#Sum Sq: deviance (within groups, and residuals) 总偏差和

# Mean Sq: variance (within groups, and residuals) 平均方差和

# compare the contribution given by Treatment and Residual

#F value: Mean Sq(Treatment)/Mean Sq(Residuals)

#Pr(>F): p-value. 根据p-value决定是否接受Hypothesis H0:多个样本总体均数相等(检验水准为0.05)

qqnorm(mod$residual) #plot the residual approximated by mod

#如果qqnorm of residual像一条直线,说明residual符合正态分布,也就是说Treatment带来的contribution很小,也就是说Treatment无法带来收益(多喂维他命少喂维他命没区别)

如下面两图分别是

(左)用 y = matrix(c(1,10,1,2,10,2,1,9,1),9,1)和

(右)y = rnorm(9)

的结果。可见如果给定猪吃维他命2后体重特别突出的数据结果后,qq图种residual不在是一条直线,换句话说residual不再符合正态分布,i.e., 维他命对猪的体重有影响。

r语言数据分析是查看数据的结构、类型,数据处理。根据查询相关资料信息显示:R语言是一个开源、跨平台的科学计算和统计分析软件包,具有丰富多样、强大的的统计功能和数据分析功能,数据可视化可以绘制直方图、箱型图、小提琴图等展示分数的分布情况可以通过散点图和线性拟合来展示分数和年龄之间的关系。