植物人分享 http://blog.sciencenet.cn/u/maolingfeng 中国科学院植物研究所

博文

R语言学习笔记(三)

已有 24547 次阅读 2011-4-2 20:03 |个人分类:R语言学习笔记|系统分类:科研笔记| 函数, 回归, 科研笔记, R语言编程, 遥感计算

                (联系方式:maolf小老鼠ibcas.ac.cn或者maolingfeng2008小老鼠163.com
3.22统计和作图(statistics and graphic)
   1quantile(x)函数为四等分点的边界数值
   也可自己设置等分点,如
   quantile(x,seq(0,1,0.1)),为十分
   2、对于缺损值的处理,一定要加入,na.rm=T的参数设定
   mean(vetor1,na.rm=T)
     [1] 340.168
   3对于一个向量的基本统计如中值,最大最小,平均值,可以用summary()
   4直方图hist(x,breaks=a)其中a可以<-c(0,1,4,20)枚举一些向量值
   n <- length(x)
    plot(sort(x),(1:n)/n,type="s",ylim=c(0,1))
 5、Q-Q plot 函数形式qqnorm(x)
  
 6、对于箱式图boxplot
  case:
 data(IgM)
     par(mfrow=c(1,2))
boxplot(IgM)
boxplot(log(IgM))
par(mfrow=c(1,1)) 
d对于两个向量的比较
a<-rnorm(50)
   b<-rnorm(50)
   boxplot(a,b)
7hist(expend.lean,breaks=10,xlim=c(5,13),ylim=c(0,4),col="white")
###其中break代表的是分的group的组数,
 8、一个矩阵的产生,并且赋予其行列名字
  a<-rnorm(24)
  caff.marital<-matrix(a,nrow=4,byrow=T)##按行排列
  caff.marital
  colnames(caff.marital)<-c(1:6)
  rownames(caff.marital)<-LETTERS[1:4]###字母的顺序为大写LETTERS[1:8]格式
  caff.marital
  ##其中的rownames和colnames可以进行括号内双引号枚举
  9、柱状图利用的函数是barplot,其中针对的是默认按照列来计算的,如果是行数据,怎进行t转置
     beside=T
  barplot(prop.table(t(caff.marital),2), legend.text=colnames(caff.marital),col="white", beside=T)
  ##R语言将无法寻找到空白的位置放legend的内容,会覆盖其中的一个向量,因此,需要用函数locator(),见后面
   10、对于t检验可以两个函数形式t.test()和wilcox.test,其中wilcoxon test在有些地方叫做Mann-Whitney test
   t test是假定为数据时从正态分布的里面出来的。
    t检验可以个出95%置信区间的具体数值,t.test(x,conf.level=0.99,mu=34),mu中给出想要检测的值,缺省值mu=0
 conf.level=0.99为给定具体的置信区间。
 11、两组数据的显著性t检验,
  t.test(expend~stature)###里面包含了种不同的数值obese和lean两种类型,
 > energy
expend stature
1 9.21 obese
2 7.53 lean
3 7.48 lean
...
20 7.58 lean
21 9.19 obese
22 8.11 lean
例子:case
expend <- c(rnorm(10))
stature<- c("obese","lean","obese","lean","obese","lean","obese","lean","obese","lean")
d <- data.frame(expend,stature)
t.test(expend~stature)
11、两组数据变化var.test(expend ~ stature),t.test(vetor1~ vetor2,paired = T)
12对于两组数据回归并且做回归线
线性回归为
           veotr1<- rnorm(20)
           vetor2<- rnorm(20)
          plot(vetor1,vetor2)
          abline(lm(vetor1~vetor2))
对于已经回归的函数可以除了summary可以提取到概况信息 外,还可以利用fitted()来提取
 每个点对应的预测值(在回归最优化的那个方程下,计算的y值),和resid()来提取每个点对应的残差
    a<- lm(vetor1~vetor2)
 fitted(a)
 resid(a)###可以看到结果为每个元素对应的数值,这个可以变换预测值和真实值,并且进行回归分析
####自编函数
       
   vetor1<- rnorm(20)
   vetor2<- rnorm(20)
   pre_obv_grap<- function(obvx,obvy) 
     {   regr<- lm(obvy~obvx)
        b<- fitted(regr)
     plot(b,obvy)
     a<- list(b,regr,obvx,obvy)
          return(a)
  }
       pre_obv_grap(vetor1,vetor2) 
   ########特别重要,当一个函数的返回值具有多个的时候,可以在函数里面用
   ###这样函数内部的返回值的结构将不会变化,可以看到里面的对象list()里面不用““
    lines((vetor1[!is.na(vetor1)],fitted(regr)))###主要要利用is.na()函数去除数据中元素缺损的地方
 
######明天重点关注残差作图page112
##
   在R中的指数回归形式可能是,有待进一步验证,再看看glm的帮助
    glm(y~x,family=poisson(link=log),data=dataframe)
 比如
     glm(the.data$y~the.data$x+the.data$b)
   可以写成
    glm(y~x+b,data=the.data)
 指数函数其实是非线性的,但是又是内在线性的,因为指数函数可以通过两端log之后变为线性函数,所以可以用glm线性模型做回归,poisson族里默认的link就是log,就是ln,得到的参数a,b可以直接写入函数y=exp(ax+b)中
x=c(1, 1, 2, 2, 2, 3, 3, 4, 5)
y1=c(2.718,2.718,7.387524,7.387524,7.387524,20.07929023,20.07929023,54.57551085,148.3362385)
glmexpo=glm(y1~x, family=poisson)
summary(glmexpo)
意思就是通过这个回归出来的a,b对应的函数形式是y=exp(ax+b)而不是y=aln(x)+b的
      resid(glmexpo)
回归函数R^2和P值的调用和获取的获取通过三步计算可以得到
    1.计算模型残差平方和RSS.   @#####函数resid()###里面要跟回归函数,这个回归函数就是指数或者其他的就可以选择
          2.计算Y的样本方差SSY。    ####函数var()
          3.R^2=1-(RSS/SSY)
####计算线性回归函数的R平方的函数,等同于cor(y,x)
 R_squa<- function(y,x)###请输入两个变量其中如果换回归模型,如指数回归模型,则lm()函数变化
    { 
    RSS<-  sum(resid(lm(y~x))^2)###计算x,y线性回归的残差平方和
    SSY<-  sum((y)^2-mean(y)^2)###计算y值和平均值平方差的和
    R_squa<- 1-(RSS/SSY)
       return(R_squa) 
 }
 a<- read.csv("j1.csv",header= TRUE, row.names= 1)
 jjj<- R_squa(a$ty,a$d)
 jjj
###测试关于指数回归的函数形式,明天继续研究?
R_squa2<- function(y,x)###请输入两个变量其中如果换回归模型,如指数回归模型,则lm()函数变化
    { 
    y<- log(y)
 
    RSS<-  sum(resid(lm(y~x))^2)###计算x,y线性回归的残差平方和
    SSY<-  sum(y^2-(mean(y))^2)###计算y值和平均值平方差的和
    R_squa<- 1-(RSS/SSY)
       return(R_squa) 
 }
 a<- read.csv("j1.csv",header= TRUE, row.names= 1)
 jjj<- R_squa2(a$ty,a$d)
 jjj
 summary(lm(a$ty~a$d))
 0.3174286#####明天印证excel,并且对a,和b,值进行反推
    a<- read.csv("j1.csv",header= TRUE, row.names= 1)
    y<- log(a$ty)
    x<- a$d
    RSS<-  sum(resid(lm(y~x))^2)###计算x,y线性回归的残差平方和
    SSY<-  sum(y^2-(mean(y))^2)###计算y值和平均值平方差的和
    R_squa<- 1-(RSS/SSY)
  RSS<-  sum(resid(glm(a$ty~a$d,family=poisson))^2)
 Excel是这样拟合的,对拟合模型Y=a*ebX,先将模型转化为 ln(Y)=ln(a)+bX,然后对这个方程式用最小二乘法进行线性拟合。
 
 ###用Linest帮助中R2定义来解决,引文如下:
####回归分析时,Microsoft Excel 计算每一点的 y 的估计值和实际值的平方差。这些平方差之和称为残差平方和 (ssresid)。然后 Microsoft Excel 计算总平方和 (sstotal)。当 const = TRUE 或被删除时,总平方和是 y 的实际值和平均值的平方差之和。当 const = FALSE 时,总平方和是 y 的实际值的平方和(不需要从每个 y 值中减去平均值)。回归平方和 (ssreg) 可通过公式 ssreg = sstotal - ssresid 计算出来。残差平方和与总平方和的比值越小,判定系数 r2 的值就越大,r2 是表示回归分析公式的结果反映变量间关系的程度的标志。r2 等于 ssreg/sstotal。
那么可以用公式计算ssreg和sstotal,然后可以得到R2
22.关于两个向量获取并调用其检验值P值的办法
sum.rst<- summary(lm(y~d))
p_value<- sum.rst$coefficients[length(sum.rst$coefficients)]
p_value
##计算提取回归p值的函数,记住是线性回归
 p_value<- function(y,x)##输入两个向量
 {
  sum.rst<- summary(lm(y~x))
  p_value<- sum.rst$coefficients[length(sum.rst$coefficients)]
  return(p_value)
  }


https://wap.sciencenet.cn/blog-474707-429136.html

上一篇:R语言学习笔记(二)Introductory statistics whith R -Peter Da
下一篇:怎么样在R语言中绘制二次或者是其他非线性的函数曲线
收藏 IP: 159.226.89.*| 热度|

1 杜彦君

该博文允许注册用户评论 请点击登录 评论 (3 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-26 18:27

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部