在R中用python重写ttest的问题

2024-09-27 04:18:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用R重写一个python代码(实际上是Jupyter的书)。它是关于为一些数据计算一个t-test函数,然后使用boxplot将其可视化

我是Python和R的初学者,但我做了一些尝试。这是python中的代码:

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)

这就是我尝试过的:

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)

Tags: fromimportdfdatalabelsasnpmath
1条回答
网友
1楼 · 发布于 2024-09-27 04:18:53

如前所述,^{}是R在其stats库中的许多内置统计方法之一。因此,只需构建相同的数据帧,然后运行测试并根据需要提取测试统计信息

数据构建(一些关于复制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

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

相关问题 更多 >

    热门问题