语言杂七杂八的笔记"/>
R语言杂七杂八的笔记
1、决策树(Decision Tree):是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。(即分类的属性均在数据表中,不能决策出不存在的属性)
2、set.seed()函数
set.seed()用于设定随机数种子,一个特定的种子可以产生一个特定的伪随机序列,这个函数的主要目的,是让你的模拟能够可重复出现,因为很多时候我们需要取随机数,但这段代码再跑一次的时候,结果就不一样了,如果需要重复出现同样的模拟结果的话,就可以用set.seed()。在调试程序或者做展示的时候,结果的可重复性是很重要的,所以随机数种子也就很有必要。 也可以简单地理解为括号里的数只是一个编号而已,例如set.seed(100)不应将括号里的数字理解成“一百”,而是应该理解成“编号为一零零的随机数发生”,下一次再模拟可以采用二零零(200)或者一一一(111)等不同的编号即可,编号设定基本可以随意。
例如以下实验:
x<-rnorm(10) #随机生成10个随机数
x
[1] 0.3897943 -1.2080762 -0.3636760 -1.6266727 -0.2564784 1.1017795 0.7557815
[8] -0.2382336 0.9874447 0.7413901
x<-rnorm(10) #再次随机生成10个随机数
x
[1] 0.08934727 -0.95494386 -0.19515038 0.92552126 0.48297852 -0.59631064 -2.18528684
[8] -0.67486594 -2.11906119 -1.26519802
set.seed(5) #设定种子
x<-rnorm(10) # 在设定种子的前提下生成10个随机数
x
[1] -0.84085548 1.38435934 -1.25549186 0.07014277 1.71144087 -0.60290798 -0.47216639
[8] -0.63537131 -0.28577363 0.13810822
set.seed(5) # 设定种子
y<-rnorm(10)
y
[1] -0.84085548 1.38435934 -1.25549186 0.07014277 1.71144087 -0.60290798 -0.47216639
[8] -0.63537131 -0.28577363 0.13810822
x == y
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
3.factor因子
在R语言中,因子(factor)表示的是一个符号、一个编号或者一个等级,即,一个点。例如,人的个数可以是1,2,3,4......那么因子就包括,1,2,3,4.....还有统计量的水平的时候用到的高、中、低,也是因子,因为他是一个点。与之区别的向量,是一个连续性的值,例如,数值中有1,1.1,1.2......可以作为数值来计算,而因子则不可以。如果用我自己的理解,简单通俗来讲:因子是一个点,向量是一个有方向的范围。
在R中,如果把数字作为因子,那么在导入数据之后,需要将向量转换为因子(factor),而因子在整个计算过程中不再作为数值,而是一个"符号"而已。
因子(Factor) 一个因子不仅包括分类变量本身还包括变量不同的可能水
平(即使它们在数据中不出现)。因子函数factor用下面的选项创建一
个因子:
factor(x, levels = sort(unique(x), na.last = TRUE),
labels = levels, exclude = NA, ordered = is.ordered(x))
levels 用来指定因子可能的水平(缺省值是向量x中互异的值);labels
用来指定水平的名字;exclude表示从向量x中剔除的水平值;ordered是
一个逻辑型选项用来指定因子的水平是否有次序。
下面有一些例子:
> factor(1:3)
[1] 1 2 3
Levels: 1 2 3
> factor(1:3, levels=1:5)
[1] 1 2 3
Levels: 1 2 3 4 5
> factor(1:3, labels=c("A", "B", "C"))
[1] A B C
Levels: A B C
> factor(1:5, exclude=4)
[1] 1 2 3 NA 5
Levels: 1 2 3 5
函数levels用来提取一个因子中可能的水平值:
> ff <- factor(c(2, 4), levels=2:5)
> ff
[1] 2 4
Levels: 2 3 4 5
> levels(ff)
[1] "2" "3" "4" "5"
4、sample()函数
sample函数可以完成随机抽样处理,其基本形式为:sample(x, size, replace = FALSE)
sample函数参数说明:
x 整体数据,以向量形式给出
size 抽取样本的数目
replace 如果为F(默认),则是不重复抽样,此时size不能大于x的长度;如果为T,则是重复抽样,此时size允许大于x的长度
相应的示例代码如下:
sample(c(1:20),size=10) #在1~20数据中不重复地随机抽取10个元素作为样本[1] 8 2 20 11 14 6 19 1 12 9sample(c(1:20),size=30,replace=T) #重复地随机抽取30个元素作为样本[1] 8 20 12 15 8 6 13 9 2 10 7 2 11 8 17 3 16 7 11 9 15 18 9 5[25] 16 1 18 1 11 2
5、table()函数
一、table 函数对应的就是统计学中的列联表,是一种记录频数的方法,对于统计来说有非常重要的应用,下面的例子都是针对维数为2的情况举例,多维的情况是类似的
下面看一个例子:
[html] view plain copy- > ct <- data.frame(
- + Vote.for.X = factor(c("Yes", "Yes", "No", "Not Sure", "No"), levels = c("Yes", "No", "Not Sure")),
- + Vote.for.X.Last.Time = factor(c("Yes", "No", "No", "Yes", "No"), levels = c("Yes", "No"))
- + )
- > ct
- Vote.for.X Vote.for.X.Last.Time
- 1 Yes Yes
- 2 Yes No
- 3 No No
- 4 Not Sure Yes
- 5 No No
- > cttab <-table(ct)
- > cttab
- Vote.for.X.Last.Time
- Vote.for.X Yes No
- Yes 1 1
- No 0 2
- Not Sure 1 0
首先我们创建了一个示例数据集合,其中我们指定我们的因子的水平,然后 table 函数则是统计所有因子对出现的情况的频数
下面看一下 cttab 的特点:
[html] view plain copy- > mode(cttab)
- [1] "numeric"
- > str(cttab)
- 'table' int [1:3, 1:2] 1 0 1 1 2 0
- - attr(*, "dimnames")=List of 2
- ..$ Vote.for.X : chr [1:3] "Yes" "No" "Not Sure"
- ..$ Vote.for.X.Last.Time: chr [1:2] "Yes" "No"
- > summary(cttab)
- Number of cases in table: 5
- Number of factors: 2
- Test for independence of all factors:
- Chisq = 2.9167, df = 2, p-value = 0.2326
- Chi-squared approximation may be incorrect
- > attributes(cttab)
- $dim
- [1] 3 2
- $dimnames
- $dimnames$Vote.for.X
- [1] "Yes" "No" "Not Sure"
- $dimnames$Vote.for.X.Last.Time
- [1] "Yes" "No"
- $class
- [1] "table"
二、table对象的操作
一个必须要掌握的操作,addmargins
- > addmargins(cttab)
- Vote.for.X.Last.Time
- Vote.for.X Yes No Sum
- Yes 1 1 2
- No 0 2 2
- Not Sure 1 0 1
- Sum 2 3 5
下面取出各维度的名字,也就是各个的水平 [html] view plain copy
- > dimnames(cttab)
- $Vote.for.X
- [1] "Yes" "No" "Not Sure"
- $Vote.for.X.Last.Time
- [1] "Yes" "No"
下面提取感兴趣的子表:subtable 类比 subset
subtable(tbl,subnames) tbl 感兴趣的表,subnames 一个类表,列出自己各个维度感兴趣的水平, subtable 实现如下
[html] view plain copy- subtable <- function(tbl, subnames) {
- #将 table 转换称 array 获得 table 里面的所有元素
- tblarray <- unclass(tbl)
- #将 tblarray 以及 subnames 组合到一个list中
- dcargs <- list(tblarray)
- ndims <- length(subnames)
- for(i in 1:ndims) {
- dcargs[[i+1]] <- subnames[[i]]
- }
- #等价与执行 dcargs[[1]][dcargs[[2]][i], dcargs[[3]][j]] i,j 取遍所有该属性的元素
- subarray <- do.call("[", dcargs)
- #对list中的每一个属性调用 length
- dims <- lapply(subnames, length)
- subtbl <- array(subarray, dims, dimnames = subnames)
- class(subtbl) <- "table"
- return(subtbl)
- }
下面给出一个例子:可能很有用的 [html] view plain copy
- > as.data.frame(cttab)
- Vote.for.X Vote.for.X.Last.Time Freq
- 1 Yes Yes 1
- 2 No Yes 0
- 3 Not Sure Yes 1
- 4 Yes No 1
- 5 No No 2
- 6 Not Sure No 0
tabdom 计算table的统计频率
- tabdom <- function(tbl, k) {
- tbldf <- as.data.frame(tbl)
- freqord <- order(tabldf$Freq, decreasing=TRUE)
- dom <- tbldf[freqord, ][1:k]
- return(dom)
- }
6. summary()函数可以获取描述性统计量
可以提供最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计
对于glm模型summary()输出的汇总结果,如何解读是非常重要的,它直接影响得出的结论。 例如下面这样一个输出结果,该如何理解呢? Call: glm(formula = bl ~ I, family = gaussian,data = anaData) Deviance Residuals: Min 1Q Median 3Q Max -62.364 -14.278 -0.462 14.293 51.475 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 67.067 5.766 11.632 < 2e-16 *** I 10.368 3.647 2.843 0.00521 **根据课程所学并查阅有关参考书箱,理解如下:
一、调用 Call: glm(formula = bl ~ I, family = gaussian,data = anaData) 当创建模型时,以上代码表明glm是如何被调用。
二、残差统计量 Deviance Residuals: Min 1Q Median 3Q Max -62.364 -14.278 -0.462 14.293 51.475 残差第一四分位数(1Q)和第三分位数(Q3)有大约相同的幅度,意味着有较对称的钟形分布。
三、系数 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 67.067 5.766 11.632 < 2e-16 *** I 10.368 3.647 2.843 0.00521 **
标记为Estimate的列包含由普通最小二乘法计算出来的估计回归系数。 标记为Std. Error的列是估计的回归系数的标准误差。 从理论上说,如果一个变量的系数是0,那么该变量是无意义的,它对模型毫无贡献。然而,这里显示的系数只是估计,它们不会正好为0。因此,我们不禁会问:从统计的角度而言,真正的系数为0的可能性有多大?这是t统计量和P值的目的,在汇总中被标记为t value和 Pr(>|t|)。 P值估计系数不显著的可能性,有较大P值的变量是可以从模型中移除的候选变量。
7、
更多推荐
R语言杂七杂八的笔记
发布评论