Linguagem R - um resumo meticuloso do conhecimento básico

Conceber

Em relação à linguagem R, quero escrevê-la em três partes

escreva na frente

Como esta é a primeira vez que estou aprendendo a linguagem R, é inevitável que haja deficiências. Por favor, tenha paciência. Este documento será atualizado com o tempo e algumas reflexões pessoais serão adicionadas.

Se você tiver alguma dúvida, pode comentar diretamente ou entrar em contato comigo. Naturalmente, o pré-requisito para a resposta éVocê é um pouco assim!

Na verdade, R não é o foco, muito menos o ponto final. R é muito melhor que python, c++ e java, certo? R não exige exame, apenas exige que você resolva problemas.

A questão é,Você tem que ter uma ideia, você precisa saber quais problemas encontra e encontrar soluções para eles. por exemplo:

Se você quiser processar o Excel, terá que abri-lo e pesquisar no BaiduComo abrir o Excel na linguagem R, se você encontrar problemas, poderá resolvê-los.Existem muitos métodos online.

A solução correta: Aaron, por que os arquivos csv ficam distorcidos quando eu os escrevo? (Uau, Aaron pode lidar com outro ERRO)

Solução errada: Aaron, não sei como fazer esse dever de casa. Por favor, me ajude a escrevê-lo. . . (Ninguém liga para Aaron a menos que você dê dinheiro❤️)

Agradecimentos especiais a: Professor Yang Qingyong da Escola de Informação

Referência: Professor Yang Qingyong PPT

O que a linguagem R pode fazer?

Quando se trata disso, a maioria das pessoas apenas diz: faça um desenho. Algumas pessoas também dirão analisar dados.

Aí vem a pergunta: você acha que a linguagem R é um curso de água? Eu pensava assim e achava que a linguagem R não era importante, mas depois descobri que era divertida.

Na verdade, é uma questão de professores seguirem as pessoas certas e fazerem as coisas certas. Se você seguir a pessoa errada, será difícil fazer a coisa certa.

Em primeiro lugar, a linguagem R não se limita ao desenho, é claro que é ótima para desenhar, pelo menos muito melhor que o Python.

Em segundo lugar, existem muitos pacotes em R e muitas funções escritas que podemos chamar, o que é muito conveniente para análise de dados e até mesmo aprendizado de máquina. Também é muito conveniente para testes posteriores e chamada de modelos.

Acho que R não é a chave. A chave é o conhecimento teórico, especialmente o conhecimento de análise estatística. R é apenas uma ferramenta, e o problema é o mais fundamental. Há um ditado famoso na indústria de informática:

A linguagem é apenas uma ferramenta, o problema é o mais fundamental.

Operações básicas

Como instalar e carregar pacotes em R

1. Pacote de instalação: entrada de linha de comando

install.packages("包的名字")
# 其实还有使用工具安装的,这个命令可以安装大部分包,其他个别的有问题都可以百度到解决方案

2. Carregue o pacote: insira-o na linha de comando ou no código

library(包的名字) #不用写引号哦

Ver código de ajuda

?solve  # 可以直接使用一个"?"来查看帮助文档
example(solve)  # 使用example()来查看该函数的使用范例
help(solve)  # 查看solve()函数的帮助文档

outro

help.start() # 查看全部帮助文档,或者进入http://127.0.0.1:27003/doc/html/index.html
??solve  # 查看某一确定的关键字内容文档,使用两个问号"??" 

saída

print não pode especificar setembro, mas cat pode

print("我爱帅帅龙");
cat("我爱","帅帅龙",sep="love");

Concatenação de strings

sep pode ser especificado para retornar a string concatenada e os tipos que não são string são automaticamente convertidos em strings

a = paste("我爱","帅帅龙",1,"万年")

Outras operações comuns

ctrl+L  # 清屏
rm(list=ls())  # 清除内存空间
getwd()  # 查看工作目录
setwd()  # 设置临时目录

código de teste

desenhar coração chinês

library("fun")
library("rgl")

demo("ChinaHeart2D")
demo("ChinaHeart3D")

palavra nuvem

library(wordcloud2)
wordcloud2(demoFreq)
wordcloud2(demoFreqC)

gramática básica

Atribuição

