精华内容
下载资源
问答
  • 使用R语言预测产品销量

    千次阅读 2019-10-03 17:30:15
    使用R语言预测产品销量 通过不同的广告投入,预测产品的销量。因为响应变量销量是一个连续的值,所以这个问题是一个回归问题。数据集共有200个观测值,每一组观测值对应一种市场情况。 数据特征 TV:对于一...

    使用R语言预测产品销量

     

    通过不同的广告投入,预测产品的销量。因为响应变量销量是一个连续的值,所以这个问题是一个回归问题。数据集共有200个观测值,每一组观测值对应一种市场情况。

     

    数据特征

    • TV:对于一个给定市场的单一产品,用于电视上的广告费用(以千为单位)
    • Radio:用于广告媒体上投资的广告费用
    • Newspaper:用于报纸媒体上的广告费用

    响应

    • Sales:对应产品的销量

     

    加载数据

    > data <- read.csv("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv",colClasses=c("NULL",NA,NA,NA,NA))
    > head(data)     
      TV Radio Newspaper Sales
    1 230.1  37.8      69.2  22.1
    2  44.5  39.3      45.1  10.4
    3  17.2  45.9      69.3   9.3
    4 151.5  41.3      58.5  18.5
    5 180.8  10.8      58.4  12.9
    6   8.7  48.9      75.0   7.2
    # 显示Sales和TV的关系
    > plot(data$TV, data$Sales, col="red", xlab='TV', ylab='sales')

    # 用线性回归拟合Sales和TV广告的关系
    > fit=lm(Sales~TV,data=data)
    # 查看估算出来的系数
    > coef(fit)
    (Intercept)          TV 
     7.03259355  0.04753664
    # 显示拟合出来的模型的线
    > abline(fit)

    # 显示Sales和Radio的关系
    > plot(data$Radio, data$Sales, col="red", xlab='Radio', ylab='Sales')

    # 用线性回归拟合Sales和Radio广告的关系
    > fit1=lm(Sales~Radio,data=data)
    # 查看估算出来的系数
    > coef(fit1)
    (Intercept)       Radio 
      9.3116381   0.2024958
    # 显示拟合出来的模型的线
    > abline(fit1)

    # 显示Sales和Newspaper的关系
    > plot(data$Newspaper, data$Sales, col="red", xlab='Radio', ylab='Sales')

    # 用线性回归拟合Sales和Radio广告的关系
    > fit2=lm(Sales~Newspaper,data=data)
    # 查看估算出来的系数
    > coef(fit2)
    (Intercept)   Newspaper 
     12.3514071   0.0546931
    # 显示拟合出来的模型的线
    > abline(fit2)

    # 创建散点图矩阵
    > pairs(~Sales+TV+Radio+Newspaper,data=data, main="Scatterplot Matrix")

    第一行图形显示TVRadioNewspaperSales的影响。纵轴为Sales,横轴分别为TVRadioNewspaper。从图中可以看出,TV特征和销量是有比较强的线性关系的。

    划分训练集和测试集

    > trainRowCount <- floor(0.8 * nrow(data))
    > set.seed(1)
    > trainIndex <- sample(1:nrow(data), trainRowCount)
    > train <- data[trainIndex,]
    > test <- data[-trainIndex,]
    > dim(data)
    [1] 200   4
    > dim(train)
    [1] 160   4
    > dim(test)
    [1] 40  4

    拟合线性回归模型

    > model <- lm(Sales~TV+Radio+Newspaper, data=train)
    > summary(model)
    Call:
    lm(formula = Sales ~ TV + Radio + Newspaper, data = train)
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -8.7734 -0.9290  0.2475  1.2213  2.8971 
    
    Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
    (Intercept)  2.840243   0.353175   8.042 2.07e-13 ***
    TV           0.046178   0.001579  29.248  < 2e-16 ***
    Radio        0.189668   0.009582  19.795  < 2e-16 ***
    Newspaper   -0.001156   0.006587  -0.176    0.861    
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 1.745 on 156 degrees of freedom
    Multiple R-squared:  0.8983,    Adjusted R-squared:  0.8963 
    F-statistic: 459.2 on 3 and 156 DF,  p-value: < 2.2e-16

    预测和计算均方根误差

    > predictions <- predict(model, test)
    > mean((test["Sales"] - predictions)^2)
    [1] 2.050666

    特征选择

    在之前的各变量和销量之间关系中,我们看到Newspaper和销量之间的线性关系比较弱,并且上面模型中Newspaper的系数为负数,现在去掉这个特征,看看线性回归预测的结果的均方根误差。

     

    > model1 <- lm(Sales~TV+Radio, data=train)
    > summary(model1)
    Call:
    lm(formula = Sales ~ TV + Radio, data = train)
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -8.7434 -0.9121  0.2538  1.1900  2.9009 
    
    Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
    (Intercept) 2.821417   0.335455   8.411 2.35e-14 ***
    TV          0.046157   0.001569  29.412  < 2e-16 ***
    Radio       0.189132   0.009053  20.891  < 2e-16 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 1.74 on 157 degrees of freedom
    Multiple R-squared:  0.8983,    Adjusted R-squared:  0.897 
    F-statistic:   693 on 2 and 157 DF,  p-value: < 2.2e-16
    
    > predictions1 <- predict(model1, test)
    > mean((test["Sales"] - predictions1)^2)
    [1] 2.050226

     

    从上可以看到2.050226<2.050666,将Newspaper这个特征移除后,得到的均方根误差变小了,说明Newspaper不适合作为预测销量的特征,则去掉Newspaper特征后得到了新的模型。

    转载于:https://www.cnblogs.com/zeppelin/p/6921354.html

    展开全文
  • plot(density(eur), main ibution of EUROSTOXX 50 Returns") ks.tst(eu.r, rnm(n = length(eu.r), mean = mean(eu.r), sd = sd(eu.r))) 从严格的视角来看,这看起来比AT&T分布更糟糕。EUROSTOXX的回报显然是负面...

    原文链接:http://tecdat.cn/?p=5334

    原文出处:拓端数据部落公众号

    几何布朗运动(GBM)是模拟大多数依赖某种形式的路径依赖的金融工具的标准主力。虽然GBM基于有根据的理论,但人们永远不应忘记它的最初目的 - 粒子运动的建模遵循严格的正态分布脉冲。基本公式由下式给出:

    标准维纳过程代表创新。在对气体进行建模时效果很好,在财务建模方面存在一些严重的缺陷。问题是维纳过程有两个非常严格的条件:

    a)创新通常是分布式的,平均零和方差为tb)创新是独立的

    现在,至少有一些金融市场数据暴露的人都知道股票回报不满足第一个条件,有时甚至不满足第二个条件。普遍的共识是,股票收益是扭曲的,是有效的,并且尾巴不均匀。虽然股票收益趋于收敛于正常分布且频率递减(即月收益率比日收益率更正常),但大多数学者会同意t分布或Cauchy分布更适合收益。

    然而,在实践中,大多数人在模拟布朗运动时只是采用正态分布,并接受由此产生的资产价格不是100%准确。另一方面,我不满足于这种半解决方案,我将在下面的例子中展示盲目信任GBM的成本是多少。我提出了一种伪布朗方法,其中随机创新是从经验回报的核密度估计而不是假设的正态分布中采样的。这种方法的好处在于它产生的结果更接近于过去观察到的结果而没有完全复制过去(这将是直接从过去的创新中抽样随机创新的结果)。

    介绍性例子

    在我们进入有趣的部分之前,我们展示了市场上浪费了多少钱,我们从一个简单的例子开始。我们需要加载三个包及其依赖项(您可以在页面底部下载此帖子的R-)

    install.packages("quantmod")
    
    require(quantmod)

    对于我们的第一个例子,我们将尝试模拟AT&T的回报。以下命令允许我们从雅虎财经下载价格信息并计算每月日志回报为了确定我在开始时所做的观点,我们将比较回报分布与正态分布。

    att <- getSymbols("T", from = "1985-01-01", to = "2015-12-31", auto.assign = FALSE)
    plot(density(attr), main = "Distribution of AT&T Returns")
    rug(jitter(attr))

    即使没有艺术史硕士学位,大多数人也会同意这两行不匹配。对于那些不依赖于这种视觉方法的人来说,可靠的Kolmogorov-Smirnov测试提供了一种更正式的方法。

    set.seed(2013)
    ks.test(attr, rnorm(n = length(attr), mean = mean(attr), sd = sd(attr)))

    测试返回的p值为0.027,这远远不够(p值越小,我们必须得出的结论是两个分布不同)。接下来我们设置标准GBM功能。我完全清楚各种GBM函数作为众多包的一部分存在。尽管如此,我还是决定创建自己的函数,以使内部工作更加透明。

    m((mu * dt * x) + #drift
    rnorm(1, mean = 0, sd = 1) * sqrt(dt) * sigma * x) #random innovation
    x
    }

    在这个简单的函数中(我知道有更优雅的方法来实现这一点,但结果保持不变)rnorm函数充当Wiener进程驱动程序。毋庸置疑,这并不尊重我们上面所看到的。相比之下,我的伪布朗函数从过去经验回报的核密度估计中抽样随机创新。

    pseudoGBM <- function(x, rets, n, ...) {
    N <
    y[[i]] <- x + x * (mean(rets) + samp[i])
    x <- y[[i]]
    }
    return(y)
    }

    不可否认,这个函数有点简洁,因为它假设静态增量(即dt = 1)并且几乎不需要用户输入。它只需要一个起始值(x),一个过去返回的向量(rets)和指定的路径长度(n)。...输入允许用户将其他命令传递给密度函数。这使用户可以通过添加带宽命令(bw =)来控制核密度估计的平滑度。没有任何进一步的麻烦,让我们开始使用上述功能进行模拟。在第一个例子中,我们仅使用起始值x中的两个函数来模拟一个价格路径,即系列中的最后一个价格。 要查看两个方法的执行情况,我们计算模拟序列的回报并将它们的分布与经验分布进行比较。

    x <- as.numeric(tail(att$T.Adjusted, n = 1))
    set.seed(2013)
    
    attPGBMr <- diff(log(attPGBM))[-1]
    d1 <- density(attr)
    d2 <- density(attGBMr)
    d3 <- density(attPGBMr)
    plot(range(d1$x, d3$x), range(d1$y, d3$y), type = "n",
    ylab = "Density", xlab = "Returns", main = "Comparison of Achieved Densities")
    lines(d1, col = "black", lwd = 1)
    lines(d2, col = "red", lty = 2)
    lines(d3, col = "blue", lty = 3)

    显然,我们看到PGBM函数(蓝线)在产生接近经验回报分布(黑线)的回报时优于标准GBM函数(红线)。同样,关键(或视觉上无能)的读者可以查看KS测试的结果。

    ks.test(attr, attPGBMr)
    
    ks.test(attr, attGBMr)

    我们再次看到PGBM函数(p值= 0.41)远远优于GBM函数(p值= 0.02)。

    高级示例

    正如所承诺的那样,我们的第二个例子将展示当一个人在不能代表基础数据时错误地假设正态分布时,在线上有多少钱。自从金融黑暗时代醒来以来,欧洲特别表现出对结构性金融产品的渴望,这些产品可以参与股票市场,同时限制或消除下行风险。此类证券通常依赖于路径,因此通常使用GBM进行建模。

    我们将使用Generali Germany提供的一种特定产品 - Rente Chance Plus - 这是我开发PGBM功能的最初原因。当我在私人银行工作时,我的任务是评估这个特定的安全性,从基于GBM的标准蒙特卡罗模拟开始,但很快意识到这还不够。Rente Chance Plus提供20%参与EUROSTOXX 50指数上限至15%的上限,初始投资和实现收益均无下行。安全性在每年年底评估。尽管Generali可以在20年的投资期内自由改变参与率和资本化率,但为了论证,我们将假设这些因素保持不变。

    从上面反映我们的程序,我们首先从雅虎财经下载EUROSTOXX 50价格信息。

    eu <- getSymbols("^STOXX50E", from = "1990-01-01", to = "2015-12-31", auto.assign = FALSE)

    接下来,我们看看数据与正态分布的拟合程度如何,或者说多么糟糕。

    plot(density(eur), main ibution of EUROSTOXX 50 Returns")
    
    ks.tst(eu.r, rnm(n = length(eu.r), mean = mean(eu.r), sd = sd(eu.r)))

    从严格的视角来看,这看起来比AT&T分布更糟糕。EUROSTOXX的回报显然是负面偏差,有点leptokurtic。KS测试返回p值为0.06,确认视觉不匹配。现在我们已经确定正态分布不是最合适的,我们可以看看错误地假设它的后果。我们将使用标准GBM和我的PGBM函数运行10,000次迭代的模拟并比较结果(如果您正在复制以下代码,请在等待时给自己喝杯咖啡。这将花费一些时间来运行)。

    x <- as.numer
    
    SIM1 <- as.data.frame(matrix(replicate(10000, {eu.GBM <- myGBM(x=x, mu = mean(eu.r), sigma = sd(
    
    SIM2 <- as.data.frame(matrix(replicate(10000, {eu.PGBM <- pseudoGBM(x = x, n = 240, rets = eu.r)}), ncol = 1000, 10000), SIM1[seq(0, 240, 12), ])), start = c(2016), frequency = 1)
    
    sim2 <- ts(as.matrix(rbind(rep(x, 10000), SIM2[seq(0, 240, 12), ])), start = c(2016), frequency = 1)

    当然,我们对EUROSTOXX 50的价格水平不感兴趣,而是在参与率和上限率的约束下评估的回报。好消息是最困难的部分就在我们身后。计算回报和应用约束非常简单。对结果进行调整并不容易。

    s1.r <-(sim2))
    
    , s2.r*0.2, 0.15*0.20)
    
    S1<-colSums(s1.r)
    
    S2<-colSumS1,arkred")
    
    rug(jitter(S2), side = 1, col = "darkblue")
    
    ks.test(S1, S2)

    我们可以清楚地看到,PGBM函数(蓝色)模拟的累积回报表现出负偏差,并且范围比标准GBM函数(红色)模拟的回报更宽。请注意,由于安全性没有下行限制,分布在下尾区看起来并不相同。KS测试以极其确定的方式证实两种分布是不同的(然而,小的p值主要是由大样本量引起的)。现在回答这个百万美元的问题(实际上非​​常字面)。线路上有多少钱?好吧,如果Generali使用正态分布来预测回报并相应地重新投保,他们会......

    均值(S1)-mean(S2)

    ...低估了累计回报率约0.6%。这可能看起来并不多,但如果我们假设安全数量为10亿欧元,那么Generali就达不到600万欧元 - 相当多的钱只是假设错误的分配。

    结论和局限

    那么我们从中学到了什么呢?用于对任何依赖路径的安全定价模型中的创新进行建模的分布可能会产生重大影响。虽然这个陈述本身就很明显,但分布差异的程度令人惊讶。当然,在Generali和其他机构工作的人可能比我更聪明,他们非常清楚正常分布并不总是最佳选择。但是,大多数人会使用更正式的(但可能只是不准确的)分布,如t分布或Cauchy分布。使用核密度分布是一种闻所未闻的方法。这是有原因的。

    首先,不能保证核密度估计比未回避的正态分布更准确地表示未知的基础分布。使用过去的数据预测未来总是让任何数据科学家的口味都不好,但不幸的是我们别无选择。然而,标准GBM固有的正态分布确实过于依赖过去的信息(即历史均值和标准偏差),但在形式化解决方案方面具有巨大的优势,因为其核心作用(双关语仅用于后见之明)概率论。

    其次,内核密度估计对使用的带宽非常敏感。如果带宽太大,您将获得平滑的分布,但是,与正态分布没有区别。如果带宽太小,您将获得一个非常强调极值的分布,特别是如果您估计内核密度的数据样本相当小。在上面的例子中,我们使用了密度函数中固有的自动带宽选择器,但几乎没有办法知道最佳带宽是什么。

    上述方法还有其他局限性,因为我们做了许多非常不切实际的假设。在Generali的例子中,我们假设Generali没有改变参与率和上限率,这是不太可能的。然而,更一般地说,我们对金融市场做出了一些基本假设。知情(希望)我们假设资本市场是有效的。因此,我们假设回报中没有自相关,这是维纳过程的第二个条件,但这是否代表了基础数据?

    acf(eu.r,main =“EUROSTOXX 50返回的自相关”)
    

    有问题欢迎联系我们!

    展开全文
  • R语言简介

    万次阅读 2016-10-15 17:03:02
    R语言简介 1什么是R语言 2R语言能干什么 3R语言有什么优势 4R语言编程工具 5R语言学习路线图 6R语言参考资料  R语言是主要用于统计分析、绘图的语言和操作环境。 R本来是由来自新西兰奥克兰大学的Ross Ihaka

    1、什么是R语言?

        R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、开源的软件,它是一个用于统计计算和统计制图的优秀工具。
        R语言是主要用于统计分析、绘图的语言和操作环境。 R本来是由来自新西兰奥克兰大学的Ross Ihaka和Robert Gentleman 开发。 (也因此称为R)现在由“R开发核心团队”负责开发。 R是基于S语言的一个GNU项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行。 R的语法是来自Scheme。

    2、R语言能干什么?

    1、R是科学计算的强大工具包。

    2、R主要擅长统计分析方面工作。

    3、R具有顶尖的绘图功能。

    4、R的交互式数据分析功能强大且灵活。

    5、R可以轻松地从多个数据源导入数据。

    6、金融领域数据统计与计算的强大工具。

    7、数据挖掘和机器学习领域的必备工具。

    3、R语言有什么优势?

    1、R是免费的。很多商业统计软件价格不菲,投入成千上万美元都是有可能的。可能国内一些人感觉不会很明显,因为很多人是使用单位或学校集体购买的软件,或者使用破解过的统计软件,而不是花自己钱。对于前者,并不是每个人都有机会享受这种福利。而对于破解过的统计软件,其计算结果的准确性很可能会被质疑。

    2、R主要擅长统计分析方面工作。R最初是由两位统计学家开发的,其主要优势也在于统计分析方面。它提供了各种各样的数据处理和分析技术,几乎任何数据分析过程都可以在R中完成。与此相比较,SPSS、MINITAB、MATLAB等数据分析软件更加适合于已经处理好的、规范的数据,而对于还未完成处理过程,或者在分析中仍需大量与处理过程的数据而言,它们可能会显得繁琐一些。

    3、R具有顶尖的绘图功能。尤其对于复杂数据的可视化问题,R的优势更加明显。一方面,R中各种绘图函数和绘图参数的综合使用,可以得到各式各样的图形结果,无论对于常用的直方图、饼图、条形图等,还是复杂的组合图、地图、热图、动画,以及自己脑子里突然想到的其他图形展现方式,都可以采用R语言实现。另一方面,从数值计算到得到图形结果的过程灵活,一旦程序写好后,如果需要修改数据或者调整图形,只需要修改几个参数或者直接替换原始数据即可,不用重复劳动。这对需要绘制大量同类图形的用户比较适用。例如,某用户需要观察某一因素与其他100个因素的交互关系,可以绘制100个条形图或走势图。配合R的循环和条形图功能,可以很快得到jpg、png、bmp、tiff、gif或postscript等格式的图形结果。

    4、R的交互式数据分析功能强大且灵活。一个完整的数据分析过程可以大体包括以下几个步骤:(1)导入数据;(2)数据准备、探索和清洗;(3)拟合一个统计模型;(4)得到结果并进行评估;(5)如果结果的评估不理想,重新完成(3)步骤;(6)得到多个模型的结果,并进行交叉检验;(7)根据模型结果进行预测、分析等;(8)形成报告。R中每个步骤的所有“输出”都可以直接作为下一个步骤的“输入”,可以批量完成以上所有的(8)个步骤。这个优点主要与STATA、SPSS等统计软件相比而言的,STATA和SPSS的统计分析结果是一大串图表或统计量。如果只是一个或少数几个步骤的分析,这种出现一大串结果的批处理更加直观方便。但如果分析中涉及很多连串的模型,而且一些模型需要反复调用前面模型的结果,那么R的灵活性会更加凸显。

    5、R可以轻松地从多个数据源导入数据,包括文本文件、数据库、其他统计软件等。这一点很多其他软件还难以做到。如readLines()、read.table()等函数可以导入文本数据,foreign包的read.spss()可以导入SPSS软件的sav格式数据,foreign包的read.dta()可以导入STATA软件的dta格式数据等等。其他有关数据导入导出的函数可以参见R帮助文档《R Data Import/Export》。

    6、R的更新速度很快,包含最新的大量统计方法和案例。R社区由全球大量维护者共同维护,再加上R包的扩展性很强,几乎每天都有人为R社区贡献新的方法,提供其他软件中尚不可用的、新颖的统计计算案例。在本材料“R资源”部分会介绍一些常用的R资源获取途径。

    7、R也可以很美。目前最基本的R软件(R2.15.2)只有一个编程窗口,看起来挺丑的。但它穿上衣服以后也可以很漂亮,它的衣服就是各式各样的GUI(Graphical User Interface,图形用户界面)工具。目前比较常用的GUI工具包括Rstudio、Rattle、Rattle、Red-R、Deducer、RKWard、JGR、R Commander、Tinn-R等。其中Rstudio可能是最受欢迎的。

    4、R语言编程工具

        R语言安装时会自带一个GUI工具,当然还有其他众多集成开发工具,如:Rstudio、Rattle、Rattle、Red-R、Deducer、RKWard、JGR、R Commander、Tinn-R等。其中Rstudio可能是最受欢迎的。

    5、R语言学习路线图

    1.初级入门

    《An Introduction to R》,这是官方的入门小册子。其有中文版,由丁国徽翻译,译名为《R导论》。《R4Beginners》,这本小册子有中文版应该叫《R入门》。除此之外,还可以去读刘思喆的《153分钟学会R》。这本书收集了R初学者提问频率最高的153个问题。为什么叫153分钟呢?因为最初作者写了153个问题,阅读一个问题花费1分钟时间,全局下来也就是153分钟了。有了这些基础之后,要去读一些经典书籍比较全面的入门书籍,比如《统计建模与R软件》,国外还有《R Cookbook》和《R in action》。

    2.高级入门

    读了上述书籍之后,你就可以去高级入门阶段了。这时候要读的书有两本很经典的。《Statistics with R》和《The R book》。之所以说这两本书高级,是因为这两本书已经不再限于R基础了,而是结合了数据分析的各种常见方法来写就的,比较系统的介绍了R在线性回归、方差分析、多元统计、R绘图、时间序列分析、数据挖掘等各方面的内容,看完之后你会发现,哇,原来R能做的事情这么多而且如此简洁。

    3.绘图与可视化

    亚里斯多德说,“较其他感觉而言,人类更喜欢观看”。因此,绘图和可视化得到很多人的关注和重视。那么,如何学习R画图和数据可视化呢?再简单些,如何画直方图?如何往直方图上添加密度曲线呢?我想读完下面这几本书你就大致会明白了。

    首先,画图入门可以读《R Graphics》,个人认为这本是比较经典的,全面介绍了R中绘图系统。该书对应的有一个网站,google之就可以了。更深入的可以读《Lattice:Multivariate Data Visualization with R》。上面这些都是比较普通的。当然,有比较文艺和优雅的——ggplot2系统,看《ggplot2:Elegant Graphics for Data Analysis》。还有数据挖掘方面的书:《Data Mining with Rattle and R》,主要是用Rattle软件,个人比较喜欢Rattle!当然,Rattle不是最好的,Rweka也很棒!再有就是交互图形的书了,著名的交互系统是ggobi,这个我已经喜欢两年多了,关于ggobi的书有《Interactive and Dynamic Graphics for Data Analysis With R and GGobi》,不过,也只是适宜入门,更多更全面的还是去ggobi的主页吧,上面有各种资料以及包的更新信息!

    4.计量经济学

    关于计量经济学,首先推荐一本很薄的小册子:《Econometrics In R》,做入门用。然后,是《Applied Econometrics with R》,该书对应的R包是AER,可以安装之后配合使用,效果甚佳。计量经济学中很大一部分是关于时间序列分析的,这一块内容在下面的地方说。

    5.时间序列分析

    时间序列书籍的书籍分两类,一种是比较普适的书籍,典型的代表是:《Time Series Analysis and Its Applications :with R examples》。该书介绍了各种时间序列分析的经典方法及实现各种经典方法的R代码,该书有中文版。如果不想买的话,建议去作者主页直接下载,英文版其实读起来很简单。时间序列分析中有一大块儿是关于金融时间序列分析的。这方面比较流行的书有两本《Analysis of financial time series》,这本书的最初是用的S-plus代码,不过新版已经以R代码为主了。这本书适合有时间序列分析基础和金融基础的人来看,因为书中关于时间序列分析的理论以及各种金融知识讲解的不是特别清楚,将极值理论计算VaR的部分就比较难看懂。另外一个比较有意思的是Rmetrics推出的《TimeSeriesFAQ》,这本书是金融时间序列入门的东西,讲的很基础,但是很难懂。对应的中文版有《金融时间序列分析常见问题集》,当然,目前还没有发出来。经济领域的时间序列有一种特殊的情况叫协整,很多人很关注这方面的理论,关心这个的可以看《Analysis of Integrated and Cointegrated Time Series with R》。最后,比较高级的一本书是关于小波分析的,看《Wavelet Methods in Statistics with R》。

    6.金融

    金融的领域很广泛,如果是大金融的话,保险也要被纳入此间。用R做金融更多地需要掌握的是金融知识,只会数据分析技术意义寥寥。我觉得这些书对于懂金融、不同数据分析技术的人比较有用,只懂数据分析技术而不动金融知识的人看起来肯定如雾里看花,甚至有人会觉得金融分析比较低级。这方面比较经典的书籍有:《Advanced Topics in Analysis of Economic and Financial Data Using R》以及《Modelling Financial Time Series With S-plus》。金融产品定价之类的常常要用到随机微分方程,有一本叫《Simulation Inference Stochastic Differential Equations:with R examples》的书是关于这方面的内容的,有实例,内容还算详实!此外,是风险度量与管理类。比较经典的有《Simulation Techniques in Financial Risk Management》、《Modern Actuarial Risk Theory Using R》和《Quantitative Risk Management:Concepts, Techniques and Tools》。投资组合分析类和期权定价类可以分别看《Portfolio Optimization with R》和《Option Pricing and Estimation of Financial Models with R》。

    7.数据挖掘

    这方面的书不多,只有《Data Mining with R:learing with case studies》。不过,R中数据挖掘方面的包已经足够多了,参考包中的帮助文档就足够了。

    6、R语言参考资料

    相关书籍推荐:
    《R in Action》(R语言实战)
    《The Art of_R Programming》(R语言编程艺术)
    《An Introduction to R》(R导论)
    《R Cookbook》
    《R in a Nutshell》
    《Statistics with R》

    展开全文
  • 利用R语言进行数据分析1 前言2 问题及解决思路和代码2.1 问题1:逻辑判断生成新变量2.1.1 问题描述2.1.2 规则2.1.3 对应的R语言基础2.1.4 伪代码2.1.5 真正的实现2.1.6 分组计算得结果2.2 问题2:正则提取特征+绘制...

    1 前言

    最近无论是实习还是做项目,更多的都是使用Python来做一些分析,建模的工作,最近刚好用到R语言来解决了几个task,好久没用R语言,导致很多的语法有些生疏,另外一些函数的用法也有些遗忘,所以边写边查浪费了不少时间,于是现在复盘一下整个的工作,优化下代码,另外把常用的代码进行总结整理,方便下次写代码的时候查询,而不是每次都Google半天…

    2 问题及解决思路和代码

    2.1 问题1:逻辑判断生成新变量

    2.1.1 问题描述

    在这里插入图片描述
    而原始数据长啥样呢,见下图:
    在这里插入图片描述

    2.1.2 规则

    总结一下这个问题:

    • 现在的需求就是要新生成一列:Date,生成规则有三种:
      • 仅工作日:周一至周五任一不为空且周六周日全为空
      • 仅周末:周六周日任一为不空且周一至周五全为空
      • 工作日和周末:周一~周五任一非空且周六周日任一非空

    2.1.3 对应的R语言基础

    针对上述的三种规则,对应到R语言里,就转换为了两个核心问题:如何运用R语言实现→

    1. 判断一个元素为空或者非空?
    2. 逻辑符号 且 或 ?

    首先第一个问题:

    1、R语言判断一个元素为空或者非空:

    • is.na(x) 如果返回True 表示为缺失值 即为
    • complete.cases(x) 如果返回True 表示完整 不为缺失值 即非空

    解决了这个问题,那么下面来看下第二个问题:

    2、R语言中的逻辑符号

    首先记住 以后在R语言里 统一使用下面两种:因为它们是针对标量的!

    • 且:&&
    • 或:||

    梳理一下R语言的逻辑操作符:

    • 且:&& 和 &
    x <- c( TRUE, FALSE, TRUE )
    y <- c( FALSE, TRUE, FALSE )
    
    x & y # 向量的且 如果是向量比较返回多个结果 单个元素比较返回一个结果
    x[1] & y[1]
    
    x && y # 标量的且 只支持单个元素比较,如果是向量 只比较第一个元素然后返回结果
    x[1] && y[1]
    
    [1] FALSE FALSE FALSE
    [1] FALSE
    [1] FALSE
    [1] FALSE
    
    x | y # 向量的或 如果是向量比较返回多个结果 单个元素比较返回一个结果
    x[1] | y[1] 
    
    x || y # 标量的或 只支持单个元素比较,如果是向量 只比较第一个元素然后返回结果
    x[1] || y[1]
    
    [1] TRUE TRUE TRUE
    [1] TRUE
    [1] TRUE
    [1] TRUE
    

    2.1.4 伪代码

    有了上面的R语言基础之后,下面开始写代码!

    首先就得弄清楚代码逻辑怎么写,我们一个一个来看!

    • 仅工作日:周一至周五任一不为空且周六周日全为空

    那么逻辑上就应该是:

    (周一非空 或 周二非空 或 周三非空 或 周四非空 或 周五非空)且(周六空 且 周日空)

    if((is.na(travel_dat[x, 'Satprice']) && is.na(travel_dat[x, 'SunPrice'])) 
         && (complete.cases(travel_dat[x,'MonPrice']) || complete.cases(travel_dat[x,'Tuesprice']) || complete.cases(travel_dat[x,'WedPrice'])
             || complete.cases(travel_dat[x,'ThusPrice']) || complete.cases(travel_dat[x,'Friprice'])) ){
        travel_dat[x, 'Date'] = '工作日'
        }
    
    • 仅周末:周六周日任一为不空且周一至周五全为空
    else if((complete.cases(travel_dat[x, 'Satprice']) || complete.cases(travel_dat[x, 'SunPrice'])) 
              && (is.na(travel_dat[x,'MonPrice']) && is.na(travel_dat[x,'Tuesprice']) && is.na(travel_dat[x,'WedPrice'])
                  && is.na(travel_dat[x,'ThusPrice']) && is.na(travel_dat[x,'Friprice']))){
        travel_dat[x, 'Date'] = '仅周末'
      }
    
    • 工作日和周末:周一~周五任一非空且周六周日任一非空
    else if((complete.cases(travel_dat[x, 'Satprice']) || complete.cases(travel_dat[x, 'SunPrice'])) 
              && (complete.cases(travel_dat[x,'MonPrice']) || complete.cases(travel_dat[x,'Tuesprice']) || complete.cases(travel_dat[x,'WedPrice'])
                  || complete.cases(travel_dat[x,'ThusPrice']) || complete.cases(travel_dat[x,'Friprice'])) ){
        travel_dat[x, 'Date'] = '工作日和周末'
      }
    

    2.1.5 真正的实现

    两种思路:

    • 第一种是使用for循环,每一行做一个这样的判断 然后赋值到新列上
    • 第二种是高效的使用apply函数!

    实现1:for循环

    代码:

    # for循环版本
    travel_dat['Date'] = NA # 知识点!如何给一个变量赋予空值!
    # travel_dat[1, 'SunPrice']
    
    for (x in 1:dim(travel_dat)[1]) {
      if((is.na(travel_dat[x, 'Satprice']) && is.na(travel_dat[x, 'SunPrice'])) 
         && (complete.cases(travel_dat[x,'MonPrice']) || complete.cases(travel_dat[x,'Tuesprice']) || complete.cases(travel_dat[x,'WedPrice'])
             || complete.cases(travel_dat[x,'ThusPrice']) || complete.cases(travel_dat[x,'Friprice'])) ){
        travel_dat[x, 'Date'] = '工作日'
      }
      else if((complete.cases(travel_dat[x, 'Satprice']) || complete.cases(travel_dat[x, 'SunPrice'])) 
              && (is.na(travel_dat[x,'MonPrice']) && is.na(travel_dat[x,'Tuesprice']) && is.na(travel_dat[x,'WedPrice'])
                  && is.na(travel_dat[x,'ThusPrice']) && is.na(travel_dat[x,'Friprice']))){
        travel_dat[x, 'Date'] = '仅周末'
      }
      else if((complete.cases(travel_dat[x, 'Satprice']) || complete.cases(travel_dat[x, 'SunPrice'])) 
              && (complete.cases(travel_dat[x,'MonPrice']) || complete.cases(travel_dat[x,'Tuesprice']) || complete.cases(travel_dat[x,'WedPrice'])
                  || complete.cases(travel_dat[x,'ThusPrice']) || complete.cases(travel_dat[x,'Friprice'])) ){
        travel_dat[x, 'Date'] = '工作日和周末'
      }
      
    }
    

    实现的结果为:符合筛选条件!

    View(travel_dat[,c(12:18,24)]) # 注意要加上c
    

    在这里插入图片描述

    实现2:apply

    首先来个apply基础:

    x=array(rnorm(12),c(3,4))
    x
    # 求每一行的均值 即按行操作 1
    apply(x, 1, mean)
    # 求每一列的均值 即按列操作 2
    apply(x, 2, mean)
    

    结果为:

               [,1]       [,2]       [,3]       [,4]
    [1,] -0.2650878 -1.2321359  0.0336468 -0.3757341
    [2,] -0.1651225 -0.2583198 -0.6266415 -1.8395429
    [3,]  1.9981034 -0.9932305 -2.3548473  1.8798499
    
    [1] -0.4598278 -0.7224067  0.1324689
    
    [1]  0.5226310 -0.8278954 -0.9826140 -0.1118090
    

    总结:

    • apply函数有3个参数:
      • 第一个是要操作的对象
      • 第二个看按行还是按列操作
      • 第三个是操作函数

    下面自定义函数run一下:

    # 自定义函数
    myFun1 = function(x){sum(x[1]^2 + x[2]^3 + x[3]^3 + x[4]^4)}
    apply(x, 1, myFun1)
    
    myFun2 = function(x){sum(x[1] - x[2] + x[3])}
    apply(x, 2, myFun2)
    

    结果为:

    [1] -1.780338 11.214861  2.442234
    
    [1]  1.898138 -1.967047 -1.694559  3.343659
    

    ok,现在有了上面apply的基础了,下面开始将上面for循环代码改写为apply 提高效率。分为两步走:

    • 第一步是自定义函数
    • 第二步是生成新的列
    Datefun = function(x){
      # print(x[1])
      # print((is.na(x[7]) && is.na(x[1])))
      if((is.na(x[7]) && is.na(x[1])) && (complete.cases(x[2]) || complete.cases(x[3]) || complete.cases(x[4]) 
      || complete.cases(x[5]) || complete.cases(x[6]))){
        return('工作日')
        }
      else if((complete.cases(x[7]) || complete.cases(x[1])) 
                && (is.na(x[2]) && is.na(x[3]) && is.na(x[4])
                    && is.na(x[5]) && is.na(x[6]))){
        return('仅周末')  
      }
      else if((complete.cases(x[7]) || complete.cases(x[1])) 
              && (complete.cases(x[2]) || complete.cases(x[3]) || complete.cases(x[4])
                  || complete.cases(x[5]) || complete.cases(x[6]))){
        return('工作日和周末')
      }
    }
    # 注意 R语言 的if else 语句格式!必须要有括号括起来!
    travel_dat['Date'] = apply(travel_dat[,12:18], 1, Datefun) 
    # 大功告成!注意一定要括号ok!
    

    结果和上面是一模一样的,不再列出。

    2.1.6 分组计算得结果

    新生成了Date列其实已经成功了90%了,下面就是根据这一列来进行分组计算价格的均值!

    同样有两种方法:

    法1:使用summarise函数

    library(dplyr)
    summarise(group_by(travel_dat,Date),mean(Price,na.rm = T))
    

    输出结果为:

    # A tibble: 3 x 2
      Date         `mean(Price, na.rm = T)`
      <chr>                           <dbl>
    1 仅周末                          6929.
    2 工作日                          5275.
    3 工作日和周末                    5787.
    

    法2:使用aggregate函数

    options(digits=6)
    aggregate(travel_dat$Price, by=list(type=travel_dat$Date), mean)
    

    输出结果为:

              type       x
    1       仅周末 6929.40
    2       工作日 5275.20
    3 工作日和周末 5787.28
    

    2.2 问题2:正则提取特征+绘制对比箱线图

    2.2.1 问题描述

    在这里插入图片描述
    可以看到这个问题首先要对变量Star动刀子!那我们首先来看看这个变量长啥样吧!
    在这里插入图片描述
    根据题意,提取方式的典例应该为下表:

    样本starstar2
    15晚3钻3钻
    2暂无酒店信息无信息
    13晚4钻,4晚3钻4钻

    2.2.2 正则提取1

    这时候我们首先想到的肯定是正则表达式来提取,没毛病,但之前小编更多的是用Python和正则表达式结合使用,具体见博客:Python | 正则表达式 R语言和正则结合用的少一些,但是本质上正则表达式的写法是一致的,只不过语法上会有些许的差别而已。下面我们就来看看如何在R中使用正则表达式提取字符!

    这时候2行代码即可解决问题!

    library(stringr)
    # 正则匹配所有的钻出来 但是无法取最大
    travel_dat$Star00 = str_extract_all(string = travel_dat$Star, pattern = "\\d钻")
    head(travel_dat$Star00)
    

    输出结果为:

    [[1]]
    [1] "3钻"
    
    [[2]]
    [1] "3钻"
    
    [[3]]
    character(0)
    
    [[4]]
    [1] "3钻"
    
    [[5]]
    character(0)
    
    [[6]]
    [1] "3钻"
    

    其实含钻的信息都被提取出来了,正则的写法也比较简单,就是数字+钻即可!但有2点需要注意:

    • 首先Python中如果写这个表达式,应该是\d钻 ,而在R语言中要使用两个反斜杠\\d钻 所以还是存在细微的差别,关于R语言中正则的语法可参考博文:正则表达式及R字符串处理之终结版
    • 其次,在上面注释中我也提到了,现在这样的结果虽然把数字和钻提出来了,但是没法解决返回多个结果的情况!也就是无法直接取最大!

    2.2.3 正则提取2

    针对上面的问题,该如何解决呢?首先自然的思路是:能不能在写正则表达式的时候就能够取多个数字的最大呢?遗憾的是,小编查了很久的资料没有发现,也欢迎找到的小伙伴在下方留言告诉me~ ok 此路行不通,那有没有其余的路可以走呢?

    这么想,如果我基于目前的结果再把数字提取出来,然后再通过某种方式让每一行数字都变为数值型(现在是字符型),再每行取最大!最后就是实现字符串的拼接,即每个数字后面加上“钻”字即可!ok!完美!

    # 单独把数字拿出来
    travel_dat$Star22 = str_extract_all(string = travel_dat$Star00, pattern = "\\d")
    # 自定义函数
    Transfun = function(x){
      # 实现的功能:每行取最大的数字
      return(max(unlist(x)))
    }
    # 批量实现
    travel_dat$Star2 = apply(travel_dat[,c('Star22'),drop=F], 1, Transfun) # 如果只有一列多加一个命令
    head(travel_dat$Star2)
    

    这里面有两个坑:

    这时候我们得到的结果见下图,可以看到实现了取最大!接下来工作就轻松了!
    在这里插入图片描述
    实现字符添加:

    # 变换类型为字符型
    travel_dat$Star2 = unlist(travel_dat$Star2)
    mode(travel_dat$Star2)
    # 统一加上‘钻’
    travel_dat$Star2 = paste0(travel_dat$Star2, '钻') # 注意past0字符之间无空格 paste有
    # 将0进行替换
    travel_dat[travel_dat$Star2 == '0钻', 'Star2'] <- '无信息'
    

    现在再来看看数据变成了啥样,已经提取变量ok了!下面就是绘图任务!
    在这里插入图片描述

    2.2.4 绘图

    绘图这时候直接贴代码:

    # 转化为因子类型
    # 先进行排序获取因子的顺序
    a = aggregate(travel_dat$Price, by=list(type=travel_dat$Star2), mean) %>% as.data.frame()
    a = a[order(a[,2], decreasing = F),]
    
    travel_dat$Star2 <- factor(travel_dat$Star2, levels = a$type)
    
    # 需要ggplot绘制对比箱线图
    library(ggplot2)
    p<-ggplot(data=travel_dat, aes(x=Star2,y=log(travel_dat$Price),fill=Star2))+
      geom_boxplot(show.legend = FALSE, varwidth = T)+
      scale_fill_manual(values=c('#CAFF70','#CAFF70','#CAFF70','#CAFF70','#CAFF70'))+
      theme(panel.grid.major=element_line(colour=NA), # 去掉网格线
            panel.grid.minor=element_line(colour=NA), # 去掉网格线
            panel.background = element_blank(), # 不要背景
            legend.position = 'none', title = element_text(family = 'STKaiti'), # 设置不要图例
            axis.title.x = element_text(family = 'STKaiti'), # 字体大小格式设置
            axis.title.y = element_text(family = 'STKaiti', size = 12, face = 'bold'),
            axis.text.x = element_text(family = 'STKaiti', size = 12, face = 'bold'))+
      labs(x="",y="产品价格(对数变换)", main = "")  # 横轴纵轴标题设置
    print(p)
    

    结果为:
    在这里插入图片描述
    这里面有几个点需要注意:

    • ggplot2的语法就是一层一层叠加上去!比较麻烦的是查每个参数的含义。
    • 关于R语言里颜色及其对应的代码可以参考:R——颜色篇
    • 设置箱子的宽度和样本量保持正比,则加一个参数varwidth = T

    参考

    展开全文
  • R语言的学习线路图

    2016-08-10 14:13:18
    现在对R感兴趣的人越来越多,很多人都想快速的掌握R语言,然而,由于目前大部分高校都没有开设R语言课程,这就导致很多人不知道如何着手学习R语言。本文分为6个部分,分别介绍初级入门,高级入门,绘图与可视化,...
  • R语言统计分析

    千次阅读 2014-02-26 09:50:51
    写过几篇关于RHadoop的技术性文章,都是从统计的角度,介绍如何让R语言利用Hadoop处理大数据。今天决定反过来,从计算机开发人员的角度,介绍如何让Hadoop结合R语言,能做统计分析的事情。 目录 R语言介绍 ...
  • 前面已经介绍过R语言读取excel的方法了,当然读取数据来说,个人还是推荐csv或txt存储(针对小数据量)。大数据量的数据的话建议还是用数据库,此外也可以考虑data.table包读取,这个包也是个神包,后面学习完可能来...
  • R语言和hadoop

    千次阅读 2014-07-27 16:26:13
    问题1: Hadoop的家族如此之强大,为什么还要结合R语言? a. Hadoop家族的强大之处,在于对大数据的处理,让原来的不可能(TB,PB数据量计算),成为了可能。 b. R语言的强大之处,在于统计分析,在没有Hadoop...
  • 使用R语言进行一元回归

    千次阅读 2017-08-30 17:13:07
    使用R语言进行一元回归我们通过一个例子来介绍通过R语言进行一元回归的方法例子:为研究某实验过程中,温度x(℃)对产品得率(%)的影响,测得数据如下: 温度x(℃) 100 110 120 130 140 150 160 170 ...
  • 感谢RStudio公司开发的keras包,使得R语言可以利用keras深度学习框架来做深度学习,具有简洁,易学,好用等特性。 什么是Keras? Keras是基于Python的深度学习库。 Keras 是一个用 Python 编写的高级神经网络API...
  • R语言中的饼图使用pie()函数,接受正数作为一个向量输入来创建,附加参数用于控制标签,颜色,标题等 语法: 使用R创建一个饼图基本语法 pie(x,labels,radius,main,col,clockwise) 以下是所使用的参数的说明 x - 是...
  • R能够使用rjson包读取JSON文件。 安装rjson软件包 在R控制台可以发出以下命令来安装 rjson 软件包。 install.packages("rjson") 输入数据 通过下面的数据复制到记事本等文本编辑器创建一个JSON文件。保存以 ....
  • r语言介绍与应用

    千次阅读 2016-03-27 15:01:59
    R是一款效率很高的开源软件。在编程语言中排名在前五。...R语言环境很好搭建,只要一台内存较大的Linux服务器就行,在上面安装 RStudio Server(支持多人通过浏览器界面登录使用),并且使得该环境与数据库服务器通信
  • R语言学习由浅入深路线图

    千次阅读 2015-01-13 16:23:32
    现在对R感兴趣的人越来越多,很多人都想快速的掌握R语言,然而,由于目前大部分高校都没有开设R语言课程,这就导致很多人不知道如何着手学习R语言。 对于初学R语言的人,最常见的方式是:遇到不会的地方,就跑到...
  • R实现kmeans(数据产品版) 聚类算法中经典算法kmeans,是根据距离将数据集划分为不同的类别。 #查看kmeans方法 help(kmeans) #kmeans(x,centers,iter.max,nstart=1,algorithm=c(...)) #x-数据集,center-聚类个数...
  • R语言进行关联分析

    千次阅读 2014-07-23 12:02:02
    主要参考《数据挖掘:R语言实战》(黄文,王正林编著)
  • 浅谈R语言

    千次阅读 2015-10-17 00:36:53
    于此同时,也让人们越来越注意到R语言功能的强大。在此之前,R语言几乎只是一些统计学家们再用。R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支。可以认为R是S语言的一种实现。而S语言是由AT&T贝尔实验室...
  • R语言学习手记 (1)

    千次阅读 2019-03-13 12:03:08
    经管的会计和财管都会学数据统计与分析R语言这么课,加上我也有点兴趣,就提前选了这门课,以下的笔记由老师上课的PPT、《R语言编程艺术》和《R语言数据科学》总结而来,希望为大家提供学习R语言的借鉴。
  • r语言抓取网页数据by Hiren Patel 希伦·帕特尔(Hiren Patel) 使用R进行网页抓取的简介 (An introduction to web scraping using R) With the e-commerce boom, businesses have gone online. Customers, too, ...
  • RHadoop实践系列文章,包含了R语言与Hadoop结合进行海量数据分析。Hadoop主要用来存储海量数据,R语言完成MapReduce 算法,用来替代Java的MapReduce实现。有了RHadoop可以让广大的R语言爱好者,有更强大的工具处理...
  • R语言的导数计算

    千次阅读 2014-11-16 00:36:08
    R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育...
  • matlab r2014a 和vs产品交叉编译问题

    千次阅读 2015-06-22 14:55:24
    在matlab的官网上有介绍matlab 用mex交叉编译...http://www.mathworks.com/support/compilers/R2014a/ [img=http://img.bbs.csdn.net/upload/201506/22/1434954706_730663.png][/img] [img=http://img.bbs.csdn.net
  • 如今,几乎所有领域或业务活动正在通过SMAC进行数据转换。SMAC指的是社交(Socia)、移动(Mobile)、分析(Analytics)和云服务...我们已经使用R语言RStudio由浅入深地解释了云计算的相关概念(请参考大数据...
  • R语言开始量化投资

    千次阅读 2017-05-22 13:53:27
    R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育...
  • r和rstudioIn this post I will discuss two Python Integrated Development Environments (IDE);... Both IDEs might be useful for researchers used to work with R and RStudio (a very good and ...
  • R语言作图——Radar chart(雷达图)

    千次阅读 2019-05-28 21:43:58
    也经常用来评估学生的成绩和产品的性能。 在生信领域,我们也可以用来比较评估样品的基因表达情况啦。 作图数据如下: 画出来的效果图如下: 作图方法: Step1. 绘图数据的准备 首先还是要把你想要绘图的数据调.....
  • 《An Introduction to R》,这是官方的入门小册子。其有中文版,由丁国徽翻译,译名为《R导论》。《R4Beginners》,这本小册子有中文版应该叫《R入门》。除此之外,还可以去读刘思喆的《153分钟学会R》。这本书收集...
  • 文章目录 前言 1 距离判别 1.1 双群体 1.1.1 理论推导 1.1.2 R语言实现 1.1.3 实例分析 1.2 多群体 1.2.1 理论推导 1.2.2 R语言实现 1.2.3 实例分析 2 贝叶斯判别 2.1 双群体 2.1.1 理论推导 2.1.2 R语言实现 2.1.3 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,677
精华内容 35,870
关键字:

产品上面的r