Chcę przepisać kod Pythona (w rzeczywistości Jupsyter Book) w R. Chodzi o obliczanie funkcji TEST T dla niektórych danych, aby wzrokować go po tym za pomocą BoxPlot.

Jestem początkującym w Pythonie i R, ale zrobiłem kilka prób. To jest kod w Pythonie:

import math
import numpy as np
import pandas as pd
from myst_nb import glue
from scipy.stats import ttest_ind
from matplotlib import pyplot as plt

labels = ['non-failing heart (NF)', 'failing heart (F)']
data = [(99, 52), (96, 40), (100, 38), (105, 18), 
        (np.nan, 11), (np.nan, 5), (np.nan, 42), 
        (np.nan, 55), (np.nan, 53), (np.nan, 39),
        (np.nan, 42), (np.nan, 50)]

df = pd.DataFrame.from_records(data, columns=labels)
tt = ttest_ind(df['non-failing heart (NF)'], 
               df['failing heart (F)'], 
               equal_var=False, nan_policy='omit')

pvalue = tt.pvalue

glue('pvalue', math.ceil(pvalue * 1000.0) / 1000.0)

Oto, czego próbowałem:

library(math)

labels(data) <- c("non-failing heart (NF)", "failing heart (F)")
library(reticulate)
np <- import("numpy", convert=FALSE)
(x <- np$arange(1, 9)$reshape(2L, 2L))
## [[  99.   52.]
##   [  96.   40.]
##   [  100.   38.]
##   [  105.   18.]
##   [ np.nan.   11.]
##   [ np.nan.  5.]
##   [ np.nan.  42.]
##   [ np.nan.  55.]
##   [ np.nan  53.]
##   [ np.nan  39.]
##   [ np.nan.  42.]
##   [ np.nan  50.]
##   [ 23.  24.]]


df = pd.DataFrame.from_records(data, columns=labels)
tt = ttest_ind(df['non-failing heart (NF)'], 
               df['failing heart (F)'], 
               equal_var=False, nan_policy='omit')

pvalue = tt.pvalue
print(pvalue)
2
Anouar 9 październik 2020, 03:52

1 odpowiedź

Najlepsza odpowiedź

Jak wspomniano, t.test jest jednym z wielu wbudowanych metod statystycznych w r w bibliotece {x1}}. Dlatego wystarczy zbudować tę samą ramkę danych, a następnie uruchom test testowy i wyodrębnić statystyki testowe w razie potrzeby.

Budować dane (niektórzy wangling do replikacji pd.DataFrame.from_records())

labels <- list('non-failing heart (NF)', 'failing heart (F)')

data <- list(c(99, 52), c(96, 40), c(100, 38), c(105, 18), 
             c(NA_integer_, 11), c(NA_integer_, 5), c(NA_integer_, 42), 
             c(NA_integer_, 55), c(NA_integer_, 53), c(NA_integer_, 39),
             c(NA_integer_, 42), c(NA_integer_, 50))

df <- setNames(do.call(rbind.data.frame, 
                       lapply(data, function(d) data.frame(d[1], d[2]))),
              labels)    
df
#    non-failing heart (NF) failing heart (F)
# 1                      99                52
# 2                      96                40
# 3                     100                38
# 4                     105                18
# 5                      NA                11
# 6                      NA                 5
# 7                      NA                42
# 8                      NA                55
# 9                      NA                53
# 10                     NA                39
# 11                     NA                42
# 12                     NA                50

Test T

results <- t.test(df[['non-failing heart (NF)']], df[['failing heart (F)']])

results
#   Welch Two Sample t-test

# data:  df[["non-failing heart (NF)"]] and df[["failing heart (F)"]]
# t = 12.114, df = 13.43, p-value = 1.311e-08
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
#  51.73232 74.10101
# sample estimates:
# mean of x mean of y 
# 100.00000  37.08333 
    
results$statistic
#        t 
# 12.11356 

results$estimate
# mean of x mean of y 
# 100.00000  37.08333 

results$p.value
# [1] 1.311125e-08

ceiling(results$p.value * 1000.0)/ 1000.0
# [1] 0.001
2
Parfait 9 październik 2020, 14:52