a = 10;# 我个人喜欢这样,新版本兼容很好,大家不用想太多,直接冲就完事了
b <- 10;# 中规中矩的赋值,表示流向,数据流向变量,也可以写成10 -> b

Crie vetores irregulares

Não se preocupe com o que é um vetor, apenas trate-o como um contêiner, semelhante à lista do python

a = c("我","爱","帅帅龙")

Crie vetores com certas regras

Rep significa repetir, o que significa repetição.

x <- seq(1, 10, by = 0.5)  # 得到1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0  7.5  8.0  8.5  9.0  9.5 10.0
x <- seq(1, 10, length = 21)  # 从1到10,得到21个等间距数
x <- rep(2:5, 2)  # 得到2 3 4 5 2 3 4 5
x <- rep(2:5, rep(2, 4))  # 得到2 2 3 3 4 4 5 5

Crie um vetor contínuo de números

a = c(1:5)  # 可以得到1 2 3 4 5

operador

Na verdade, não há nada de interessante para ler daqui em diante. É recomendável não ler esta parte. Basta pesquisar novamente quando encontrar problemas ou olhar para trás.

数值运算符
+  -  *  /
^  # 乘方
%%  # 求余
%/%  # 整除

关系运算符
>  <  ==  !=  >=  <=

逻辑运算符
&&  ||  !

其他运算符
:  # 冒号运算符,用于创建一系列数字的向量。
%in%  # 用于判断元素是否在向量里,返回布尔值,有的话返回 TRUE,没有返回 FALSE。
%*%  # 用于矩阵与它转置的矩阵相乘。

Funções matemáticas

Algumas funções matemáticas comuns são:

função ilustrar
quadrado(n) raiz quadrada de n
exp(n) A constante natural e elevada à enésima potência,
registro(m,n) A função logarítmica de n retorna a potência de n igual a m
log10(m) Equivalente a log(m,10)

A função round em R pode “arredondar cinco” em alguns casos. Quando o dígito do arredondamento for um número par, cinco também será arredondado.

nome modelo paramétrico significado
redondo (n) Rodada n
redondo (n, m) Arredondar n para m casas decimais
teto (n) Arredondar
chão (n) Arredondar para baixo

Funções trigonométricas

um pouco

Gerar letras maiúsculas e minúsculas

a = letters[1:4]  # letters为生成指定范围个小写字母向量。
b = LETTERS[1:4]  # LETTERS为生成指定范围个大写字母向量。

Valores ausentes são convertidos para 0

x [!is.na(x)]=0

Constantes comuns

  • 26 LETRAS MAIÚSCULAS
  • 26 letras minúsculas
  • Abreviação do mês mês.abb
  • Nome do mêsmês.nome
  • π valor pi

Trocar números e strings

Converter string em tipo numérico

as.integer("12.3")  # 字符串转整数,得到12
as.double("11.666")  # 字符串转小数,得到11.666

Converter tipo numérico em texto

Use colar()

a = paste(1)  # 

formatC() gera valores como strings

formatC(1/3, format = "e", digits = 4)  # digits表示小数点位数
formatC(1/3, format = "f", digits = 4)

como.personagem()

a=as.character(66)

controle do processo

declaração if

x <- 50L
if(is.integer(x)) {
   print("X 是一个整数")
} else {
   print("X 不是一个整数")
}

switch não introduz

enquanto loop

a = 1
while(a<5){
    print('hello')
}

para loop

A linguagem R é particularmente difícil de processar loops for. Bem, é difícil de qualquer maneira. Não sei por quê.

a = c([1:4])

for(i in a){
    print(i)
}

repetir ciclo

Repetir significa repetir.

a = 1
sum = 0
repeat{
  if(sum>10){
    break  # break终止循环,next继续下一次循环,就好像c++或python的continue
  }
  sum=sum+a
  a=a+1
}
print(sum)

Estruturas de dados comuns

Irmão Meng, vamos direto ao ponto! ! !
Insira a descrição da imagem aqui

Vetor:c()

Infelizmente, o que exatamente é um vetor? Na verdade, pode ser simplesmente entendida como uma lista python, mas na verdade existe uma implementação de lista em R, que é chamada de lista, e pode armazenar diferentes tipos.

