精华内容
下载资源
问答
  • r语言arima得到p q d的值,可以直接使用r语言软件输入代码
  • R语言P

    千次阅读 2020-02-04 15:30:05
    P_value <- function(cdf,x,paramet,side=0){ n <-length(paramet) p <-switch(n+1, cdf(x), cdf(x,paramet), cdf(x,paramet[1],paramet[2]), cd...

    P_value <- function(cdf,x,paramet,side=0){
      n <-length(paramet)
      p <-switch(n+1,
                 cdf(x),
                 cdf(x,paramet),
                 cdf(x,paramet[1],paramet[2]),
                 cdf(x,paramet[1],paramet[2],paramet[3])
      )
      if(side <0) p
      else if(side >0) 1-p
      else
        if(p<1/2) 2*p
      else 2*(1-p)
    }
    P_value(pnorm,3.71,c(0,1),0)

    展开全文
  • 机器学习算法,P&R语言

      机器学习算法,P&R语言

    一般说来,机器学习有三种算法:

    1. 监督式学习

    监督式学习算法包括一个目标变量(因变量)和用来预测目标变量的预测变量(自变量)。通过这些变量我们可以搭建一个模型,从而对于一个已知的预测变量值,我们可以得到对应的目标变量值。重复训练这个模型,直到它能在训练数据集上达到预定的准确度。 
    属于监督式学习的算法有:回归模型,决策树,随机森林,K邻近算法,逻辑回归等。

    2. 无监督式学习

    与监督式学习不同的是,无监督学习中我们没有需要预测或估计的目标变量。无监督式学习是用来对总体对象进行分类的。它在根据某一指标将客户分类上有广泛应用。 
    属于无监督式学习的算法有:关联规则,K-means聚类算法等。

    3. 强化学习

    这个算法可以训练程序做出某一决定。程序在某一情况下尝试所有的可能行动,记录不同行动的结果并试着找出最好的一次尝试来做决定。 
    属于这一类算法的有马尔可夫决策过程。

    常见的机器学习算法

    以下是最常用的机器学习算法,大部分数据问题都可以通过它们解决:

    1.线性回归 (Linear Regression)

    2.逻辑回归 (Logistic Regression)

    3.决策树 (Decision Tree)

    4.支持向量机(SVM

    5.朴素贝叶斯 (Naive Bayes)

    6.K邻近算法(KNN

    7.K-均值算法(K-means

    8.随机森林 (Random Forest)

    9.降低维度算法(DimensionalityReduction Algorithms

    10.GradientBoost和Adaboost算法

    1.线性回归 (Linear Regression)

    线性回归是利用连续性变量来估计实际数值(例如房价,呼叫次数和总销售额等)。我们通过线性回归算法找出自变量和因变量间的最佳线性关系,图形上可以确定一条最佳直线。这条最佳直线就是回归线。这个回归关系可以用Y=aX+b 表示。



    我们可以假想一个场景来理解线性回归。比如你让一个五年级的孩子在不问同学具体体重多少的情况下,把班上的同学按照体重从轻到重排队。这个孩子会怎么做呢?他有可能会通过观察大家的身高和体格来排队。这就是线性回归!这个孩子其实是认为身高和体格与人的体重有某种相关。而这个关系就像是前一段的YX的关系。



    Y=aX+b这个公式里:

    ·       Y- 因变量

    ·       a- 斜率

    ·       X- 自变量

    ·       b- 截距



    ab可以通过最小化因变量误差的平方和得到(最小二乘法)。



    下图中我们得到的线性回归方程是 y=0.2811X+13.9。通过这个方程,我们可以根据一个人的身高得到他的体重信息。



    线性回归主要有两种:一元线性回归和多元线性回归。一元线性回归只有一个自变量,而多元线性回归有多个自变量。拟合多元线性回归的时候,可以利用多项式回归(PolynomialRegression)或曲线回归 (Curvilinear Regression)

    Python 代码

    1.  #Import Library

    2.  #Import other necessary libraries likepandas, numpy...

    3.  from sklearn import linear_model

    4.  #Load Train and Test datasets

    5.  #Identify feature and responsevariable(s) and values must be numeric and numpy arrays

    6.  x_train=input_variables_values_training_datasets

    7.  y_train=target_variables_values_training_datasets

    8.  x_test=input_variables_values_test_datasets

    9.  # Create linear regression object

    10.linear = linear_model.LinearRegression()

    11.# Train the model using the training setsand check score

    12.linear.fit(x_train, y_train)

    13.linear.score(x_train, y_train)

    14.#Equation coefficient and Intercept

    15.print('Coefficient: \n', linear.coef_)

    16.print('Intercept: \n', linear.intercept_)

    17.#Predict Output

    18.predicted= linear.predict(x_test)

    R 代码

    1.  #Load Train and Test datasets

    2.  #Identify feature and responsevariable(s) and values must be numeric and numpy arrays

    3.  x_train <- input_variables_values_training_datasets

    4.  y_train <- target_variables_values_training_datasets

    5.  x_test <- input_variables_values_test_datasets

    6.  x <- cbind(x_train,y_train)

    7.  # Train the model using the trainingsets and check score

    8.  linear <- lm(y_train ~., data = x)

    9.  summary(linear)

    10.#Predict Output

    11.predicted= predict(linear,x_test)

    2.逻辑回归

    别被它的名字迷惑了,逻辑回归其实是一个分类算法而不是回归算法。通常是利用已知的自变量来预测一个离散型因变量的值(像二进制值0/1,是/否,真/假)。简单来说,它就是通过拟合一个逻辑函数(logit fuction)来预测一个事件发生的概率。所以它预测的是一个概率值,自然,它的输出值应该在01之间。

    同样,我们可以用一个例子来理解这个算法。

    假设你的一个朋友让你回答一道题。可能的结果只有两种:你答对了或没有答对。为了研究你最擅长的题目领域,你做了各种领域的题目。那么这个研究的结果可能是这样的:如果是一道十年级的三角函数题,你有70%的可能性能解出它。但如果是一道五年级的历史题,你会的概率可能只有30%。逻辑回归就是给你这样的概率结果。


    回到数学上,事件结果的胜算对数(log odds)可以用预测变量的线性组合来描述:

    odds= p/ (1-p) =probability of event occurrence / probability of not event occurrence

    ln(odds) =ln(p/(1-p))

    logit(p) =ln(p/(1-p)) = b0+b1X1+b2X2+b3X3....+bkXk


    在这里,p 是我们感兴趣的事件出现的概率。它通过筛选出特定参数值使得观察到的样本值出现的概率最大化,来估计参数,而不是像普通回归那样最小化误差的平方和。


    你可能会问为什么需要做对数呢?简单来说这是重复阶梯函数的最佳方法。因本篇文章旨不在此,这方面就不做详细介绍了。

    Python 代码

    1.  #Import Library

    2.  from sklearn.linear_model importLogisticRegression

    3.  #Assumed you have, X (predictor) and Y(target) for training data set and x_test(predictor) of test_dataset

    4.  # Create logistic regression object

    5.  model =LogisticRegression()

    6.  # Train the model using the trainingsets and check score

    7.  model.fit(X, y)

    8.  model.score(X, y)

    9.  #Equation coefficient and Intercept

    10.print('Coefficient: \n', model.coef_)

    11.print('Intercept: \n', model.intercept_)

    12.#Predict Output

    13.predicted= model.predict(x_test)

    R 代码

    1.  x <- cbind(x_train,y_train)

    2.  # Train the model using the trainingsets and check score

    3.  logistic <- glm(y_train ~., data = x,family='binomial')

    4.  summary(logistic)

    5.  #Predict Output

    6.  predicted= predict(logistic,x_test)



    延伸 
    以下是一些可以尝试的优化模型的方法:

    ·       加入交互项(interaction

    ·       减少特征变量

    ·       正则化(regularization

    ·       使用非线性模型

    3.决策树

    这是我最喜欢也是能经常使用到的算法。它属于监督式学习,常用来解决分类问题。令人惊讶的是,它既可以运用于类别变量(categorical variables)也可以作用于连续变量。这个算法可以让我们把一个总体分为两个或多个群组。分组根据能够区分总体的最重要的特征变量/自变量进行。更详细的内容可以阅读这篇文章Decision TreeSimplified

    从上图中我们可以看出,总体人群最终在玩与否的事件上被分成了四个群组。而分组是依据一些特征变量实现的。用来分组的具体指标有很多,比如Giniinformation Gain, Chi-square,entropy



    理解决策树原理的最好的办法就是玩Jezzball游戏。这是微软的一款经典游戏(见下图)。这个游戏的最终任务是在一个有移动墙壁的房间里,通过建造墙壁来尽可能地将房间分成尽量大的,没有小球的空间。

    每一次你用建墙来分割房间,其实就是在将一个总体分成两部分。决策树也是用类似方法将总体分成尽量多的不同组别。

    延伸阅读Simplified Version of Decision Tree Algorithms



    Python 代码

    1.  #Import Library

    2.  #Import other necessary libraries like pandas,numpy...

    3.  from sklearn import tree

    4.  #Assumed you have, X (predictor) and Y(target) for training data set and x_test(predictor) of test_dataset

    5.  # Create tree object

    6.  model = tree.DecisionTreeClassifier(criterion='gini')# for classification, here you can changethe algorithm as gini or entropy (information gain) by default it is gini 

    7.  # model = tree.DecisionTreeRegressor()for regression

    8.  # Train the model using the trainingsets and check score

    9.  model.fit(X, y)

    10.model.score(X, y)

    11.#Predict Output

    12.predicted= model.predict(x_test)

    R 代码

    1.  library(rpart)

    2.  x <- cbind(x_train,y_train)

    3.  # grow tree

    4.  fit <- rpart(y_train ~., data = x,method="class")

    5.  summary(fit)

    6.  #Predict Output

    7.  predicted= predict(fit,x_test)

    4. 支持向量机(SVM

    这是一个分类算法。在这个算法中我们将每一个数据作为一个点在一个n维空间上作图(n是特征数),每一个特征值就代表对应坐标值的大小。比如说我们有两个特征:一个人的身高和发长。我们可以将这两个变量在一个二维空间上作图,图上的每个点都有两个坐标值(这些坐标轴也叫做支持向量)。

    现在我们要在图中找到一条直线能最大程度将不同组的点分开。两组数据中距离这条线最近的点到这条线的距离都应该是最远的。



    在上图中,黑色的线就是最佳分割线。因为这条线到两组中距它最近的点,点AB的距离都是最远的。任何其他线必然会使得到其中一个点的距离比这个距离近。这样根据数据点分布在这条线的哪一边,我们就可以将数据归类。

    更多阅读Simplified Version of Support Vector Machine



    我们可以把这个算法想成n维空间里的JezzBall游戏,不过有一些变动:

    ·       你可以以任何角度画分割线/分割面(经典游戏中只有垂直和水平方向)。

    ·       现在这个游戏的目的是把不同颜色的小球分到不同空间里。

    ·       小球是不动的。

    Python 代码

    1.  #Import Library

    2.  from sklearn import svm

    3.  #Assumed you have, X (predictor) and Y(target) for training data set and x_test(predictor) of test_dataset

    4.  # Create SVM classification object

    5.  model = svm.svc()# there isvarious option associated with it, this is simple for classification. You canrefer link, for mo# re detail.

    6.  # Train the model using the trainingsets and check score

    7.  model.fit(X, y)

    8.  model.score(X, y)

    9.  #Predict Output

    10.predicted= model.predict(x_test)

    R 代码

    1.  library(e1071)

    2.  x <- cbind(x_train,y_train)

    3.  # Fitting model

    4.  fit <-svm(y_train ~., data = x)

    5.  summary(fit)

    6.  #Predict Output

    7.  predicted= predict(fit,x_test)

    5. 朴素贝叶斯

    这个算法是建立在贝叶斯理论上的分类方法。它的假设条件是自变量之间相互独立。简言之,朴素贝叶斯假定某一特征的出现与其它特征无关。比如说,如果一个水果它是红色的,圆状的,直径大概7cm左右,我们可能猜测它为苹果。即使这些特征之间存在一定关系,在朴素贝叶斯算法中我们都认为红色,圆状和直径在判断一个水果是苹果的可能性上是相互独立的。



    朴素贝叶斯的模型易于建造,并且在分析大量数据问题时效率很高。虽然模型简单,但很多情况下工作得比非常复杂的分类方法还要好。



    贝叶斯理论告诉我们如何从先验概率P(c),P(x)和条件概率P(x|c)中计算后验概率P(c|x)。算法如下: 

    ·       P(c|x)是已知特征x而分类为c的后验概率。

    ·       P(c)是种类c的先验概率。

    ·       P(x|c)是种类c具有特征x的可能性。

    ·       P(x)是特征x的先验概率。



    例子: 以下这组训练集包括了天气变量和目标变量是否出去玩。我们现在需要根据天气情况将人们分为两组:玩或不玩。整个过程按照如下步骤进行:



    步骤1:根据已知数据做频率表

    步骤2:计算各个情况的概率制作概率表。比如阴天(Overcast)的概率为0.29,此时玩的概率为0.64.



    步骤3用朴素贝叶斯计算每种天气情况下玩和不玩的后验概率。概率大的结果为预测值。



    提问: 天气晴朗的情况下(sunny),人们会玩。这句陈述是否正确?

    我们可以用上述方法回答这个问题。P(Yes |Sunny)=P(Sunny | Yes) * P(Yes) / P(Sunny) 
    这里,P(Sunny |Yes) = 3/9 = 0.33, P(Sunny) =5/14 = 0.36, P(Yes)= 9/14 = 0.64

    那么,P (Yes | Sunny)= 0.33 * 0.64 / 0.36 = 0.60>0.5,说明这个概率值更大。



    当有多种类别和多种特征时,预测的方法相似。朴素贝叶斯通常用于文本分类和多类别分类问题。

    Python 代码

    1.  #Import Library

    2.  from sklearn.naive_bayes importGaussianNB

    3.  #Assumed you have, X (predictor) and Y(target) for training data set and x_test(predictor) of test_dataset

    4.  # Create SVM classification object model= GaussianNB() # there is other distribution for multinomial classes likeBernoulli Naive Bayes, Refer link

    5.  # Train the model using the trainingsets and check score

    6.  model.fit(X, y)

    7.  #Predict Output

    8.  predicted= model.predict(x_test)

    R 代码

    1.  library(e1071)

    2.  x <- cbind(x_train,y_train)

    3.  # Fitting model

    4.  fit <-naiveBayes(y_train ~., data = x)

    5.  summary(fit)

    6.  #Predict Output

    7.  predicted= predict(fit,x_test)

    6.KNNK-邻近算法)

    这个算法既可以解决分类问题,也可以用于回归问题,但工业上用于分类的情况更多。KNN先记录所有已知数据,再利用一个距离函数,找出已知数据中距离未知事件最近的K组数据,最后按照这K组数据里最常见的类别预测该事件

     

    距离函数可以是欧式距离,曼哈顿距离,闵氏距离 (Minkowski Distance), 和汉明距离(Hamming Distance)。前三种用于连续变量,汉明距离用于分类变量。如果K=1,那问题就简化为根据最近的数据分类。K值的选取时常是KNN建模里的关键。

     

    KNN在生活中的运用很多。比如,如果你想了解一个不认识的人,你可能就会从这个人的好朋友和圈子中了解他的信息。

     

    在用KNN前你需要考虑到:

    ·       KNN计算成本很高

    ·       所有特征应该标准化数量级,否则数量级大的特征在计算距离上会有偏移。

    ·       在进行KNN前预处理数据,例如去除异常值,噪音等。

    Python 代码

    1.  #Import Library

    2.  from sklearn.neighbors importKNeighborsClassifier

    3.  #Assumed you have, X (predictor) and Y(target) for training data set and x_test(predictor) of test_dataset

    4.  # Create KNeighbors classifier objectmodel

    5.  KNeighborsClassifier(n_neighbors=6)# default value for n_neighbors is 5

    6.  # Train the model using the trainingsets and check score

    7.  model.fit(X, y)

    8.  #Predict Output

    9.  predicted= model.predict(x_test)

    R 代码

    1.  library(knn)

    2.  x <- cbind(x_train,y_train)

    3.  # Fitting model

    4.  fit <-knn(y_train ~., data = x,k=5)

    5.  summary(fit)

    6.  #Predict Output

    7.  predicted= predict(fit,x_test)

    7. K均值算法(K-Means

    这是一种解决聚类问题的非监督式学习算法。这个方法简单地利用了一定数量的集群(假设K个集群)对给定数据进行分类。同一集群内的数据点是同类的,不同集群的数据点不同类。



    还记得你是怎样从墨水渍中辨认形状的么?K均值算法的过程类似,你也要通过观察集群形状和分布来判断集群数量!

    K均值算法如何划分集群:

    1.    从每个集群中选取K个数据点作为质心centroids)。

    2.    将每一个数据点与距离自己最近的质心划分在同一集群,即生K个新集群

    3.    找出新集群的质心,这样就有了新的质心。

    4.    重复23,直到结果收敛,即不再有新的质心出现

     

    怎样确定K的值:

    如果我们在每个集群中计算集群中所有点到质心的距离平方和,再将不同集群的距离平方和相加,我们就得到了这个集群方案的总平方和。

     

    我们知道,随着集群数量的增加,总平方和会减少。但是如果用总平方和对K作图,你会发现在某个K值之前总平方和急速减少,但在这个K值之后减少的幅度大大降低,这个值就是最佳的集群数

    Python 代码

    1.  #Import Library

    2.  from sklearn.cluster importKMeans

    3.  #Assumed you have, X (attributes) fortraining data set and x_test(attributes) of test_dataset

    4.  # Create KNeighbors classifier objectmodel

    5.  k_means =KMeans(n_clusters=3, random_state=0)

    6.  # Train the model using the trainingsets and check score

    7.  model.fit(X)

    8.  #Predict Output

    9.  predicted= model.predict(x_test)

    R 代码

    1.  library(cluster)

    2.  fit <- kmeans(X,3)# 5 cluster solution

    8.随机森林

    随机森林是对决策树集合的特有名称。随机森林里我们有多个决策树(所以叫森林)。为了给一个新的观察值分类,根据它的特征,每一个决策树都会给出一个分类。随机森林算法选出投票最多的分类作为分类结果



    怎样生成决策树:

    1.    如果训练集中有N种类别,则有重复地随机选取N个样本。这些样本将组成培养决策树的训练集。

    2.    如果有M个特征变量,那么选取数m << M,从而在每个节点上随机选取m个特征变量来分割该节点。m在整个森林养成中保持不变。

    3.    每个决策树都最大程度上进行分割,没有剪枝。

     

    比较决策树和调节模型参数可以获取更多该算法细节。我建议读者阅读这些文章:

    1.    Introduction to Random forest – Simplified

    2.    Comparing a CART model to Random Forest (Part 1)

    3.    Comparing a Random Forest to a CART model (Part 2)

    4.    Tuning the parameters of your Random Forest model

    Python 代码

    1.  #Import Library

    2.  from sklearn.ensemble importRandomForestClassifier

    3.  #Assumed you have, X (predictor) and Y(target) for training data set and x_test(predictor) of test_dataset

    4.  # Create Random Forest object

    5.  model=RandomForestClassifier()

    6.  # Train the model using the trainingsets and check score

    7.  model.fit(X, y)

    8.  #Predict Output

    9.  predicted= model.predict(x_test)

    R 代码

    1.  library(randomForest)

    2.  x <- cbind(x_train,y_train)

    3.  # Fitting model

    4.  fit <- randomForest(Species~., x,ntree=500)

    5.  summary(fit)

    6.  #Predict Output

    7.  predicted= predict(fit,x_test)

    9.降维算法(Dimensionality Reduction Algorithms

    在过去的4-5年里,可获取的数据几乎以指数形式增长。公司/政府机构/研究组织不仅有了更多的数据来源,也获得了更多维度的数据信息。



    例如:电子商务公司有了顾客更多的细节信息,像个人信息,网络浏览历史,个人喜恶,购买记录,反馈信息等,他们关注你的私人特征,比你天天去的超市里的店员更了解你。



    作为一名数据科学家,我们手上的数据有非常多的特征。虽然这听起来有利于建立更强大精准的模型,但它们有时候反倒也是建模中的一大难题。怎样才能从10002000个变量里找到最重要的变量呢?这种情况下降维算法及其他算法,如决策树,随机森林,PCA,因子分析,相关矩阵,和缺省值比例等,就能帮我们解决难题。



    进一步的了解可以阅读Beginners GuideTo Learn Dimension Reduction Techniques



    Python 代码

    更多信息在这里

    1.  #Import Library

    2.  from sklearn import decomposition

    3.  #Assumed you have training and test dataset as train and test

    4.  # Create PCA obeject pca=decomposition.PCA(n_components=k) #default value of k =min(n_sample,n_features)

    5.  # For Factor analysis

    6.  #fa= decomposition.FactorAnalysis()

    7.  # Reduced the dimension of trainingdataset using PCA

    8.  train_reduced = pca.fit_transform(train)

    9.  #Reduced the dimension of test dataset

    10.test_reduced = pca.transform(test)

    R 代码

    1.  library(stats)

    2.  pca <- princomp(train, cor = TRUE)

    3.  train_reduced  <- predict(pca,train)

    4.  test_reduced  <- predict(pca,test)

    10.GradientBoosing AdaBoost

    GBMAdaBoost都是在有大量数据时提高预测准确度的boosting算法。Boosting是一种集成学习方法。它通过有序结合多个较弱的分类器/估测器的估计结果来提高预测准确度。这些boosting算法在KaggleAV Hackthon, CrowdAnalytix等数据科学竞赛中有出色发挥。

    更多阅读: Know aboutGradient and AdaBoost in detail



    Python 代码

    1.  #Import Library

    2.  from sklearn.ensemble importGradientBoostingClassifier

    3.  #Assumed you have, X (predictor) and Y(target) for training data set and x_test(predictor) of test_dataset

    4.  # Create Gradient Boosting Classifierobject

    5.  model=GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)

    6.  # Train the model using the trainingsets and check score

    7.  model.fit(X, y)

    8.  #Predict Output

    9.  predicted= model.predict(x_test)

    R 代码

    1.  library(caret)

    2.  x <- cbind(x_train,y_train)

    3.  # Fitting model

    4.  fitControl <- trainControl( method ="repeatedcv", number =4, repeats =4)

    5.  fit <- train(y ~., data = x, method ="gbm", trControl = fitControl,verbose = FALSE)

    6.  predicted= predict(fit,x_test,type="prob")[,2]

    GradientBoostingClassifier 和随机森林是两种不同的boosting分类树。人们经常提问这两个算法有什么不同。

     

    展开全文
  • <p>如何用r语言绘制置信区间的图 如何用r语言绘制置信区间的图 如何用r语言绘制置信区间的图 如何用r语言绘制置信区间的图</p>
  • R语言

    2015-07-22 11:26:00
    R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。 发展历史 R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支。...

        R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。

    发展历史

        R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支。可以认为R是S语言的一种实现。而S语言是由AT&T贝尔实验室开发的一种用来进行数据探索、统计分析和作图的解释型语言。最初S语言的实现版本主要是S-PLUS。S-PLUS是一个商业软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善。后来Auckland大学的Robert Gentleman和Ross Ihaka及其他志愿人员开发了一个R系统。由“R开发核心团队”负责开发。 R是基于S语言的一个GNU项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行。 R的语法是来自Scheme。R的使用与S-PLUS有很多类似之处,这两种语言有一定的兼容性。S-PLUS的使用手册,只要稍加修改就可作为R的使用手册。所以有人说:R,是S-PLUS的一个“克隆”。
    但是请不要忘了:R是免费的(R is free)。
        R语言源代码托管在github,具体地址可以看参考资料。
        R语言的下载可以通过cran的镜像来查找,具体地址可以看参考资料。
        R语言有域名为.cn的下载地址,其中一个由Datagurn,另一个由中国科学技术大学提供的。
        R语言Windows版,其中由两个下载地点是Datagurn和USTC提供的。具体地址可以看参考资料。

     

    功能

        R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能。
        与其说R是一种统计软件,还不如说R是一种数学计算的环境,因为R并不是仅仅提供若干统计程序、使用者只需指定数据库和若干参数便可进行一个统计分析。R的思想是:它可以提供一些集成的统计工具,但更大量的是它提供各种数学计算、统计计算的函数,从而使使用者能灵活机动的进行数据分析,甚至创造出符合需要的新的统计计算方法。
        该语言的语法表面上类似 C,但在语义上是函数设计语言(functional programming language)的变种并且和Lisp以及APL有很强的兼容性。特别的是,它允许在“语言上计算”(computing on the language)。这使得它可以把表达式作为函数的输入参数,而这种做法对统计模拟和绘图非常有用。
        R是一个免费的自由软件,它有UNIX、LINUX、MacOS和WINDOWS版本,都是可以免费下载和使用的。在那儿可以下载到R的安装程序、各种外挂程序和文档。在R的安装程序中只包含了8个基础模块,其他外在模块可以通过CRAN获得。
    R的原代码可自由下载使用,亦有已编译的执行档版本可以下载,可在多种平台下运行,包括UNIX(也包括FreeBSD和Linux)、Windows和MacOS。 R主要是以命令行操作,同时有人开发了几种图形用户界面。
    R内建多种统计学及数字分析功能。因为S的血缘,R比其他统计学或数学专用的编程语言有更强的物件导向(面向对象程序设计)功能。
        R的另一强项是绘图功能,制图具有印刷的素质,也可加入数学符号。
        虽然R主要用于统计分析或者开发统计相关的软体,但也有人用作矩阵计算。其分析速度可媲美GNU Octave甚至商业软件MATLAB。
        R的功能能够通过由用户撰写的套件增强。增加的功能有特殊的统计技术、绘图功能,以及编程界面和数据输出/输入功能。这些软件包是由R语言、LaTeX、Java及最常用C语言和Fortran撰写。下载的执行档版本会连同一批核心功能的软件包,而根据CRAN纪录有过千种不同的软件包。其中有几款较为常用,例如用于经济计量、财经分析、人文科学研究以及人工智能。

     

    语言环境

        R是一套由数据操作、计算和图形展示功能整合而成的套件。包括:有效的数据存储和处理功能,一套完整的数组(特别是矩阵)计算操作符,拥有完整体系的数据分析工具,为数据分析和显示提供的强大图形功能,一套(源自S语言)完善、简单、有效的编程语言(包括条件、循环、自定义函数、输入输出功能)。
        在这里使用"环境"(environment)是为了说明R的定位是一个完善、统一的系统,而非其他数据分析软件那样作为一个专门、不灵活的附属工具。

    转载于:https://www.cnblogs.com/begoogatprogram/p/4666838.html

    展开全文
  • R语言添加p-value和显著性标记

    万次阅读 多人点赞 2018-02-18 13:34:20
    R语言添加p-value和显著性标记,原文链接 https://mp.weixin.qq.com/s/gRw0krS3LY7c0QK9y47EJw 作者简介 Introduction taoyan:伪码农,R语言爱好者,爱开源。 个人博客: https://ytlogos.github.io/ 往期回顾 ...

    R语言添加p-value和显著性标记,原文链接 https://mp.weixin.qq.com/s/gRw0krS3LY7c0QK9y47EJw

    作者简介 Introduction

    taoyan:伪码农,R语言爱好者,爱开源。

    个人博客: https://ytlogos.github.io/

    往期回顾

    上篇文章中提了一下如何通过ggpubr包为ggplot图添加p-value以及显著性标记,本文将详细介绍。利用数据集ToothGrowth进行演示。

    ggpubr安装和加载

    # 直接从CRAN安装
    install.packages("ggpubr", repo="http://cran.us.r-project.org")
    
    #先加载包
    library(ggpubr)
    
    #加载数据集ToothGrowth
    data("ToothGrowth")
    head(ToothGrowth)

    数据格式如下:

       len supp dose
    1  4.2   VC  0.5
    2 11.5   VC  0.5
    3  7.3   VC  0.5
    4  5.8   VC  0.5
    5  6.4   VC  0.5
    6 10.0   VC  0.5

    比较方法

    R中常用的比较方法主要有下面几种:

    方法 R函数 描述
    T-test t.test() 比较两组(参数)
    Wilcoxon test wilcox.test() 比较两组(非参数)
    ANOVA aov()或anova() 比较多组(参数)
    Kruskal-Wallis kruskal.test() 比较多组(非参数)

    添加p-value

    主要利用ggpubr包中的两个函数:

    • compare_means():可以进行一组或多组间的比较

    • stat_compare_mean():自动添加p-value、显著性标记到ggplot图中

    compare_means()函数

    该函数主要用用法如下:

    compare_means(formula, data, method = “wilcox.test”, paired = FALSE,

    group.by = NULL, ref.group = NULL, …)

    注释:

    formula:形如x~group,其中x是数值型变量,group是因子,可以是一个或者多个

    data:数据集

    method:比较的方法,默认为”wilcox.test”, 其他可选方法为:”t.test”、”anova”、”kruskal.test”

    paired:是否要进行paired test(TRUE or FALSE)

    group_by: 比较时是否要进行分组

    ref.group: 是否需要指定参考组

    stat_compare_means()函数

    主要用法:

    stat_compare_means(mapping = NULL, comparisons = NULL hide.ns = FALSE,

    label = NULL, label.x = NULL, label.y = NULL, …)

    注释:

    mapping:由aes()创建的一套美学映射

    comparisons:指定需要进行比较以及添加p-value、显著性标记的组

    hide.ns:是否要显示显著性标记ns

    label:显著性标记的类型,可选项为:p.signif(显著性标记)、p.format(显示p-value)

    label.x、label.y:显著性标签调整

    …:其他参数

    比较独立的两组

    compare_means(len~supp, data=ToothGrowth)

    统计结果如下:

    # A tibble: 1 x 8
        .y. group1 group2          p      p.adj p.format p.signif   method
      <chr>  <chr>  <chr>      <dbl>      <dbl>    <chr>    <chr>    <chr>
    1   len     OJ     VC 0.06449067 0.06449067    0.064       ns Wilcoxon

    结果解释:

    .y:测试中使用的y变量

    p:p-value

    p.adj:调整后的p-value。默认为p.adjust.method=”holm”

    p.format:四舍五入后的p-value

    p.signif:显著性水平

    method:用于统计检验的方法

    绘制箱线图

    # 绘制箱线图
    p <- ggboxplot(ToothGrowth, x="supp", y="len", color = "supp",
      palette = "jco", add = "jitter") 
    # 添加p-value, 默认是Wilcoxon test
    p+stat_compare_means()

    image

    # 使用t-test统计检验方法
    p+stat_compare_means(method = "t.test")

    image

    上述显著性标记可以通过label.x、label.y、hjust及vjust来调整
    显著性标记可以通过aes()映射来更改:

    aes(label=..p.format..)或aes(lebel=paste0(“p=”,..p.format..)):只显示p-value,不显示统计检验方法

    aes(label=..p.signif..):仅显示显著性水平

    aes(label=paste0(..method..,”\n”, “p=”,..p.format..)):p-value与显著性水平分行显示

    举个栗子:

    # 显示显著性水平,位置在1.5两组间和Y轴40位置
    p+stat_compare_means(aes(label=..p.signif..), label.x = 1.5, label.y = 40)
    # 也可以将标签指定为字符向量,不要映射,只需将p.signif两端的..去掉即可
    p+stat_compare_means(label = "p.signif", label.x = 1.5, label.y = 40)

    比较两个paired sample

    # 比较两个paired sample
    compare_means(len~supp, data=ToothGrowth, paired = TRUE)
    
    # 利用ggpaired()进行可视化
    ggpaired(ToothGrowth, x="supp", y="len", color = "supp", line.color = "gray",
      line.size = 0.4, palette = "jco")+ stat_compare_means(paired = TRUE)

    image

    多组比较 Global test

    anova进行多组比较

    compare_means(len~dose, data=ToothGrowth, method = "anova")

    统计结果如下:

    # A tibble: 1 x 6
        .y.            p        p.adj p.format p.signif method
      <chr>        <dbl>        <dbl>    <chr>    <chr>  <chr>
    1   len 9.532727e-16 9.532727e-16  9.5e-16     ****  Anova

    可视化, default Kruskal-Wallis

    ggboxplot(ToothGrowth, x="dose", y="len", color = "dose", palette = "jco")+
      stat_compare_means()

    image

    使用其他的方法,anova

    #使用其他的方法, anova
    ggboxplot(ToothGrowth, x="dose", y="len", color = "dose", palette = "jco")+
     stat_compare_means(method = "anova")

    image

    成对比较

    默认进行两两比较

    # Pairwise comparisons:如果分组变量中包含两个以上的水平,那么会自动进行pairwise test,默认方法为”wilcox.test”
    compare_means(len~dose, data=ToothGrowth)

    比较结果:

    # A tibble: 3 x 8
        .y. group1 group2            p        p.adj p.format p.signif   method
      <chr>  <chr>  <chr>        <dbl>        <dbl>    <chr>    <chr>    <chr>
    1   len    0.5      1 7.020855e-06 1.404171e-05  7.0e-06     **** Wilcoxon
    2   len    0.5      2 8.406447e-08 2.521934e-07  8.4e-08     **** Wilcoxon
    3   len      1      2 1.772382e-04 1.772382e-04  0.00018      *** Wilcoxon

    可以指定比较哪些组

    # 可以指定比较哪些组
    my_comparisons <- list(c("0.5", "1"), c("1", "2"), c("0.5", "2"))
    ggboxplot(ToothGrowth, x="dose", y="len", color = "dose",palette = "jco")+
      stat_compare_means(comparisons=my_comparisons)+ # Add pairwise comparisons p-value 
      stat_compare_means(label.y = 50) # Add global p-value

    image

    可以通过修改参数label.y来更改标签的位置

    ggboxplot(ToothGrowth, x="dose", y="len", color = "dose",palette = "jco")+
    stat_compare_means(comparisons=my_comparisons, label.y = c(29, 35, 40))+ # Add pairwise comparisons p-value
    stat_compare_means(label.y = 45) # Add global p-value

    至于通过添加线条来连接比较的两组,这一功能已由包ggsignif实现

    设定参考组

    设定参考组

    compare_means(len~dose, data=ToothGrowth, ref.group = "0.5",  #以dose=0.5组为参考组
      method = "t.test" )
    # 可视化
    ggboxplot(ToothGrowth, x="dose", y="len", color = "dose", palette = "jco")+
      stat_compare_means(method = "anova", label.y = 40)+ # Add global p-value
      stat_compare_means(label = "p.signif", method = "t.test", ref.group = "0.5") # Pairwise comparison against reference

    image

    参考组也可以设置为.all.即所有的平均值

    # 参考组也可以设置为.all.即所有的平均值
    compare_means(len~dose, data=ToothGrowth, ref.group = ".all.", method = "t.test")
    #可视化
    ggboxplot(ToothGrowth, x="dose", y="len", color = "dose", palette = "jco")+
      stat_compare_means(method = "anova", label.y = 40)+# Add global p-value
      stat_compare_means(label = "p.signif", method = "t.test",
      ref.group = ".all.")#Pairwise comparison against all

    image

    为什么有时需要将ref.group设置为.all

    接下来利用survminer包中的数据集myeloma来讲解一下为什么有时候我们需要将ref.group设置为.all.

    # 利用survminer包中的数据集myeloma来讲解一下为什么有时候我们需要将ref.group设置为.all.
    install.packages("survminer")
    library(survminer) #没安装的先安装再加载
    data("myeloma")
    head(myeloma)

    我们将根据患者的分组来绘制DEPDC1基因的表达谱,看不同组之间是否存在显著性的差异,我们可以在7组之间进行比较,但是这样的话组间比较的组合就太多了,因此我们可以将7组中每一组与全部平均值进行比较,看看DEPDC1基因在不同的组中是否过表达还是低表达。

    compare_means(DEPDC1~molecular_group, data = myeloma, ref.group = ".all.", method = "t.test")

    比较结果如下:

    # A tibble: 7 x 8
         .y. group1           group2            p        p.adj p.format p.signif
       <chr>  <chr>            <chr>        <dbl>        <dbl>    <chr>    <chr>
    1 DEPDC1  .all.       Cyclin D-1 2.877529e-01 1.000000e+00     0.29       ns
    2 DEPDC1  .all.       Cyclin D-2 4.244240e-01 1.000000e+00     0.42       ns
    3 DEPDC1  .all.     Hyperdiploid 2.725486e-08 1.907840e-07  2.7e-08     ****
    4 DEPDC1  .all. Low bone disease 5.258400e-06 3.155040e-05  5.3e-06     ****
    5 DEPDC1  .all.              MAF 2.538126e-01 1.000000e+00     0.25       ns
    6 DEPDC1  .all.            MMSET 5.784193e-01 1.000000e+00     0.58       ns
    7 DEPDC1  .all.    Proliferation 2.393921e-05 1.196961e-04  2.4e-05     ****
    # ... with 1 more variables: method <chr>

    可视化DEPDC1基因表达谱

    ggboxplot(myeloma, x="molecular_group", y="DEPDC1",
      color = "molecular_group", add = "jitter", legend="none")+
      rotate_x_text(angle = 45)+
      geom_hline(yintercept = mean(myeloma$DEPDC1), linetype=2)+# Add horizontal line at base mean
      stat_compare_means(method = "anova", label.y = 1600)+ # Add global annova p-value
      stat_compare_means(label = "p.signif", method = "t.test", ref.group = ".all.")# Pairwise comparison against all

    image

    从图中可以看出,DEPDC1基因在Proliferation组中显著性地过表达,而在Hyperdiploid和Low bone disease显著性地低表达

    我们也可以将非显著性标记ns去掉,只需要将参数hide.ns=TRUE

    ggboxplot(myeloma, x="molecular_group", y="DEPDC1",
      color = "molecular_group", add = "jitter", legend="none")+
      rotate_x_text(angle = 45)+
      geom_hline(yintercept = mean(myeloma$DEPDC1), linetype=2)+# Add horizontal line at base mean
      stat_compare_means(method = "anova", label.y = 1600)+ # Add global annova p-value
      stat_compare_means(label = "p.signif", method = "t.test", ref.group = ".all.", hide.ns = TRUE)# Pairwise comparison against all

    分面多组同时比较

    按另一个变量进行分组之后进行统计检验,比如按变量dose进行分组:

    compare_means(len~supp, data=ToothGrowth, group.by = "dose")
    #可视化
    p <- ggboxplot(ToothGrowth, x="supp", y="len", color = "supp",
     palette = "jco", add = "jitter", facet.by = "dose", short.panel.labs = FALSE)#按dose进行分面
    #label只绘制p-value
    p+stat_compare_means(label = "p.format")

    image

    # label绘制显著性水平
    p+stat_compare_means(label = "p.signif", label.x = 1.5)

    image

    将所有箱线图绘制在一个panel中

    # 将所有箱线图绘制在一个panel中
    p <- ggboxplot(ToothGrowth, x="dose", y="len", color = "supp",
                   palette = "jco", add = "jitter")
    p+stat_compare_means(aes(group=supp))
    # 只显示p-value
    p+stat_compare_means(aes(group=supp), label = "p.format")
    # 显示显著性水平
    p+stat_compare_means(aes(group=supp), label = "p.signif")

    image

    进行paired sample检验

    compare_means(len~supp, data=ToothGrowth, group.by = "dose", paired = TRUE)
    # 可视化
    p <- ggpaired(ToothGrowth, x="supp", y="len", color = "supp",
        palette = "jco", line.color="gray", line.size=0.4, facet.by = "dose",
        short.panel.labs = FALSE) # 按dose分面
    # 只显示p-value
    p+stat_compare_means(label = "p.format", paired = TRUE)

    image

    其他图形

    有误差棒的条形图

    实际上我以前的文章里有纯粹用ggplot2实现

    ggbarplot(ToothGrowth, x="dose", y="len", add = "mean_se")+
      stat_compare_means()+
      stat_compare_means(ref.group = "0.5", label = "p.signif", label.y = c(22, 29))

    image

    有误差棒的线图

    ggline(ToothGrowth, x="dose", y="len", add = "mean_se")+
      stat_compare_means()+
      stat_compare_means(ref.group = "0.5", label = "p.signif", label.y = c(22, 29))

    image

    条形图(两个分组变量)

    ggbarplot(ToothGrowth, x="dose", y="len", add = "mean_se", color = "supp",
      palette = "jco", position = position_dodge(0.8))+
      stat_compare_means(aes(group=supp), label = "p.signif", label.y = 29)

    image

    线图-两分组

    # line, multiply pair group
    ggline(ToothGrowth, x="dose", y="len", add = "mean_se", color = "supp",
      palette = "jco")+
      stat_compare_means(aes(group=supp), label = "p.signif", label.y = c(16, 25, 29))

    image

    环境信息

    sessionInfo()

    信息如下:

    R version 3.4.3 (2017-11-30)
    Platform: x86_64-w64-mingw32/x64 (64-bit)
    Running under: Windows >= 8 x64 (build 9200)
    
    Matrix products: default
    
    locale:
    [1] LC_COLLATE=Chinese (Simplified)_China.936 
    [2] LC_CTYPE=Chinese (Simplified)_China.936   
    [3] LC_MONETARY=Chinese (Simplified)_China.936
    [4] LC_NUMERIC=C                              
    [5] LC_TIME=Chinese (Simplified)_China.936    
    
    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base     
    
    other attached packages:
    [1] survminer_0.4.2  bindrcpp_0.2     ggpubr_0.1.6.999 magrittr_1.5    
    [5] ggplot2_2.2.1   
    
    loaded via a namespace (and not attached):
     [1] Rcpp_0.12.13        compiler_3.4.3      plyr_1.8.4         
     [4] bindr_0.1           tools_3.4.3         digest_0.6.15      
     [7] tibble_1.3.4        gtable_0.2.0        nlme_3.1-131       
    [10] lattice_0.20-35     pkgconfig_2.0.1     rlang_0.1.4        
    [13] Matrix_1.2-12       psych_1.7.8         ggsci_2.8          
    [16] cmprsk_2.2-7        yaml_2.1.15         parallel_3.4.3     
    [19] gridExtra_2.3       knitr_1.19          dplyr_0.7.4        
    [22] stringr_1.2.0       survMisc_0.5.4      grid_3.4.3         
    [25] tidyselect_0.2.3    data.table_1.10.4-3 glue_1.2.0         
    [28] KMsurv_0.1-5        R6_2.2.2            km.ci_0.5-2        
    [31] survival_2.41-3     foreign_0.8-69      tidyr_0.8.0        
    [34] purrr_0.2.4         reshape2_1.4.2      splines_3.4.3      
    [37] scales_0.5.0        assertthat_0.2.0    mnormt_1.5-5       
    [40] xtable_1.8-2        colorspace_1.3-2    ggsignif_0.4.0     
    [43] labeling_0.3        stringi_1.1.5       lazyeval_0.2.1     
    [46] munsell_0.4.3       broom_0.4.3         zoo_1.8-1

    猜你喜欢

    写在后面

    为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外1200+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍末解决群内讨论,问题不私聊,帮助同行。
    image

    学习扩增子、宏基因组科研思路和分析实战,关注“宏基因组”
    image

    点击阅读原文,跳转最新文章目录阅读
    https://mp.weixin.qq.com/s/5jQspEvH5_4Xmart22gjMA

    展开全文
  • 解决R语言中save()函数保存对象集合问题–>《R语言编程艺术》P195
  • R语言绘图

    2021-04-28 18:03:23
    R语言绘图 https://wklchris.github.io/R-plotting-basic.html R语言绘图笔记汇总 https://zhuanlan.zhihu.com/p/25074456 R三大绘图系统 ...s
  • R语言实现PVAR(面板向量自回归模型)

    万次阅读 多人点赞 2019-06-05 20:16:00
    这次研究了一个问题,要用PVAR(面板向量自回归模型),在网上找的教程基本上都是Stata或者Eviews的教程,而鲜有R实现PVAR的教程,这里总结分享一下我摸索的PVAR用R实现的整个过程。 ...
  • R语言的各种分布函数

    万次阅读 多人点赞 2017-09-23 16:36:46
    R语言的各种分布函数: 至于具体的用法了,大家可以使用help命令,根据实际情况来进行使用 R提供工具来计算累计分布函数p(cummulative distribution function CDF),概率密度函数d和分位数函数q,另外...
  • 数据可视化——R语言为ggplot图形添加P值和显著性水平准备安装和加载R包示例数据均值比较的方法用于添加P值的R函数compare_means()stat_compare_means()独立双样本组间比较配对双样本组间比较多组样本的组间比较多个...
  • R语言整理

    2019-11-25 13:25:47
    R语言学习笔记(四):apply,sapply,lapply,tapply,vapply以及mapply的用法https://www.cnblogs.com/xihehe/p/7473981.html
  • R语言学习

    2018-03-06 12:24:05
    第一章 R语言介绍 (1)R的赋值符号为&lt;-: # 创建一个名为x的向量,包含5个标准正态分布的随机偏差 ...(2)可以使用函数getwd()来查看当前的工作目录,或...用于管理R工作空间的函数见《R语言实战》P11 (...
  • 题目 程序即结果 ...- (x-n*p)^2/(n*p*(1-p)) P <- 1 - pchisq(x2, 1) sprintf('X-squared = %f, df = 1, p-value = %f',x2,P) X-squared = 0.105263, df = 1, p-value = 0.745603 解释主要结果
  • R语言实现霍夫曼编码

    万次阅读 2020-06-02 10:24:04
    可读性极低,而且其实也没必要用R语言写,图个乐罢了 p=c(0.4,0.2,0.2,0.1,0.1)###输入形如c(0.4,0.2,0.2,0.1,0.1)的概率向量,即每个待编码消息的发生概率 p1=p###将概率向量另存,最后计算编码效率要用 ...
  • R语言中用模拟探索回归的P

    千次阅读 2019-06-13 08:39:18
    最近关于p值讨论的爆发激发了我进行简短的模拟研究。 特别是,我想说明p值如何随着效果和样本大小的不同而变化。 以下是模拟的详细信息。我模拟了我的自变量的绘制: 对于每一个,我定义一个as ...
  • 项目设计pvalue计算,但是由于.net 没有类似的公式或者函数,最终决定使用.net 调用R语言 采用.net 调用r语言的公用函数 需要安装 r语言环境 https://mirrors.tuna.tsinghua.edu.cn/CRAN/ 前端调用api 发现需要...
  • 个人博客: https://ytlogos.github.io/往期回顾R语言学习笔记之聚类分析R语言可视化学习笔记之ggpubr包上篇文章中提了一下如何通过ggpubr包为ggplot图添加p-value以及显著性标记,本文将详细介绍。利用数据集...
  • R语言多元Logistic逻辑回归 应用案例

    万次阅读 2019-06-14 15:00:55
    R语言多元Logistic回归 应用案例 多元Logistic回归 如何进行多重逻辑回归 可以使用阶梯函数通过逐步过程确定多重逻辑回归。此函数选择模型以最小化AIC,而不是像手册中的SAS示例那样根据p值。另请注意,在此...
  • R语言 RmySQL使用记录

    2015-03-25 23:14:13
    library(RMySQL) library(DBI) con(MySQL(),user="",password="",dbname="powerloaddata",host="192.168.1.11") #显示表 dbListTables(con) dbListFields(con,"raw_p_bus_zx") dbListFields(con,"DataZX") #调
  • R语言作图

    2017-07-31 00:13:00
    R语言作图确实很方便,先上个图看看。 数据如下(部分数据): 命令如下: > p<-ggplot(data=df,aes(Chromosome,p.value)) > p+geom_jitter(aes(colour=factor(Chromosome,levels = c(1:12))))+...
  • R语言hash

    2019-05-24 14:18:00
    R语言hash实现也很方便 install.packages("hash") library(hash) 我们载入hash包以后就可以进行hash赋值操作了,可以一对一,多对一和一对多,但如果键和值都大于一且长度不一样就会报错,hash的键是字符型...
  • 利用R语言计算回归分析中的t值和p
  • 最近写了一个质谱的数据处理软件,其中一部分功能要实现实时线性拟合,并且求得拟合方程 R2、SD 、 pearson 系数以及进行统计学F检验求得p-...因此这里引用了R语言的类库 R.net,通过C#调用R语言实现这一功能。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,902
精华内容 1,160
关键字:

p语言r语言