Características:

  • Apenas um tipo de elemento pode ser armazenado. Se houver números e strings, eles serão automaticamente convertidos em strings.
  • Você pode usar o índice para obter elementos (o índice começa em 1)
  • Você pode usar a operação de fatiamento para interceptar um fragmento e ambas as extremidades são intervalos fechados.

Criar vetor

A gramática básica já foi mencionada antes.

Adicione valor usando anexar

good_sample_p <- append(good_sample_p,p)

Operações de adição, subtração, multiplicação e divisão de vetores

Uma coisa interessante é a regra de reciclagem de vetores, como a=c(1,2,3), b=c(4,5).Neste momento, se a+b for usado, haverá uma mensagem de aviso, mas não reportará um erro.

Tomemos como exemplo a+b: na verdade é (1+4, 2+5, 3+4) Agora você entende o que é reciclagem.

Algumas funções comumente usadas

  • sqrt(x), log(x), exp(x), sin(x), cos(x), tan(x), abs(x) representam raízes quadradas, logaritmos, exponenciais, funções trigonométricas e valores absolutos respectivamente .
  • sort(x, decrescente=FALSO) retorna um vetor resultante classificado de pequeno a grande pelos elementos de x.
  • order(x) é um vetor de subscritos de elementos tais que x é organizado de pequeno a grande
  • ordenar(x) é equivalente a x[ordem(x)]
  • numérico (n): representa um vetor zero de comprimento n
  • all(log(10 * x) > x): Determine se um vetor lógico é verdadeiro
  • any(log(10 * x) > x): determine se existe um valor verdadeiro
  • is.na(c(1, 2, NA)): Determine se cada elemento de x é um valor ausente

vetor lógico

Os vetores podem assumir valores lógicos, como

y <- c(TRUE, TRUE, FALSE)
x = c(1, 4, 6.25)
y = x > 3
# y的值是
[1] FALSE TRUE TRUE

Dois vetores também podem ser comparados

x = c(1, 4, 6.25)
log(10 * x)
[1] 2.302585 3.688879 4.135167
log(10 * x) > x
[1]  TRUE FALSE FALSE
比较运算符:<,<=,>,>=,==(相等),!=(不等)
逻辑向量可以进行与(&)[表示同时满足],或(|)[两者之一]运算.

Você também pode forçar a conversão do valor lógico em um valor inteiro, como: TRUE se torna 1, FALSE se torna 0,

x = c(1, 4, 6.25)

c(0, 1)[(x > 3) + 1]  # 下面我会对这句话解释一下
[1] 0 1 1

(x>3)+1
[1] 1 2 2

Vou explicar esta linha de código c(0, 1)[(x > 3) + 1] aqui.

(x> 3) obterá o vetor lógico [F, T, T]

(x>3)+1 forçará o valor lógico para um valor inteiro para obter [1,2,2]

Em seguida, use-o como índice do vetor anterior, c(0,1), para obter [0,1,1]

vetor de personagem

Ou seja, existem caracteres no vetor (esta explicação não é muito direta?)

a = c("我爱",'帅帅龙')  # 如果同时出现了字符串和数字,数字会转为字符串的哦

A função paste é usada para concatenar suas variáveis ​​independentes em uma string, com delimitadores correspondentes no meio. A emenda de string anterior foi introduzida, ok?

vetor complexo

Não é muito usado, então por que não simplesmente... não o apresentamos, ok?

índice vetorial

Irmão fofo! Acorde, isso é muito importante!

Os subscritos de vetores em R começam em 1, o que é inconsistente com software estatístico ou matemático comum. Os subscritos de vetores em linguagem C, Python e outras linguagens de programação começam em 0!

Não se deixe levar pelo python: o índice negativo do R indica qual elemento excluir.

x = c(42, 7, 64, 9)
x[2]  # 访问第2个元素
x[3] = -1  # 修改第三个数据的值
x[-4]  # 删除第四个元素
x[x < 10]  # 表示选取x<10的元素
x[c(1, 4)]  # 向量索引,是不是很神奇?

Ao definir um vetor, você pode adicionar nomes aos elementos.

ages <- c(Li = 23, Zhang = 33, Wang = 45)
# ages为
Li   Zhang  Wang 
23    33         45 
# 访问时可以用通常的方法,还可以用元素名访问
ages["Zhang"]
# 还可以定义向量后,再后加上名字
age1 = c(21, 34, 56)
names(age1) = c("Zhang", "Ding", "Liu")

matriz:matriz

matriz(dados = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

  • dados são os dados da matriz, geralmente um vetor
  • nrow é o número de linhas, ncol é o número de colunas
  • Quando byrow for TRUE, será 1, 2, 3, 4 horizontalmente, caso contrário será 1, 2, 3 verticalmente.

Criar matriz

matrix(1:12,ncol=4,byrow=TRUE)
# 得到的数据
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12

Funções comumente usadas

  • head(a,10) Visualize as primeiras 10 linhas da matriz

  • tail(a,10) Visualize as últimas dez linhas da matriz

  • cbind(): mescla para cima e para baixo

  • rbind(): mescla esquerda e direita

  • c(A): Exibe todos os vetores de A, que são vetores endireitados por colunas.

  • det (A): Encontre o valor do determinante

  • resolver (A): encontre o inverso

  • auto(A): autovalores e autovetores

B=rbind(c(1,2),c(3,4))
C=cbind(c(11,12),c(13,14))
D=rbind(B,C)
E=cbind(B,C)

Operações de Matriz

Semelhante à adição, subtração, multiplicação e divisão de vetores

As operações participantes geralmente têm a mesma forma, e vetores e matrizes com formas inconsistentes também podem ser usados ​​para quatro operações aritméticas. A regra é que os dados da matriz sejam operados nos elementos correspondentes do vetor (endireitados por colunas).

Acessar elementos e submatrizes de matrizes

  • A[2,3]# acesso é o (2,3) elemento 7 da matriz
  • A[i,] #Acesse a i-ésima linha, A[,j] #Acesse a j-ésima coluna
  • A[,c(1,2,3)] primeiras três colunas
  • A[,c('name1','name2')] especifica o nome da coluna

Renomeie os rótulos das linhas e colunas da matriz.

rownames(A)  <- c("a", "b", "c")
colnames(A) <- paste("X", 1:4, sep="")

aplicar função

Se você quiser realizar algum cálculo em uma determinada linha (coluna) de uma matriz, você pode usar a função apply: apply(x, margin, fun, …)

x representa a matriz, margin=1 representa o cálculo para cada linha, margin=2 representa o cálculo para cada coluna e fun é a função usada para cálculo.

apply(A, 1, sum)
apply(A, 2, mean)

fator: fator

fator(x, níveis = classificação(unique(x), na.último = TRUE), rótulos, excluir = NA, ordenado = FALSO)

Usado para codificar um vetor em um fator

Criar fatores

sex = c("M","F","M","M","F")
sexf = factor(sex);sexf

Funções comumente usadas

  • is.factor() verifica se o objeto é um fator
  • as.factor() converte vetores em fatores
  • níveis (x) pode obter os níveis dos fatores
  • tabela (x) conta a frequência de vários tipos de dados

função taply()

tapply(x, INDEX, FUN=NULL,…,simplify=TRUE)

  • x é um objeto, geralmente um vetor
  • INDEX é um fator com o mesmo comprimento que X
  • FUN é a função a ser calculada

Conhecendo o sexo de 5 alunos, e também conhecendo a altura desses 5 alunos, encontre a altura média dos grupos.

sex = c("M","F","M","M","F")
height = c(174, 165, 180, 171, 160)
tapply(height, sex, mean)

função gl()

gl(n, k, comprimento = n*k, rótulos = seq_len(n), ordenado = FALSO)

gl() pode ser usado para gerar fatores convenientemente

  • n é o número de níveis
  • k é o número de repetições
  • comprimento é o comprimento do resultado
  • rótulos é um vetor n-dimensional que representa os níveis dos fatores
  • ordenado é uma variável lógica que indica se é um fator ordenado. O valor padrão é FALSE.

Lista: lista

Criar lista

rec <- list(name="黎明", age=30, scores=c(85,76,90));rec
# 得到的数据
$name
[1] "黎明"

$age
[1] 30

$scores
[1] 85 76 90

Citando e modificando listas

Os elementos da lista podem ser referenciados com "nome da lista[[subscrito]]". As listas são diferentes dos vetores. Apenas um elemento pode ser referenciado por vez. Por exemplo, rec[[1:2]] não é permitido.

rec <- list(name="黎明", age=30, scores=c(85,76,90));rec
rec[[2]]  # 得到30
rec[[3]][2]  # 得到第三个元素的第二个元素,即76
# 若指定了元素的名字,则引用列表元素还可以用它的名字作为下标,
rec$age
rec[["age"]]
rec[[2]]=11  # 把30修改为11

Nota: O uso de "nome da lista [subscrito]" ou "nome da lista [intervalo do subscrito]" é permitido, mas diferentemente do significado anterior, ainda é uma lista

Quadro de dados: data.frame

Muitos pontos importantes

Um quadro de dados geralmente é uma matriz de dados, mas as colunas de uma matriz podem ser de tipos diferentes. Cada coluna do quadro de dados é uma variável e cada linha é uma observação.

Isso é semelhante ao DataFrame nos pandas do python.

Gerar quadro de dados

d = data.frame(name=c('黎明','周杰伦','刘德华'),age=c(30,35,28),height=c(180,175,173))
# d的值
    name age height
1   黎明  30    180
2 周杰伦  35    175
3 刘德华  28    173

as.data.frame(list) pode converter a lista em data.frame(), porque a lista não pode especificar um nome.

Referência de quadro de dados

d = data.frame(name=c('黎明','周杰伦','刘德华'),age=c(30,35,28),height=c(180,175,173))
d[1:2, 2:3]  # 得到前两行,2,3列的数据
d[["age"]]  # 获取age这一列的数据
# 等价于
d$height  # 获取height这一列的数据
rownames(d) = c("one", "two", "three")  # 各行也可以定义名字,指定index

Modificar valor

d$name[1] = "我爱你"  #将name的第一个值修改为我爱你   常用
d[1,2] = "女"  #将第1行第2列的值修改为“女”   常用
d[[1]][2] = "我爱你"  #将第一列第二个值改为“我爱你”

Adicionar e excluir linhas e colunas

d = df1[-2,] #删除第2行数据
d = df1[,-3] #删除第3列的数据
d = df1[-c(1,3),] #删除第1行和第3行的数据
d$r = age/weight  # 添加列r

função anexar()

R fornece a função attachment() para transferir variáveis ​​para a memória. Assim como nosso d$height ou d[["age"]], você não precisa escrever assim. Basta escrever a idade diretamente. Não é legal?

d = data.frame(name=c('黎明','周杰伦','刘德华'),age=c(30,35,28),height=c(180,175,173))
attach(d)
r <- age/height  # /对r进行修改不会影响d的数据
# r的值
[1] 0.1666667 0.2000000 0.1618497
detach(d) #取消连接

mesclar()

Mesclar vários quadros de dados em um quadro de dados

merge(data1, data2, by='ID')

Tratamento de exceções tryCatch()

Assim como a maioria das linguagens de programação, não entrarei em detalhes aqui. O que você precisa saber é que existe outra coisa chamada withCallingHandlers()

withCallingHandlers() é uma variante de tryCatch(), mas as condições de contexto da operação são diferentes. Raramente é usado, mas é muito útil.

Lendo e salvando dados

Leia txt: read.table()

read.table (“nome do arquivo.txt”)

Leia xlsx: read.xlsx()

Você precisa instalar o pacote xlsx primeiro e depois importar o pacote xlsx

dados <- read.xlsx(“nome do arquivo.xlsx”,n)

Salvar csv: write.csv()

write.csv(dados,arquivo = "nome do arquivo")

Use xlsx:write.xlsx()

write.xlsx(dados, “data.xlsx”,folha.nome=“folha1”)

Salvar como imagem ou arquivo pdf em R

Tomemos png como exemplo

png(file="myplot.png", bg="transparent")  #文件不指定地址,默认放在getwd()里了

# 这里写你的画图程序#

dev.off()  # 记得off

# 下面是一个实例
png(file="myplot.png")
plot(1:10)
rect(1, 5, 3, 7)
dev.off()

Se você salvá-lo como jpeg ou pdf, basta alterá-lo para png.

Algumas funções comuns de R

Irmão Meng, prepare-se. Lembre-se dessas coisas primeiro. Vamos começar a fazer desenhos e analisar estatísticas.

Glossário

média, mediana, moda

Não, não, não, realmente existem pessoas que não sabem o que essas três palavras significam. . .

variação

A variância (variância da amostra) é a média das diferenças quadradas entre cada valor da amostra e a média de todo o valor da amostra.

desvio padrão

Por padrão, usamos o desvio padrão populacional, que é a raiz quadrada da variância.

distribuição normal

A curva normal é em forma de sino, baixa em ambas as extremidades, alta no meio e simétrica. Como a curva é em forma de sino, as pessoas costumam chamá-la de curva em forma de sino.

Se a variável aleatória X obedece a uma distribuição normal com expectativa matemática μ e variância σ^2, ela é registrada como N(μ, σ^2). (A expectativa é Σxn*pn, xn representa frequência e pn representa probabilidade)

Sua função de densidade de probabilidade é uma distribuição normal.O valor esperado μ determina sua posição e seu desvio padrão σ determina a amplitude da distribuição. A distribuição normal quando μ = 0, σ = 1 é a distribuição normal padrão.
Insira a descrição da imagem aqui

Quanto ao significado da distribuição normal, você pode clicar aqui para referência.

significar: obter a média

a=c(1:6)
mean(a)

mediana: obtenha a mediana

a=c(1:6)
median(a)

Obtenha o modo

Não existe uma função especial na linguagem R para obter o modo, então você deve escrevê-lo à mão

# 创建函数
getmode = function(v) {
   uniqv = unique(v)  # unique主要是返回一个把重复元素或行给删除的向量、数据框或数组
   uniqv[which.max(tabulate(match(v, uniqv)))]
}
 
# 创建向量
v = c(2,1,2,3,1,2,3,4,1,5,5,3,2,3)
 
# 调用函数
result = getmode(v)
print(result)

quantil(): percentil, o padrão é 5

a=c(1:6)
quantile(a)
# 得到的结果
> quantile(a)
  0%  25%  50%  75% 100% 
1.00 2.25 3.50 4.75 6.00 

resumo(): Estatísticas descritivas

resumo(): Obtém estatísticas descritivas, que podem fornecer o valor mínimo, valor máximo, quartil e valor médio de variáveis ​​numéricas, bem como estatísticas de frequência de vetores de fatores e vetores logísticos, etc.

Os resultados são interpretados da seguinte forma:

a=c(1:6)
summary(a)
# 得到的结果
> summary(a)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    2.25    3.50    3.50    4.75    6.00 

var(): Calcula a variância

a = c(1:5)
var(a)

sd(): desvio padrão

a = c(1:5)
sd(a)

coeficiente de variação

Variância dividida pela média

Quando você precisa comparar o grau de dispersão de dois conjuntos de dados, se as escalas de medição dos dois conjuntos de dados forem muito diferentes ou se as dimensões dos dados forem diferentes, não é apropriado usar diretamente o desvio padrão para comparação. pode usar o coeficiente de variação.

classificar, ordenar: classificar, especificar regras de classificação

x = c(1,7,5,4,4,6,9)
x = sort(x,decreasing=FALSE)  # 返回升序排列结果,当decreasing为TRUE时为降序排列
# 或者
x_order = order(x,decreasing=FALSE)  # 返回升序后的下标, decreasing为TRUE时为降序排列
x = x[x_order]

Para classificar uma matriz

x[ordem(x[,1],x[,2]),]

Nota: Para ordem decrescente, basta adicionar o parâmetro decrescente.

Tratamento de valores ausentes

Para valores de NA, alguns cálculos serão salvos. Precisamos ignorar NA e adicionar os seguintes parâmetros: na.rm=TRUE, por exemplo

mean(height,na.rm=TRUE)
[1] 5.855

cor(): Calcula o coeficiente de correlação entre duas variáveis ​​(opcional)

cor(height,log(height))

cov(): covariância entre duas variáveis ​​(opcional)

cov(height,log(height))

shapiro.test(): Determine se os dados satisfazem a distribuição normal

De modo geral, quando o valor p retornado é maior que 0,05, ele é satisfeito.

Claro que existem circunstâncias especiais, haha, porque na maioria dos casos de pesquisa científica 0,05 não é rigoroso e pode ser designado como 0,01. Se a pergunta não especificar alfa, basta usar como padrão 0,05.

Acho que você gosta

Origin blog.csdn.net/m0_46521785/article/details/109089346
Recomendado
Clasificación